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

Материал из DOF
Перейти к: навигация, поиск
(Стандарт именования классов:)
(Реализация функционала классов)
Строка 118: Строка 118:
 
== Реализация функционала классов ==
 
== Реализация функционала классов ==
 
'''dof_modlib_templater'''
 
'''dof_modlib_templater'''
function template($plugintype, $pluginname, $templatename=null) — получить класс для экспорта в указанном плагине, с указанным названием.
+
 
 +
 
 +
''function template($plugintype, $pluginname, $templatename=null)'' — получить класс для экспорта в указанном плагине, с указанным названием.
 
Возвращает объект класса dof_modlib_templater_package или dof_типплагина_имяплагина_templater_кодшаблона.
 
Возвращает объект класса dof_modlib_templater_package или dof_типплагина_имяплагина_templater_кодшаблона.
  
Строка 129: Строка 131:
 
***Файла нет - возвращаем объект от стандартного класса dof_modlib_templater_package.
 
***Файла нет - возвращаем объект от стандартного класса dof_modlib_templater_package.
 
*$templatename не указано. Возвращаем базовый плагин dof_modlib_templater_package.
 
*$templatename не указано. Возвращаем базовый плагин dof_modlib_templater_package.
 +
 +
 +
''function template_path($plugintype, $pluginname, $templatename=null, $adds=null)'' - путь к шаблону (корню или внутренней папке)
 +
*Получаем путь к корню плагина.
 +
*$templatename=null. Не включаем имя папки шаблона в путь.
 +
*$templatename<>null. Обращаемся к внешнему плагину. Включаем имя папки шаблона в путь: /templater/$templatename.
 +
*$adds=null. Включаем в путь дополнительные фрагменты пути.
 +
*$adds<>null. Не включаем в путь дополнительные фрагменты пути.
 +
*Возвращаем получившийся путь.
  
 
== Структура вызова классов ==
 
== Структура вызова классов ==

Версия 19:40, 18 марта 2009

Экспорт документов

Модуль реализуется как библиотека modlib, которая называется templater. Модуль предназначен для организации экспорта данных в различные форматы (odt,csv,версии для печати и т.д.). Данные для экспорта представляются в виде структурированного объекта (класс object()), в котором одиночные поля представляются скалярами, записи - объектами, а таблицы - массивами объектов. Структура данного объекта, по возможности, должна совпадать со структурой соответствующего объекта, используемого в storage.

Структура плагина templater

  • templater - папка плагина;
    • formats - папка, в которой лежат файлы, преобразующие данные в файл определенного типа.
      • odf папка, содержащая все файлы, которые понадобятся для преобразования данных в один из форматов odt, ods и т.д.
        • init.php - файл, содержащий класс dof_modlib_templater_format_odf для преобразования в конкретный формат
      • xls - папка, содержащая все файлы, которые понадобятся для преобразования данных в формат xls.
        • init.php - файл, содержащий класс dof_modlib_templater_format_xls для преобразования в конкретный формат
      • csv - папка, содержащая все файлы, которые понадобятся для преобразования данных в формат csv.
        • init.php - файл, содержащий класс dof_modlib_templater_format_csv для преобразования в конкретный формат
    • init.php - обязательный файл плагина, содержит класс dof_modlib_templater, который вызывает собственный или внешний обработчик форматирования и экспорта
    • format.php - файл, содержащий класс dof_modlib_templater_format - содержит базовый класс для остальных классов форматирования.
    • package.php - файл, содержащий класс dof_modlib_templater_package, который вызывает собственный обработчик форматирования и экспорта

Назначение классов:

  • dof_modlib_templater_format - абстрактный класс. Является родительским, для классов, реализующих преобразование данных в файл конкретного типа. Определяет минимальный обязательный набор методов для дочерних классов.
  • dof_modlib_templater_format_xls - возвращает xls-файл как строку.
  • dof_modlib_templater_package - стандартный обработчик экспорта. Получает необработанные данные, обрабатывает их и посылает клиенту.
  • dof_modlib_templater - проверяет наличие у внешнего плагина своего обработчика экспорта. Если он есть, возвращает его, если нет - возвращает стандартный обработчик.

Структура папок

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

Шаблоны хранятся в плагинах, использующих данную библиотеку по следующей схеме:

  • папка плагина, использующего modlib/templater для экспорта документа
    • templater - в этой папке хранятся все шаблоны, принадлежащие этому плагину
      • Код шаблона (например order)
        • init.php - необязательный файл, переопределяющий класс всего шаблона
        • Код формат шаблона (pdf, csv)
          • init.php - необязательный (для некоторых шаблонов) файл, переорпделяющий класс парсера шаблона
        • odf - пример шаблона odf (конкретный формат odt,ods задается уже внутри шаблона, поскольку все документы устроены одинаково)
          • init.php (необязательно)
          • content - папка с распакованным документов ODF
            • content.xml - xml-документ с основным контентом, размеченный тегами шаблонизатора [1] PEAR::QuickForm
            • mimetype - mime-тип документа, который будет использоваться при передаче документа по http и на основании которого выбирается расширение


Пример: в модуле типа im, который называется sample при просмотре расписания необходимо экспортировать все уроки за месяц. Для этого структура папок im должна выглядеть следующим образом:

Folders.jpg

Каждый синий квадрат обозначает папку, желтый — пояснение, серый — отдельный файл.

