Использование ajax модуля Обмен данными для выполнения определенных операций — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «В некоторых задачах, необходимо выполнить достаточно ресурсоемкие операции, как по нагру…»)
 
 
Строка 40: Строка 40:
  
 
Потом, в модуле "Обмен данными" необходимо создать сценарий импорта, указать наш новый тип импорта, и также необходимо указать любой файл на сервере. В методе '''readDataBlock''' необходимо прописать php-код для выполнения и настроить условие остановки ajax-цикла. После настройки метода '''readDataBlock''' можно запустить сценарий импорта стандартным способом.
 
Потом, в модуле "Обмен данными" необходимо создать сценарий импорта, указать наш новый тип импорта, и также необходимо указать любой файл на сервере. В методе '''readDataBlock''' необходимо прописать php-код для выполнения и настроить условие остановки ajax-цикла. После настройки метода '''readDataBlock''' можно запустить сценарий импорта стандартным способом.
 +
[[Категория:Модуль Обмен данными]]

Текущая версия на 10:59, 8 сентября 2011

В некоторых задачах, необходимо выполнить достаточно ресурсоемкие операции, как по нагрузке на процессор, так и длительные по времени. Возникает необходимость разбить выполнение скрипта на части, в решении этой задачи поможет ajax-овый механизм выполнения операций, данные будут выполняться по частям, при повторном автоматическом запуске скрипта, будет определено смещение, и операция продолжится с места остановки.

Итак, что же необходимо сделать, для использования готового функционала модуля "Обмен данными". Аналогично данной статье Добавление нового формата экспорта данных добавляем новый тип импорта данных, указываем идентификатор ajax.

Файл ajaxSplitter.php, следующего содержания:

<?php
  class ajaxSplitter extends umiImportSplitter {
  
    protected function readDataBlock() {
      // xml-пустышка
      $doc = new DOMDocument("1.0", "utf-8");
      $doc->formatOutput = XML_FORMAT_OUTPUT;
      $rootNode = $doc->createElement("umidump");
      $doc->appendChild($rootNode);
      $rootNode->setAttribute('version', '2.0');
      // текущее смещение
      $index = ($this->offset) ? $this->offset : 0;
      //Какие-то действия, в зависимости от текущего смещения
      
      
      //тестовый лог
      //file_put_contents(CURRENT_WORKING_DIR .'/traceajax.txt', $index.';', FILE_APPEND);
      
      $this->offset = $index + 1;
      // условие для остановки цикла, которое необходимо настроить
      if($this->offset > 100) $this->complete = true;    
      return $doc;
    }
    
    public function translate(DomDocument $doc) {
      return $doc->saveXML();
    }
  
  }
?>

необходимо скопировать в папку: \classes\system\subsystems\import\splitters\

Потом, в модуле "Обмен данными" необходимо создать сценарий импорта, указать наш новый тип импорта, и также необходимо указать любой файл на сервере. В методе readDataBlock необходимо прописать php-код для выполнения и настроить условие остановки ajax-цикла. После настройки метода readDataBlock можно запустить сценарий импорта стандартным способом.