Разработка:modlibs/templater — различия между версиями

Материал из DOF
Перейти к: навигация, поиск
м (Использование)
(Указание формата и типа документа)
Строка 81: Строка 81:
 
О том, какой формат должны иметь данные для экспорта описано в разделе [[Разработка:modlibs/templater#Формат исходных данных|Формат исходных данных]]. Рекомендуется выделять для сбора и упаковки данных отдельный класс, особенно если процесс сбора данных достаточно сложен.
 
О том, какой формат должны иметь данные для экспорта описано в разделе [[Разработка:modlibs/templater#Формат исходных данных|Формат исходных данных]]. Рекомендуется выделять для сбора и упаковки данных отдельный класс, особенно если процесс сбора данных достаточно сложен.
 
==== Указание формата и типа документа ====
 
==== Указание формата и типа документа ====
 +
После того, как были собраны все необходимые данные можно приступать непосредственно к процессу экспорта. Нужно сначала получить объект для для экспорта, затем передать ему данные, и получить готовый файл.
  
 +
''' Пример '''
 +
* Обращаемся к плагину templater чтобы получить нужный объект.
 +
    $export = $DOF->modlib('templater')->template($data, 'im', 'genedu', 'gradeslist');
 +
Здесь im - тип плагина, genedu - имя плагина, gradeslist - название документа, который будет экспортирован.
 +
$export - объект, который будет производить все необходимые операции.
 +
$data - собранные на предыдущем этапе данные.
 +
* Получив объект, обращаемся к нему выбираем формат, в который мы собираемся произвести экспорт.
 +
    $file = $export->get_file();
 +
В переменной $file будет содержаться файл нужного формата. Если вам нужно отправить файл немедленно вместе с заголовками, то воспользуйтесь методом send_file.
  
 
=== Создание типа документа ===
 
=== Создание типа документа ===

Версия 19:57, 24 мая 2009

Плагин
Название templater
Тип modlibs


Принципы работы

Плагин templater отвечает за все действия по экспорту данных и за создание любых электронных документов (отчетов, приказов, графиков и т. п.)

Общие сведения

Все документы формируются следующим образом: на основе требуемого документа создается файл шаблона документа;

  • собираются данные для вставки в шаблон
  • формируется экспортируемый документ - производится вставка данных в шаблон;
  • сформированный документ посылается клиенту по http-протоколу.

Шаблон документа формируется из документа по специальным правилам, а затем размещается в оговоренном месте плагина, из которого производится экспорт. Затем по аналогичным правилам производится вставка данных. Сбор и подготовка данных для экспорта производятся тем же плагином. В настоящее время формирование шаблона производится в ручную. Описываемый модуль получает путь к каталогу документа, данные для вставки и формат документа. На основе этих данных он формирует документ и посылает его клиенту.

Формат исходных данных

Данные, предназначенные для экспорта должны соответствовать следующим стандартам:

  • Исходные данные всегда представлены в виде объекта класса stdClass (стандартный объект PHP).
  • Поля объекта могут содержать строки, числа и массивы объектов (массивы строк или чисел не допускаются). Данные других типов не обрабатываются.

Строки и числа подставляются в шаблон документа "как есть", объекты обрабатываются как блоки. Объект данных для экспорта может иметь неограниченное количество вложенных блоков. Желательно для создания объекта данных для экспорта создавать отдельный класс, которые решает эту задачу.

Пример исходных данных

В этом примере мы построим объект для экспорта оценок учеников двух классов. У каждого класса есть название, предмет, и дата, за которую выставлялись оценки. В каждом классе есть несколько учеников, которые эти оценки получили. Данные для экспорта будут выглядеть следующим образом:

   stdClass Object
   (
   [classes] => Array 
   
       [0] => stdClass Object                                           // данные о первом классе
           [name]       => 3 "б"
           [date]       => 21.01.09
           [subject]    => Математика
           [students]   => Array
   
               [0] => stdClass Object                                   // здесь хранятся данные первого ученика из 3-го "Б"
                       [number] => 1
                       [fio]    => Замеладский Алексей
                       [grade]  => 5
               [1] => stdClass Object
                       [number] => 2
                       [fio]    => Гусева Татьяна
                       [grade]  => 4
   
       [1] => stdClass Object                                           // данные о втором классе
           [name]       => 5 "б"
           [date]       => 21.01.09
           [subject]    => Русский язык
           [students]   => Array
   
               [0] => stdClass Object                                   // здесь хранятся данные первого ученика из 5-го "Б"
                       [number] => 1
                       [fio]    => Коньков Сергей
                       [grade]  => 5
               [1] => stdClass Object
                       [number] => 2
                       [fio]    => Захаров Александр
                       [grade]  => 3
   )

В этом примере поля объектов представляют собой данные, которые нужно распечатать, о объекты служат для упаковки этих данных, и разделения их на блоки.

Тип документа

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

Форматы экспорта

Каждый формат экспорта по-своему обрабатывает данные, указанные в типе документа. Тем не менее, какой бы формат экспорта не был выбран (например csv, odf, pdf), данные всегда используются одни и те же.

Использование

В этом разделе будет описано, как использовать плагин templater, будут приведены примеры кода.

Подготовка к экспорту

Для начала надо убедиться, что на месте вспомогательные средства. Т.е. установлен описываемый плагин templater, и плагин обеспечивающий превращения шаблона документа в документ - pear. Поэтому убедитесь, что у вас

  • установлен плагин pear. Убедитесь, что на странице списка установленных плагинов, напротив модуля pear написано "Удалить, а не " "Установить".
  • в нем есть библиотека HTML_Template_Sigma. Проверьте наличие файла .../modlibs/pear/libs/HTML_Template_Sigma/Sigma.php.
  • установлен описываемый модуль - templater. Проверьте так же как и pear.

Использование готового документа

Самый простой способ экспортировать данные. Использование этого способа предполагает, что кто-то уже создал шаблон документа для экспорта, определил его тип и разметил его соответствующим образом. Вам остается сделать всего 2 действия:

  • собрать данные
  • указать какой документ в какой формат вы желаете экспортировать.

Сбор данных

Данные извлекаются из базы данных, или из форм, а затем преобразуются в нужный для экспорта формат. О том, какой формат должны иметь данные для экспорта описано в разделе Формат исходных данных. Рекомендуется выделять для сбора и упаковки данных отдельный класс, особенно если процесс сбора данных достаточно сложен.

Указание формата и типа документа

После того, как были собраны все необходимые данные можно приступать непосредственно к процессу экспорта. Нужно сначала получить объект для для экспорта, затем передать ему данные, и получить готовый файл.

Пример

  • Обращаемся к плагину templater чтобы получить нужный объект.
   $export = $DOF->modlib('templater')->template($data, 'im', 'genedu', 'gradeslist');

Здесь im - тип плагина, genedu - имя плагина, gradeslist - название документа, который будет экспортирован. $export - объект, который будет производить все необходимые операции. $data - собранные на предыдущем этапе данные.

  • Получив объект, обращаемся к нему выбираем формат, в который мы собираемся произвести экспорт.
   $file = $export->get_file();

В переменной $file будет содержаться файл нужного формата. Если вам нужно отправить файл немедленно вместе с заголовками, то воспользуйтесь методом send_file.

Создание типа документа

Простое

В случае простого создания типа документа вам не потребуется писать какой-либо дополнительный код для обработки данных.

Для этого нужно:

  • Создать все необходимые файлы и папки
  • подготовить шаблон документа
  • собрать данные
  • указать какой документ в какой формат вы желаете экспортировать.
Создание файлов и папок

Надо в корневом каталоге плагина, из которого производится экспорт, создать папку с именем templater. В ней, для каждого из документов, которые предполагается экспортировать, надо создать папку с именем типа документа. В них надо создать директории, с названиями форматов экспорта. Например, в плагине интерфейса exampleim планируется экспортировать документ с именем "тип_документа" в различные форматы. Тогда структура папок плагина болжна быть такой:

   .../im/exampleim/templater/<тип_документа>/<имя_формата1>/
   .../im/exampleim/templater/<тип_документа>/<имя_формата2>/

Здесь:

  • тип_документа - имя типа документа
  • имя_формата - формат, в который нужно экспортировать файл

В свою очередь, внутри папки с именем формата должен лежать шаблон результирующего документа.

Подготовка шаблона документа

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

Сбор данных

Сбор данных при создании своего типа документа аналогичен сбору данных при использовании готового документа.

Указание формата и типа документа

Указание формата и типа документа происходит так же как и при использовании готового документа.

Сложное, с использованием дополнительной логики

Создание формата

API плагина

Форматы экспорта

DBG

ODF

Ссылки