|   |   | 
| Строка 5: | Строка 5: | 
|  |  |  |  | 
|  | == Принцип работы == |  | == Принцип работы == | 
| − | === Общие сведения === | + | == Формат исходных данных == | 
| − | Модуль предназначен для организации  экспорта данных в документы различных форматов (odt,csv,версии для печати и т.д.). Принцип работы таков:
 | + | == Тип документа == | 
| − | * на основе требуемого документа создается файл шаблона документа;
 | + | == Форматы экспорта == | 
| − | * собираются данные для вставки в шаблон
 | + | == Использование готового документа == | 
| − | * формируется экспортируемый документ - производится вставка данных в шаблон;
 | + | == Создание типа документа == | 
| − | * сформированный документ посылается клиенту по  http-протоколу.
 | + | === Простое === | 
| − | Шаблон документа формируется из документа по специальным правилам, а затем размещается в оговоренном месте плагина, из которого производится экспорт. Затем по аналогичным правилам производится вставка данных. Сбор и подготовка данных для экспорта производятся тем же плагином. В настоящее время формирование шаблона производится в ручную.  Описываемый модуль получает путь к каталогу документа, данные для вставки и формат документа. На основе этих данных он формирует документ и посылает его клиенту.
 | + | === Возможности по настройке поведения === | 
| − |   | + | == Создание формата == | 
| − | Модуль реализуется как библиотека modlib, которая называется templater.
 | + | == API плагина == | 
| − |   | + | == Форматы экспорта == | 
| − | ==== Подготовка к экспорту ====
 | + | === ODF === | 
| − | Для начала надо убедиться, что на месте вспомогательные средства. Т.е. установлен описываемый плагин '''templater''', и плагин обеспечивающий превращения шаблона документав документ - '''pear'''. Поэтому убедитесь, что у вас
 |  | 
| − | * установлен плагин '''pear'''. Убедитесь, что на странице списка установленных плагинов, напротив модуля pear написано "Удалить, а не " "Установить".
 |  | 
| − | * в нем есть библиотека '''HTML_Template_Sigma'''. Проверьте наличие файла '''.../modlibs/pear/libs/HTML_Template_Sigma/Sigma.php'''.
 |  | 
| − | * установлен описываемый модуль - '''templater'''. Проверьте так же как и '''pear'''.
 |  | 
| − |   |  | 
| − | ===== Создаем файлы и папки =====
 |  | 
| − | Надо в корневом каталоге плагина, из которого производится экспорт, создать папку с именем '''templater'''. В ней, для каждого из документов, которые предполагается экспортировать, надо создать папку. Имя этих каталогов может быть любым. В них надо создать директории, с названиями форматов экспорта.
 |  | 
| − | Например, в плагине интерфейса exampleim планируется экспортировать документ с именем "sample" в форматы csv и odf. Тогда структура папок плагина болжна быть такой:
 |  | 
| − |     .../im/exampleim/templater/sample/csv/
 |  | 
| − |     .../im/exampleim/templater/sample/odf/
 |  | 
| − | В свою очередь, внутри папки csv должен лежать шаблон результирующего документа - файл sample.csv. Содержимое которого подготовлено по специальным правилам. С содержимым папки odf немного сложнее. Так как любой документ типа odf - это zip-архив стандартной структуры, то в папке odf, должна лежать папка с именем '''content''', в которой должны лежать каталоги и файлы распакованные из этого архива. Собственно текст документа sample.odt хранится в файле content.xml. Поэтому именно этот файл должен быть размечен как шаблон документа. Остальные файлы и папки можно оставить без изменния. В итоге мы должны увидеть что-то подобное:
 |  | 
| − |     .../im/exampleim/templater/sample/csv/sample.csv
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/Configurations2/
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/META-INF/
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/Thumbnails/
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/content.xml
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/meta.xml
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/mimetype
 |  | 
| − |     .../im/exampleim/templater/sample/odf/content/settings.xml
 |  | 
| − | Теперь надо разметить шаблоны и собрать данные для вставки. 
 |  | 