В каждой папке с типом экспорта может лежать файл init.php, который содержит класс, наследуемый от класса dof_modlib_templater и переопределяющий его метод format(). Именно он определяет, каким образом будет отформатирован окончательный файл. Для формата odt в папке с названием формата должна находится папка «content», содержащая следующие файлы:

  • content.xml - xml-документ с основным содержанием, размеченный тегами шаблонизатора PEAR::QuickForm
  • mimetype - mime-тип документа, который будет использоваться при передаче документа по http и на основании которого выбирается расширение

Эти файлы будут определять форматирование будущего документа. Их можно получить, распаковав обычный odt-файл (как zip-архив).

Структура классов

  • dof_modlib_templater - класс плагина DOF
  • dof_modlib_templater_package - класс шаблона документа
    • dof_типплагина_имяплагина_templater_кодшаблона - переопределенный класс шаблона данного документа
    • dof_im_genedu_templater_order - переопределенный класс шаблона документа order из плагина im/genedu
  • dof_modlib_templater_format - базовый (абстрактный) класс формата экспорта
    • dof_modlib_templater_format_формат - стандартный класс экспорта в заданный формат
      • dof_типплагина_имяплагина_templater_кодшаблона_формат - переопределенный класс экспорта заданного шаблона в заданный формат
    • dof_modlib_templater_format_odt - стандартный класс экспорта в формат odt
      • dof_im_genedu_templater_order_odf - переопределенный класс экспорта шаблона order из плагина im/genedu в формат odf

Список стандартных методов классов

Класс dof_modlib_templater:

  • template($plugintype, $pluginname, $templatename) — получить класс для экспорта в указанном плагине, с указанным названием. Возвращает объект класса dof_modlib_templater_packet или dof_типплагина_имяплагина_templater_кодшаблона
  • template_path($plugintype, $pluginname, $templatenam,$adds=null) - путь к шаблону (корню или внутренней папке)

$plugintype - тип плагина (im, storage, modlib и т. д.) $pluginname - имя плагина $templatenam - имя шаблона форматирования $adds - дополнительный путь после папки шаблона

Класс dof_modlib_templater_package:

  • __construct($dof, $plugintype, $pluginname, $templatename)
    • $dof - стандартный объект $DOF
    • $plugintype - тип плагина (im, storage, modlib и т. д.)
    • $pluginname - имя плагина
    • $templatename - имя шаблона форматирования, для которого вызывается обьект dof_modlib_templater_package:
  • set_data($obj) — загрузить необработанные данные в объект.
    • $obj - объект с необработанными данными
  • get_data() - внутренний метод. Получить необработанный объект с данными.
  • get_file($type, $options) - получить отформатированные данные, пригодные для обработки функцией file_put_contents().
    • $type — в какой формат экспортировать,
    • $options — дополнительные параметры.
  • send_file($type, $options) — инициализировать передачу файла клиенту через браузер.
    • $type — в какой формат экспортировать,
    • $options — дополнительные параметры.
  • get_formats() - список доступных форматов для этого документа
  • template_path($adds=null) - путь к шаблону  (работает через класс dof_modlib_templater)
    • $adds - дополнительный путь, присоединяемый к возвращаемому функцией template_path в классе dof_modlib_templater:

Стандартные методы класса dof_modlib_templater_format

  • __construct($dof,$package)
    • $dof
    • $package
  • get_file($options)
    • $options
  • set_data($data)
    • $data
  • get_filename($options)
    • $options
  • get_mimetype($options)
    • $options
  • template_path($adds=null) - путь к папке данного формата (работает через класс package)
    • $adds - дополнительный путь, присоединяемый к возвращаемому функцией template_path в классе dof_modlib_templater_package:

Стандарт именования классов:

Переопределенный класс парсера всего шаблона, который ищется при наличии init.php в корне шаблона: dof_типплагина_имяплагина_templater_кодшаблона

Переопределенный класс парсера шаблона для формата odf, который ищется при наличии файла init.php в шаблоне dof_типплагина_имяплагина_templater_кодшаблона_odf

Пример: Стандартный класс для парсера ODF dof_modlib_templater_format_odf


Реализация функционала классов

dof_modlib_templater


function template($plugintype, $pluginname, $templatename=null) — получить класс для экспорта в указанном плагине, с указанным названием. Возвращает объект класса dof_modlib_templater_package или dof_типплагина_имяплагина_templater_кодшаблона.

  • $templatename указано. Это значит, что шаблон переопределен во внешнем плагине. Проверяет наличие плагина ($plugintype,$pluginname).
    • Если его нет - возвращает false.
    • Если он есть, проверяет наличие файла templater\$templatename\init.php.
      • Файл есть - проверяем наличие класса с именем dof_типплагина_имяплагина_templater_кодшаблона.
        • Класс есть - возвращаем объект от него.
        • Класса нет - возвращаем false;
      • Файла нет - возвращаем объект от стандартного класса dof_modlib_templater_package.
  • $templatename не указано. Возвращаем базовый плагин dof_modlib_templater_package.


function template_path($plugintype, $pluginname, $templatename=null, $adds=null) - путь к шаблону (корню или внутренней папке)

  • Получаем путь к корню плагина.
  • $templatename=null. Не включаем имя папки шаблона в путь.
  • $templatename<>null. Обращаемся к внешнему плагину. Включаем имя папки шаблона в путь: /templater/$templatename.
  • $adds=null. Включаем в путь дополнительные фрагменты пути.
  • $adds<>null. Не включаем в путь дополнительные фрагменты пути.
  • Возвращаем получившийся путь.

Структура вызова классов

Calls.jpg


Структура наследования классов форматирования отдельных документов

Extending1.jpg

Структура наследования классов форматирования групп документов

Extending2.jpg