| − | ===== Подготовка шаблона и данных ===== |  | 
| − | Файл шаблона должен быть размечен тэгами шаблонизатора [http://pear.php.net/package/HTML_Template_Sigma  PEAR::HTMLTemlateSigma].
 |  | 
| − | В нем оформляются места для вставки данных - поля и блоки.
 |  | 
| − | *Отдельное поле помечается фигурными скобками '''{}'''. 
 |  | 
| − | *Внутри скобок указывается имя поля. Например, '''{lastname}''' - поле, вместо которого должна подставляться фамилия. 
 |  | 
| − | *Если есть блок полей, то начало блока помечается тегом '''‹!-- BEGIN block_name --›'''. 
 |  | 
| − | *Окончание блока помечается тэгом '''‹!-- END block_name --›'''. Здесь block_name - имя блока, все остальное - обязательная служебная конструкция. Между этими тегами нужно размещать поля блока и другие блоки.
 |  | 
| − | Например надо получить такой файл:
 |  | 
| − |   |  | 
| − | [[Изображение:sample1.jpg]]. 
 |  | 
| − |   |  | 
| − | Тогда поля и блоки надо вставлять в файл шаблона так:
 |  | 
| − |   |  | 
| − | [[Изображение:sample2.jpg]].
 |  | 
| − |   |  | 
| − | Файл формата csv представляет собой набор строк, в которых данные разделены запятыми. Поэтому для этого примера файл шаблона grades_table.csv будет выглядеть примерно так:
 |  | 
| − |     Отчет об индивидуальной успеваемости.
 |  | 
| − |     Ученик {name}.
 |  | 
| − |     Предмет, Оценка
 |  | 
| − |     ‹!-- BEGIN grades_table --›
 |  | 
| − |     {course}, {grade}
 |  | 
| − |     ‹!-- END grades_table --›
 |  | 
| − |                         {autor}.
 |  | 
| − | Файл '''content.xml''' имеет большое количество тегов разметки. поэтому увидеть его можно '''здесь'''.
 |  | 
| − | Данные для экспорта представляются в виде структурированного объекта (класс object()), в котором одиночные поля представляются скалярами, записи - объектами, а таблицы - массивами объектов. Структура данного объекта, по возможности, должна совпадать со структурой соответствующего объекта, используемого в storage.
 |  | 
| − |   |  | 
| − | Таким образом, объект данных для экспортаприведенной выше таблицы должен выглядеть так: 
 |  | 
| − |   |  | 
| − | [[Изображение:sample3.jpg]]
 |  | 
| − |   |  | 
| − | Теперь, когда у нас готов шаблон и готовы данные, мы можем посылать файл.
 |  | 
| − |   |  | 
| − | ===== Отправка файла =====
 |  | 
| − | В нужном файле вы создаете (например) кнопку "Экспорт в csv". А в ее обработчик вставляете такой код:
 |  | 
| − | * '''$tp =$DOF->modlib('templater')->template('im', 'exampleim', $obj, 'sample');'''. Здесь мы создаем объект экспорта, которому указываем 
 |  | 
| − | ** тип модуля, из которого надо произвести экспорт - '''im'''; 
 |  | 
| − | ** код модуля, из которого надо произвести экспорт - '''exampleim''';
 |  | 
| − | ** объект данных для экспорта - '''$obj''';
 |  | 
| − | ** директорию документа, который надо экспортировать - '''sample'''.
 |  | 
| − | * '''$tp->send_file('csv');'''. Здесь мы инициализируем отправку файла клиенту, указывая в каком формате надо отправить файл.
 |  | 
| − | Экспорт в формат odf производится аналогично.
 |  | 
| − |   |  | 
| − | ====Назначение классов ====
 |  | 
| − | * '''dof_modlib_templater''' - Самый верхний уровень экспорта. Проверяет наличие у внешнего плагина своего обработчика экспорта. Если он есть, возвращает его, если нет - возвращает стандартный обработчик.
 |  | 
| − | * '''dof_modlib_templater_package''' - Уровень ниже. Вызывается предыдущим классом (dof_modlib_templater). Представляет собой стандартный, общий для всех форматов, обработчик экспорта. Получает необработанные данные, обрабатывает их и посылает клиенту. Для получения готовогофайла нужно обращаться к API именно этого класса, предварительно получив его экземпляр из dof_modlib_templater. Список его методов - см. ниже.
 |  | 
| − | * '''dof_modlib_templater_format'''_''имяформата'' - Самый низкий уровень экспорта. Этот класс занимается преобразованием переданных данных в файл указанного формата. После преобразования должен вернуть файл как строку. Вся основная работа по преобразованию данных в готовый файл происходит здесь.
 |  | 
| − | * '''dof_modlib_templater_format''' - Абстрактный класс. Сам по себе не входит в иехархию экспорта, но является родительским, для всех классов, реализующих преобразование данных в файл конкретного типа. Определяет минимальный обязательный набор методов для дочерних классов (вида dof_modlib_templater_format_имяформата). Все классы, которые будут заниматься преобразованием данных в какой-либо формат должны быть наследованы от него.
 |  | 
| − |   |  | 
| − | ==== Структура вызова классов ==== |  | 
| − | В этой схеме описано, в каком порядке какие классы друг друга вызывают. Она отражает то, что написано в назаначении классов.
 |  | 
| − |   |  | 
| − | [[Изображение:calls3.jpg]]
 |  | 
| − |   |  | 
| − | ==== Пример работы экспорта для формата odf ==== |  | 
| − | *'''dof_modlib_templater''' вызывает стандартный обработчик экспорта dof_modlib_templater_package. В  будущем, планируется возможность переопределять обработчик во внешнем шаблоне, в классе '''dof'''_''типплагина_имяплагина''_'''templater'''_''имяшаблона''.
 |  | 
| − | * '''dof_modlib_templater_package''' вызывает стандартный преобразователь данных в файл нужного типа(например, odf) dof_modlib_templater_format_odf. В будущем планируется возможность переопределять преобразователь данных во внешнем плагине в классе с именем '''dof'''_''типплагина_имяплагина_имяшаблона''_'''odf''';
 |  | 
| − | * '''dof_modlib_templater_format_odf''' ищет шаблон оформления документав файле типплагина/имяплагина/templater/имяшаблона/odf/content/content.xml, читает его, и размещает переданные данные как указано в этом файле.
 |  | 
| − | * Получившийся поток данных возвращается в '''dof_modlib_templater_package''', который посылает его клиенту.
 |  | 
| − |   |  | 
| − | ===== Назначение content.xml =====
 |  | 
| − | Напомним, что файл должен быть размечен тегами шаблонизатора [http://pear.php.net/package/HTML_Template_Sigma  PEAR::HTMLTemlateSigma]. В content.xml содержится все основное содержание файла для экспорта.
 |  | 
| − |   |  | 
| − | === Структура плагина templater === |  | 
| − | *templater - папка плагина;
 |  | 
| − | **init.php - обязательный файл плагина, содержит класс dof_modlib_templater, который вызывает собственный или внешний обработчик форматирования и экспорта
 |  | 
| − | **format.php - файл, содержащий класс dof_modlib_templater_format - содержит базовый класс для остальных классов форматирования.
 |  | 
| − | **package.php - файл, содержащий класс dof_modlib_templater_package, который вызывает собственный обработчик форматирования и экспорта
 |  | 
| − | **lib.php - файл, который содержит класс placeholder. Этот класс используется для замены в шаблоне полей вставки данных самими данными. 
 |  | 
| − | **formats - папка, в которой лежат файлы, преобразующие данные в файл определенного типа.
 |  | 
| − | ***odf - папка, содержащая все файлы, которые понадобятся для преобразования данных в один из форматов odt, ods и т.д.
 |  | 
| − | ****init.php - файл, содержащий класс dof_modlib_templater_format_'''odf''' для преобразования в конкретный формат
 |  | 
| − | ***csv - папка, содержащая все файлы, которые понадобятся для преобразования данных в формат csv.
 |  | 
| − | ****init.php - файл, содержащий класс dof_modlib_templater_format_'''csv''' для преобразования в конкретный формат
 |  | 
| − |   |  | 
| − | === Структура папок внешнего плагина ===
 |  | 
| − | В плагине 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-документ с основным контентом, размеченный тегами шаблонизатора [http://pear.php.net/package/HTML_Template_Sigma  PEAR::HTMLTemlateSigma] 
 |  | 
| − | ****** mimetype - mime-тип документа, который будет использоваться при передаче документа по http и на основании которого выбирается расширение
 |  | 
| − |   |  | 
| − |   |  | 
| − | Пример: в модуле типа '''im''', который называется '''sample''' при просмотре расписания необходимо экспортировать все уроки за месяц. Для этого структура папок im должна выглядеть следующим образом:
 |  | 
| − |   |  | 
| − | [[Изображение:folders.jpg]]
 |  | 
| − |   |  | 
| − | Каждый синий квадрат обозначает папку, желтый — пояснение, серый — отдельный файл.
 |  | 
| − |   |  | 
| − | В каждой папке с типом экспорта может лежать файл init.php, который содержит класс, наследуемый от класса '''dof_modlib_templater''' и переопределяющий его метод '''format()'''. Именно он определяет, каким образом будет отформатирован окончательный файл. Для формата odt в папке с названием формата должна находится папка «content», содержащая следующие файлы:
 |  | 
| − | * '''content.xml''' - xml-документ с основным содержанием, размеченный тегами шаблонизатора [http://pear.php.net/package/HTML_Template_Sigma  PEAR::HTMLTemlateSigma] 
 |  | 
| − | * '''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_package ====
 |  | 
| − | Эта схема показывает, каким образом нужно создавать классы для форматирования групп документов. Это может быть полезно, если вам не хватает функционала класса dof_modlib_templater_package. В остальных случаях создавать собственные классы не потребуется.
 |  | 
| − |   |  | 
| − | [[Изображение:extending2.jpg]]
 |  | 
| − |   |  | 
| − | ==== Наследование от dof_modlib_templater_format ====
 |  | 
| − | Наследование от этого класса нужно производить, если вам понадобится написать экспорт в новый, еще не реализованный формат.
 |  | 
| − |   |  | 
| − | [[Изображение:extending1.jpg]]
 |  | 
| − |   |  | 
| − | === Реализация функционала классов === |  | 
| − | В этом разделе описана работа всех классов, занимающихся экспортом. Если вам нужно подробно знать, как работает тот или иной класс, то это эти пояснения помогут вам разобраться.
 |  | 
| − | ====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, $fromplugin=null) - путь к шаблону (корню или внутренней папке)
 |  | 
| − | *Вычисляем как строку путь ко внешнему плагину и путь внутри template/path
 |  | 
| − | *Запоминаем обе строки
 |  | 
| − | *В зависимости от переданных параметров возвращаем внешний или внутренний путь.
 |  | 
| − | **$templatename==null
 |  | 
| − | ***$fromplugin - null или false - возвращаем путь внутри modlib/templater
 |  | 
| − | ***$fromplugin - true - ошибка
 |  | 
| − | **$templatename<>null
 |  | 
| − | ***$fromplugin - null - ищем сначала во внешнем плагине, затем в modlib/templater, если нигде не нашлось - возвращаем false
 |  | 
| − | ***$fromplugin - true - ищем только во внешнем плагине. Возвращаем внешний путь или false в случае ошибки.
 |  | 
| − | ***$fromplugin - false - ищем только во внутри modlib/templater. Возвращаем внутренний путь или false в случае ошибки.
 |  | 
| − | *Возвращенная строка гарантированно является строкой директорией, файлом, или символической ссылкой
 |  | 
| − |   |  | 
| − | Таблица, иллюстрирующая работу этой функции:
 |  | 
| − |   |  | 
| − | {| border=1
 |  | 
| − |  |'''№'''
 |  | 
| − |  |'''$templatename'''
 |  | 
| − |  |'''$fromplugin'''
 |  | 
| − |  |'''Результат'''
 |  | 
| − |  |-
 |  | 
| − |  |1
 |  | 
| − |  |null
 |  | 
| − |  |null
 |  | 
| − |  |Путь внутри modlib/templater
 |  | 
| − |  |-
 |  | 
| − |  |2
 |  | 
| − |  |null
 |  | 
| − |  |true
 |  | 
| − |  |false
 |  | 
| − |  |-
 |  | 
| − |  |3
 |  | 
| − |  |null
 |  | 
| − |  |fasle
 |  | 
| − |  |Путь внутри modlib/templater
 |  | 
| − |  |-
 |  | 
| − |  |4
 |  | 
| − |  |Существующее
 |  | 
| − |  |null
 |  | 
| − |  |Путь из внешнего плагина
 |  | 
| − |  |-
 |  | 
| − |  |5
 |  | 
| − |  |Существующее
 |  | 
| − |  |true
 |  | 
| − |  |Путь из внешнего плагина
 |  | 
| − |  |-
 |  | 
| − |  |6
 |  | 
| − |  |Существующее
 |  | 
| − |  |false
 |  | 
| − |  |Путь внутри modlib/templater
 |  | 
| − |  |-
 |  | 
| − |  |7
 |  | 
| − |  |Ошибочное
 |  | 
| − |  |null
 |  | 
| − |  |false
 |  | 
| − |  |-
 |  | 
| − |  |8
 |  | 
| − |  |Ошибочное
 |  | 
| − |  |true
 |  | 
| − |  |false
 |  | 
| − |  |-
 |  | 
| − |  |9
 |  | 
| − |  |Ошибочное
 |  | 
| − |  |false
 |  | 
| − |  |false
 |  | 
| − |  |-
 |  | 
| − |  |}
 |  | 
| − |   |  | 
| − | ====dof_modlib_templater_package====
 |  | 
| − |   |  | 
| − | Класс шаблона документа
 |  | 
| − |   |  | 
| − | '''function __construct'''($dof,$plugintype, $pluginname, $templatename=null)
 |  | 
| − | *Делает переданные переменные свойствами класса.
 |  | 
| − | *Загружает файл format.php, с обстрактным классом.
 |  | 
| − |   |  | 
| − |   |  | 
| − | '''function set_data'''($obj) - загрузить необработанные данные в объект.
 |  | 
| − | *Помещает $obj в свойство класса $data;
 |  | 
| − |   |  | 
| − |   |  | 
| − | '''private function get_data'''() - Получить необработанный объект с данными.
 |  | 
| − | *Возвращает свойство класса $data;
 |  | 
| − |   |  | 
| − |   |  | 
| − | '''function get_file'''($type, $options=null) - получить отформатированные данные, пригодные для обработки функцией file_put_contents().
 |  | 
| − |   |  | 
| − | *Ищем файл $type.php в папке modlib/templater/formats/.
 |  | 
| − | **Файл есть. Проверяем наличие в нем класса dof_modlib_templater_format_$type.
 |  | 
| − | ***Класс есть. Создаем объект от него.
 |  | 
| − | ***Класса нет - возвращаем false;
 |  | 
| − | ** Файла нет. Возвращаем false.
 |  | 
| − | *$data = $this->get_data();//получаем данные для форматирования.
 |  | 
| − | *Превращаем данные в файл методами из dof_modlib_templater_format_$type.
 |  | 
| − | *Возвращаем файл в виде строки.
 |  | 
| − |   |  | 
| − |   |  | 
| − | '''function send_file'''($type, $options) инициализировать передачу файла клиенту через браузер
 |  | 
| − |   |  | 
| − | *Получаем файл в виде строки и отправляем его пользователю.
 |  | 
| − |   |  | 
| − | '''function get_formats'''()
 |  | 
| − | *сканируем папку modlibs/templater/formats и получаем список форматов, в которые мы можем экспортировать.
 |  | 
| − | *Если указан шаблон внешнего плагина, то сканируем папку $plugintype/$pluginname/$templatename/.Получаем список форматов.
 |  | 
| − | *Объединяем оба списка.
 |  | 
| − | *Для каждого типа файла проверяем наличие шаблонов для экспорта. Если шаблона нет - исключаем тип из списка форматов.
 |  | 
| − | *Возвращаем массив с перечнем типов файлов, в которые возможен экспорт. Или пустой массив.
 |  | 
| − |   |  | 
| − | '''function template_path'''($adds=null) - путь к шаблону  (работает через класс dof_modlib_templater).
 |  | 
| − |   |  | 
| − | ==== dof_modlib_templater_format ====
 |  | 
| − | Сам класс dof_modlib_templater_format является абстрактным для всех форматов, поэтому процесс работы методов будет описываться для его наследников (dof_modlib_templater_format_odf, dof_modlib_templater_format_xls и т. д.)
 |  | 
| − |   |  | 
| − | '''__construct'''($dof, $plugintype, $pluginname, $templatename=null)
 |  | 
| − | *Создает объект для указанного плагина, указанного формата.
 |  | 
| − | '''get_file'''($options=null)
 |  | 
| − | *Выдает строку отфарматированных данных, пригодных для обработки функцией file_put_contents(). Весь процесс обработки текста происходит именно в этой функции
 |  | 
| − | '''set_data'''($data)
 |  | 
| − | *Получает необработанные данные в объекте $data и помещает их в поле $this->data для последующий обработки. При необходимости в эту функцию могут быть добавлены какие-либо проверки.
 |  | 
| − | '''get_filename'''($options=null)
 |  | 
| − | *Получить имя файла. Эта функция Просто возвращает имя файла вместе с расширением.
 |  | 
| − | '''get_mimetype'''($options=null)
 |  | 
| − | *Получить строку MIMETYPE для указанного файла, которую можно будет послать как HTTP-заголовок. Пример: 
 |  | 
| − |     header('Content-Type: '.'''$format->get_mimetype()'''.'charset=utf8');
 |  | 
| − | '''template_path'''($adds=null)
 |  | 
| − | *возвращает строку и путь к шаблону, который в текущий момент.
 |  | 
| − |   |  | 
| − | ==== dof_templater_format_odf ====
 |  | 
| − | Вставка данных из объекта в файл
 |  | 
| − | * Подключаем сигму. require_once 'HTML/Template/Sigma.php';
 |  | 
| − | * Создаем объект от нее. $tpl =& new HTML_Template_Sigma('.');
 |  | 
| − | * Загружаем файл шаблона.
 |  | 
| − | ** Файл есть: $tpl->loadTemplateFile('table.html');
 |  | 
| − | ** Файла нет: возвращаем пустой файл. Он должен лежать у нас.
 |  | 
| − | * Получаем объект с данными. К этому моменту данные точно есть.
 |  | 
| − | ** Вставляем их в шаблон insert_data. 
 |  | 
| − | *** Вставить поле set_field: $tpl->setVariable(fieldname, value);
 |  | 
| − | *** Вставить блок set_block:
 |  | 
| − | **** блока нет: переходим к следующему элементу вставки
 |  | 
| − | **** блок есть:
 |  | 
| − | ***** Перебираем в цикле переменные блока и вызываем set_field;
 |  | 
| − | ***** Применить вставку блока $tpl->parse('имяблока');
 |  | 
| − | * Возвращаем файл с данными. $tpl->get();
 |  | 
| − |   |  | 
| − | ===== Список дополнительных функций =====
 |  | 
| − | * $tpl. Глобальная переменная - экземпляр от HTML_Template_Sigma.
 |  | 
| − | * insert_content(). Эта функция вставляет переданные данные в файл и возвращает его как строку.
 |  | 
| − | * insert_data($data). Эта функция вставляет поля и блоки из объекта данных в файл.
 |  | 
| − | * set_block($blockname). Вставляет блок данных.
 |  | 
| − | * set_field($name, $value). Вставляет поле.
 |  | 
| − |   |  | 
| − | == API ==
 |  | 
| − |   |  | 
| − | === APIдля использования плагинаtemplater ===
 |  | 
| − | Здесь описаны классы и их методы, которые необходимо использовать для того, чтобы осуществлять экспорт документов. Их достаточно для большинства задач.
 |  | 
| − | ==== Этап 1. Подготовка шаблона документа ====
 |  | 
| − | ==== Этап 2. Подготовка данных ====
 |  | 
| − | ==== Этап 3. Работа с объектом для экспорта. ==== |  | 
| − | ==== Этап 4. Экспорт данных ====
 |  | 
| − |   |  | 
| − | ==== Пример кода ==== |  | 
| − | <code php>
 |  | 
| − |     
 |  | 
| − | </code php>
 |  | 
| − |   |  | 
| − | === API для разработки собственных модулей к плагину templater ===
 |  | 
| − | Здесь описана структура всех классов, задействованных в подготовки документа для экспорта. Если вы хотите расширить возможности плагина templater, или вам не достаточно его базового функционала, вы можете переопределить некоторые стандартные классы.
 |  | 
| − |   |  | 
| − | ==== Стандарт именования классов: ====
 |  | 
| − |   |  | 
| − | Переопределенный класс парсера всего шаблона, который ищется при наличии init.php в корне шаблона:
 |  | 
| − | '''dof'''_''типплагина_имяплагина''_'''templater'''_''кодшаблона''
 |  | 
| − |   |  | 
| − | Переопределенный класс парсера шаблона для указанного формата, который ищется при наличии файла init.php в шаблоне
 |  | 
| − | '''dof'''_''типплагина_имяплагина''_'''templater'''_''кодшаблона''_''имяформата''
 |  | 
| − |   |  | 
| − | ''Пример:''
 |  | 
| − |   |  | 
| − | Стандартный класс для парсера документов в формате ODF
 |  | 
| − | '''dof_modlib_templater_format_odf'''
 |  | 
| − |   |  | 
| − | ====dof_modlib_templater:==== |  | 
| − | *'''template'''($plugintype, $pluginname, $templatename) — получить класс для экспорта в указанном плагине, с указанным названием. Возвращает объект класса dof_modlib_templater_packet или dof_типплагина_имяплагина_templater_кодшаблона. В дальнейшем, полученный оюъект будет производить все действия, необходимые для экспорта документов. 
 |  | 
| − | ** $plugintype - тип плагина (im, storage, modlib и т. д.)
 |  | 
| − | ** $pluginname - имя плагина 
 |  | 
| − | ** $templatename - имя шаблона форматирования
 |  | 
| − | *'''template_path'''($plugintype, $pluginname, $templatename,$adds=null, $fromplugin) - путь к шаблону (корню или внутренней папке). используется только для получения пути. Если запрошенный путь не существует - вернет false.
 |  | 
| − | **$plugintype - тип плагина (im, storage, modlib и т. д.)
 |  | 
| − | **$pluginname - имя плагина 
 |  | 
| − | **$templatename - имя шаблона форматирования
 |  | 
| − | **$adds - дополнительный путь после папки шаблона
 |  | 
| − | **$fromplugin - какой путь нужно вернуть: из внешнего плагина или из modlib/templater. Ее возможные значения:
 |  | 
| − | *** null (по умолчанию) - искать путь сначала во внешнем плагине, а затем в modlib/templater
 |  | 
| − | *** true  - искать только во внешнем планине
 |  | 
| − | *** false - искать только в modlib/templater
 |  | 
| − |   |  | 
| − | ====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, $fromplugin) - путь к шаблону  (работает через класс dof_modlib_templater)
 |  | 
| − | **$adds - дополнительный путь, присоединяемый к возвращаемому функцией template_path в классе '''dof_modlib_templater''':
 |  | 
| − | **$fromplugin - какой путь нужно вернуть: из внешнего плагина или из modlib/templater. Возможные значения:
 |  | 
| − | *** null (по умолчанию) - искать путь сначала во внешнем плагине, а затем в 
 |  | 
| − | *** true  - искать только во внешнем планине
 |  | 
| − | *** false - искать только в 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, $fromplugin) - путь к папке данного формата (работает через класс package)
 |  | 
| − | **$adds - дополнительный путь, присоединяемый к возвращаемому функцией template_path в классе '''dof_modlib_templater_package''':
 |  | 
| − | **$fromplugin - какой путь нужно вернуть: из внутреннего плагина или из modlib/templater. Возможные значения:
 |  | 
| − | *** null (по умолчанию) - искать путь сначала во внешнем плагине, а затем в 
 |  | 
| − | *** true  - искать только во внешнем планине
 |  | 
| − | *** false - искать только в modlib/templater
 |  | 
| − |   |  | 
|  | == Ссылки == |  | == Ссылки == | 
|  | *[http://pear.php.net/package/HTML_Template_Sigma Шаблонизатор HTMLTemplateSigma] |  | *[http://pear.php.net/package/HTML_Template_Sigma Шаблонизатор HTMLTemplateSigma] | 
|  | *[http://pear.php.net/manual/en/package.html.html-template-sigma.intro-syntax.php Справка по синтаксису шаблонизатора Sigma] |  | *[http://pear.php.net/manual/en/package.html.html-template-sigma.intro-syntax.php Справка по синтаксису шаблонизатора Sigma] |