<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://docs.deansoffice.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K-krsnv</id>
		<title>DOF - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://docs.deansoffice.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K-krsnv"/>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/K-krsnv"/>
		<updated>2026-04-06T08:37:58Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.2</generator>

	<entry>
		<id>http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:modlibs/templater&amp;diff=2639</id>
		<title>Разработка:modlibs/templater</title>
		<link rel="alternate" type="text/html" href="http://docs.deansoffice.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:modlibs/templater&amp;diff=2639"/>
				<updated>2013-04-05T13:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;K-krsnv: /* Дополнительные методы Sigma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Plugin&lt;br /&gt;
| name = templater&lt;br /&gt;
| type = modlibs&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Принципы работы ==&lt;br /&gt;
Плагин templater обеспечивает все действия по экспорту данных и создание любых электронных документов (отчетов, приказов, графиков и т. п.) &lt;br /&gt;
=== Общие сведения ===&lt;br /&gt;
Все документы формируются следующим образом:&lt;br /&gt;
* на основе требуемого документа создается файл шаблона документа;&lt;br /&gt;
* собираются данные для вставки в шаблон&lt;br /&gt;
* формируется экспортируемый документ - производится вставка данных в шаблон;&lt;br /&gt;
* сформированный документ посылается клиенту по  http-протоколу.&lt;br /&gt;
Шаблон документа формируется из документа по специальным правилам, а затем размещается в оговоренном месте плагина, из которого производится экспорт. Затем по аналогичным правилам производится вставка данных. Сбор и подготовка данных для экспорта производятся тем же плагином. В настоящее время формирование шаблона производится вручную.  Описываемый модуль получает путь к каталогу документа, данные для вставки и формат документа. На основе этих данных он формирует документ и посылает его клиенту.&lt;br /&gt;
&lt;br /&gt;
=== Формат исходных данных ===&lt;br /&gt;
Данные, предназначенные для экспорта должны соответствовать следующим стандартам:&lt;br /&gt;
* Исходные данные всегда представлены в виде объекта класса stdClass (стандартный объект PHP).&lt;br /&gt;
* Поля объекта могут содержать строки, числа и массивы объектов (массивы строк или чисел не допускаются). Данные других типов не обрабатываются.&lt;br /&gt;
* Строки и числа подставляются в шаблон документа &amp;quot;как есть&amp;quot;. &lt;br /&gt;
* Данные для экспорта представляются в виде структурированного объекта (класс object()), в котором одиночные поля представляются скалярами, записи - объектами, а таблицы - массивами объектов. &lt;br /&gt;
Желательно для создания объекта данных для экспорта создавать отдельный класс, который решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
=== Пример исходных данных ===&lt;br /&gt;
В этом примере мы построим объект для экспорта оценок учеников двух классов. У каждого класса есть название, предмет, и дата, за которую выставлялись оценки. В каждом классе есть несколько учеников, которые эти оценки получили. Таким образом, если мы хотим получить такую таблицу:&lt;br /&gt;
     {|border=&amp;quot;1&amp;quot;&lt;br /&gt;
      |№&lt;br /&gt;
      |ФИО ученика&lt;br /&gt;
      |оценка&lt;br /&gt;
      |-&lt;br /&gt;
      |colspan=&amp;quot;3&amp;quot; |З&amp;lt;sup&amp;gt;б&amp;lt;/sup&amp;gt; класс, Математика, 21.01.09&lt;br /&gt;
      |-&lt;br /&gt;
      |1&lt;br /&gt;
      |Замеладский Алексей&lt;br /&gt;
      |5&lt;br /&gt;
      |-&lt;br /&gt;
      |2&lt;br /&gt;
      |Гусева Татьяна&lt;br /&gt;
      |4&lt;br /&gt;
      |-&lt;br /&gt;
      |colspan=&amp;quot;3&amp;quot; |5&amp;lt;sup&amp;gt;б&amp;lt;/sup&amp;gt; класс, Русский язык, 27.01.09&lt;br /&gt;
      |-&lt;br /&gt;
      |1&lt;br /&gt;
      |Коньков Сергей&lt;br /&gt;
      |5&lt;br /&gt;
      |-&lt;br /&gt;
      |2&lt;br /&gt;
      |Захаров Александр&lt;br /&gt;
      |3&lt;br /&gt;
      |}&lt;br /&gt;
&lt;br /&gt;
Данные для экспорта будут выглядеть следующим образом:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    stdClass Object&lt;br /&gt;
    (&lt;br /&gt;
    [classes] =&amp;gt; Array &lt;br /&gt;
    &lt;br /&gt;
        [0] =&amp;gt; stdClass Object                                           // данные о первом классе&lt;br /&gt;
            [name]       =&amp;gt; 3 &amp;quot;б&amp;quot;&lt;br /&gt;
            [date]       =&amp;gt; 21.01.09&lt;br /&gt;
            [subject]    =&amp;gt; Математика&lt;br /&gt;
            [students]   =&amp;gt; Array&lt;br /&gt;
    &lt;br /&gt;
                [0] =&amp;gt; stdClass Object                                   // здесь хранятся данные первого ученика из 3-го &amp;quot;Б&amp;quot;&lt;br /&gt;
                        [number] =&amp;gt; 1&lt;br /&gt;
                        [fio]    =&amp;gt; Замеладский Алексей&lt;br /&gt;
                        [grade]  =&amp;gt; 5&lt;br /&gt;
                [1] =&amp;gt; stdClass Object&lt;br /&gt;
                        [number] =&amp;gt; 2&lt;br /&gt;
                        [fio]    =&amp;gt; Гусева Татьяна&lt;br /&gt;
                        [grade]  =&amp;gt; 4&lt;br /&gt;
    &lt;br /&gt;
        [1] =&amp;gt; stdClass Object                                           // данные о втором классе&lt;br /&gt;
            [name]       =&amp;gt; 5 &amp;quot;б&amp;quot;&lt;br /&gt;
            [date]       =&amp;gt; 21.01.09&lt;br /&gt;
            [subject]    =&amp;gt; Русский язык&lt;br /&gt;
            [students]   =&amp;gt; Array&lt;br /&gt;
    &lt;br /&gt;
                [0] =&amp;gt; stdClass Object                                   // здесь хранятся данные первого ученика из 5-го &amp;quot;Б&amp;quot;&lt;br /&gt;
                        [number] =&amp;gt; 1&lt;br /&gt;
                        [fio]    =&amp;gt; Коньков Сергей&lt;br /&gt;
                        [grade]  =&amp;gt; 5&lt;br /&gt;
                [1] =&amp;gt; stdClass Object&lt;br /&gt;
                        [number] =&amp;gt; 2&lt;br /&gt;
                        [fio]    =&amp;gt; Захаров Александр&lt;br /&gt;
                        [grade]  =&amp;gt; 3&lt;br /&gt;
    )&lt;br /&gt;
&amp;lt;/code php&amp;gt;&lt;br /&gt;
=== Реализация экспорта ===&lt;br /&gt;
==== Подготовка к экспорту ====&lt;br /&gt;
Для начала надо убедиться, что на месте вспомогательные средства. Т.е. установлен описываемый плагин '''templater''', и плагин обеспечивающий превращения шаблона документа в документ - '''pear'''. Поэтому убедитесь, что у вас&lt;br /&gt;
* установлен плагин '''pear'''. Удостоверьтесь, что на странице списка установленных плагинов, напротив модуля pear написано &amp;quot;Удалить, а не &amp;quot; &amp;quot;Установить&amp;quot;.&lt;br /&gt;
* в нем есть библиотека '''HTML_Template_Sigma'''. Проверьте наличие файла '''.../modlibs/pear/libs/HTML_Template_Sigma/Sigma.php'''.&lt;br /&gt;
* установлен описываемый модуль - '''templater'''. Проверьте так же как и '''pear'''.&lt;br /&gt;
Теперь надо подготовить плагин. В нем надо создать структуру папок. Для реализации экспорта надо создать в корневой папке плагина директорию '''templater'''. В ней нужно создать каталоги для каждого документа, который вы собираетесь экспортировать. В каждой из них нужно создать папки, названия которых - это типы файлов, в которые вы собираетесь экспортировать каждый документ. Внутри этих папок должны лежать файлы шаблонов для экспорта.&lt;br /&gt;
Например, у нас есть плагин '''reports''', типа '''im'''. Из него планируется экспортировать отчеты: список оценок - '''grades_list''', список учеников - '''students_list''', список учителей - '''teachers_list'''. Список оценок будет экспортироваться в форматы odf, csv, html. Список учителей в форматы odf и html. Список студентов в csv и html. Тогда надо создать такую структуру папок:&lt;br /&gt;
    .../im/reports/templater/grades_list/odf&lt;br /&gt;
    .../im/reports/templater/grades_list/csv&lt;br /&gt;
    .../im/reports/templater/grades_list/html&lt;br /&gt;
    .../im/reports/templater/students_list/csv&lt;br /&gt;
    .../im/reports/templater/students_list/html&lt;br /&gt;
    .../im/reports/templater/teachers_list/odf&lt;br /&gt;
    .../im/reports/templater/teachers_list/html&lt;br /&gt;
&lt;br /&gt;
Внутри этих папок следует разместить шаблоны документов для экспорта.&lt;br /&gt;
&lt;br /&gt;
Правила подготовки шаблона описаны в разделе [[Разработка:modlibs/templater#Подготовка шаблона документа|Подготовка шаблона документа]]. &lt;br /&gt;
&lt;br /&gt;
Теперь, когда шаблон есть, можно переходить к следующему этапу - сбору данных для экспорта. Объект экспорта должен соответствовать структуре объекта, описанной в разделах [[Разработка:modlibs/templater#Формат исходных данных|Формат исходных данных]] и [[Разработка:modlibs/templater#Пример исходных данных|Пример исходных данных]].&lt;br /&gt;
&lt;br /&gt;
Теперь все необходимые приготовления выполнены и можно переходить непосредственно к экспорту.&lt;br /&gt;
&lt;br /&gt;
==== Экспорт документа ====&lt;br /&gt;
Собственно экспорт осуществляется в два этапа. Создание объекта экспорта и инициализация экспорта. Поясним оба этапа на примере. Предположим, мы хотим экспортировать ведомость оценок '''grades_list''' из плагина '''reports''' в формат '''odf'''. Тогда&lt;br /&gt;
&lt;br /&gt;
* Получаем нужный объект:&lt;br /&gt;
    $exporter = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $dataforexport, 'grades_list');&lt;br /&gt;
Здесь:&lt;br /&gt;
&lt;br /&gt;
''im'' - тип плагина, &lt;br /&gt;
&lt;br /&gt;
''reports'' - имя плагина, &lt;br /&gt;
&lt;br /&gt;
''grades_list'' - директория, в которой лежит шаблон документа, который будет экспортирован.&lt;br /&gt;
&lt;br /&gt;
''$exporter'' - объект, который будет производить все необходимые операции.&lt;br /&gt;
&lt;br /&gt;
''$dataforexport'' - собранные на предыдущем этапе данные.&lt;br /&gt;
&lt;br /&gt;
* Получив объект, инициализируем отправку файла:&lt;br /&gt;
    $exporter-&amp;gt;send_file('odf');&lt;br /&gt;
    die;&lt;br /&gt;
Функция die здесь использована для того, чтобы больше ничего в файл экспорта не попало. &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что объект $exporter уже хранит в себе все необходимые данные. Если вы хотите еще раз экспортировать данные, но уже в другой формат - не нужно заново создавать объект, достаточно обратиться к нему еще раз, например:&lt;br /&gt;
    $exporter = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $dataforexport, 'grades_list');    &lt;br /&gt;
    switch ($type)&lt;br /&gt;
    {&lt;br /&gt;
        case 'odf': $exporter-&amp;gt;send_file('odf');break;&lt;br /&gt;
        case 'csv': $exporter-&amp;gt;send_file('csv');break;&lt;br /&gt;
    }&lt;br /&gt;
    die;&lt;br /&gt;
По умолчанию имя посылаемого файла формируется из собственно имени файла (которое по умолчанию равно '''export'''), и расширения, в качестве которого используется тип файла, указанный при инициализации экспорта. Но можно задать и другое имя. Для этого надо использовать второй необязательный параметр функции '''send_file''':&lt;br /&gt;
    $options = new object;&lt;br /&gt;
    $options-&amp;gt;filename = 'new_export_file_name';&lt;br /&gt;
    $exporter-&amp;gt;send_file('odf', $options);&lt;br /&gt;
Имя файла надо указывать без расширения.&lt;br /&gt;
&lt;br /&gt;
=== Подготовка шаблона документа ===&lt;br /&gt;
Если вам нужно создать новый документ, то нужно создать и новый шаблон документа. &lt;br /&gt;
Файл шаблона должен быть размечен тегами шаблонизатора [http://pear.php.net/package/HTML_Template_Sigma  PEAR::HTMLTemlateSigma].&lt;br /&gt;
В нем оформляются места для вставки данных - поля и блоки.&lt;br /&gt;
*Отдельное поле помечается фигурными скобками '''{}'''. &lt;br /&gt;
*Внутри скобок указывается имя поля. Например, '''{lastname}''' - поле, вместо которого должна подставляться фамилия. &lt;br /&gt;
*Если есть блок полей, то начало блока помечается тегом '''&amp;amp;lsaquo;!-- BEGIN block_name --&amp;amp;rsaquo;'''. &lt;br /&gt;
*Окончание блока помечается тегом '''&amp;amp;lsaquo;!-- END block_name --&amp;amp;rsaquo;'''. Здесь block_name - имя блока, все остальное - обязательная служебная конструкция. Между этими тегами нужно размещать поля блока и другие блоки.&lt;br /&gt;
Например надо таблицу ведомости оценок (см. [[Разработка:modlibs/templater#Пример исходных данных|Пример исходных данных]])&lt;br /&gt;
&lt;br /&gt;
     {|border=&amp;quot;1&amp;quot;&lt;br /&gt;
      |№&lt;br /&gt;
      |ФИО ученика&lt;br /&gt;
      |оценка&lt;br /&gt;
      |-&lt;br /&gt;
      |colspan=&amp;quot;3&amp;quot; |З&amp;lt;sup&amp;gt;б&amp;lt;/sup&amp;gt; класс, Математика, 21.01.09&lt;br /&gt;
      |-&lt;br /&gt;
      |1&lt;br /&gt;
      |Замеладский Алексей&lt;br /&gt;
      |5&lt;br /&gt;
      |-&lt;br /&gt;
      |2&lt;br /&gt;
      |Гусева Татьяна&lt;br /&gt;
      |4&lt;br /&gt;
      |-&lt;br /&gt;
      |colspan=&amp;quot;3&amp;quot; |5&amp;lt;sup&amp;gt;б&amp;lt;/sup&amp;gt; класс, Русский язык, 27.01.09&lt;br /&gt;
      |-&lt;br /&gt;
      |1&lt;br /&gt;
      |Коньков Сергей&lt;br /&gt;
      |5&lt;br /&gt;
      |-&lt;br /&gt;
      |2&lt;br /&gt;
      |Захаров Александр&lt;br /&gt;
      |3&lt;br /&gt;
      |}&lt;br /&gt;
&lt;br /&gt;
получить в виде html-файла. Тогда в шаблоне документа надо вставить поля и блоки примерно так:&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;amp;lsaquo;table&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;tr&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;№&amp;amp;lsaquo;/td&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;ФИО ученика&amp;amp;lsaquo;/td&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;Оценка&amp;amp;lsaquo;/td&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;/tr&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;!-- BEGIN classes --&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;tr&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;{name} класс, {subject}, {date}&amp;amp;lsaquo;/td&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;/tr&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;!-- BEGIN students --&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;tr&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;{number}&amp;amp;lsaquo;/td&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;{fio}&amp;amp;lsaquo;/td&amp;amp;rsaquo;&lt;br /&gt;
          &amp;amp;lsaquo;td&amp;amp;rsaquo;&amp;amp;lsaquo;grade&amp;gt;&amp;amp;lsaquo;/td&amp;gt;&lt;br /&gt;
       &amp;amp;lsaquo;/tr&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;!-- END students --&amp;amp;rsaquo;&lt;br /&gt;
       &amp;amp;lsaquo;!-- END classes --&amp;amp;rsaquo;&lt;br /&gt;
    &amp;amp;lsaquo;/table&amp;amp;rsaquo;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;amp;lsaquo;/html&amp;amp;rsaquo;&lt;br /&gt;
&lt;br /&gt;
Каждый файл шаблона должен иметь имя template.тип_файла экспорта. К примеру '''template.html'''. Из этого правила есть несколько исключений. В частности, odf-формат имеет сложную структуру, поэтому и его шаблон должен быть устроен соответственно. Структура папок шаблона odf-документа описана [[Разработка:modlibs/templater#ODF|тут]]. В ряде случаев шаблон документа вообще не нужен. Так например, формат dbg - это тестовый вариант вывода данных. В этом случае неформатированные данные экспорта выводятся на экран. Другой случай - экспорт в формат '''csv'''. Файл в этом формате представляет собой набор строк, в которых данные разделены запятыми. Для него шаблон также не нужен.&lt;br /&gt;
&lt;br /&gt;
=== Альтернативный способ формирования документа ===&lt;br /&gt;
Можно изменить способ формирования документа в существующий формат. Для этого надо, в своем плагине, в папке с названием типа файла экспорта создать файл '''init.php'''. Т.е. если мы хотим изменить формирование списка оценок в файл '''html''', то должна получиться такая структура папок&lt;br /&gt;
    .../templater/reports/grades_list/html/init.php&lt;br /&gt;
    .../templater/reports/grades_list/html/template.html&lt;br /&gt;
Внутри этого файла, должен быть определен класс, который и создает документ из шаблона. Теперь, во время экспорта, формирование документа будет производить не встроенный в '''templater''' класс, а альтернативный.&lt;br /&gt;
&lt;br /&gt;
Если возникла необходимость экспортировать данные в файл, тип которого не поддерживает плагин '''templater''', можно самостоятельно реализовать и это. Для этого надо добавить папку ''тип_файла_экспорта'' в плагин '''templater''':&lt;br /&gt;
    .../modlib/templater/formats/тип_файла_экспорта&lt;br /&gt;
А внутрь нее положить файл '''init.php''', с аналогичным классом. Например, надо реализовать экспорт в excell. Тогда в плагине '''templater''' должен появиться файл '''init.php''' по такому адресу:&lt;br /&gt;
    .../modlib/templater/formats/xls/init.php&lt;br /&gt;
&lt;br /&gt;
Общий принцип формирования имен классов:&lt;br /&gt;
* Для создания нового формата ''dof_modlib_templater_format''_'''тип-файла-экспорта'''.&lt;br /&gt;
* Для изменения логики работы существующего формата ''dof''_'''типплагина_имяплагина'''_''templater''_'''название-папки-документа'''_'''тип-файла-экспорта'''.&lt;br /&gt;
Таким образом, для выше приведенных примеров имена классов будут такими:&lt;br /&gt;
* Новый класс экспорта в excell: '''dof_moblib_templater_format_xls'''.&lt;br /&gt;
* Альтернативный класс экспорта в '''html''': '''dof_im_reports_templater_grades_list_html'''.&lt;br /&gt;
&lt;br /&gt;
В плагине '''templater''' существует абстрактный базовый класс  '''dof_modlib_templater_format'''. Каждый класс, который вы создаете, должен наследоваться от него. &lt;br /&gt;
При создании нового формата обязательно нужно реализовать следующие методы:&lt;br /&gt;
* '''get_file'''($options) - получить файл в виде строки. Главная функция, производящая все преобразования над данными.&lt;br /&gt;
* '''get_filename'''($options) - получить имя файла вместе с расширением одной строкой.&lt;br /&gt;
* '''get_mimetype'''($options) - получить MIME-тип для подстановки его в HTTP-заголовок.&lt;br /&gt;
&lt;br /&gt;
Дальнейшее использование созданного вами формата аналогично использованию готового формата. Более подробную информацию о методах и свойствах класса ''dof_modlib_templater_format'' можно найти в разделе [[Разработка:modlibs/templater#dof_modlib_templater_format|API]].&lt;br /&gt;
&lt;br /&gt;
=== Альтернативный способ экспорта ===&lt;br /&gt;
Если работа стандартного контейнера экспорта [[Разработка:modlibs/templater#dof_modlib_templater_package|dof_modlib_templater_package]] вас не устраивает, то вы можете создать свой. Для этого надо создать свой класс и реализовать в нем необходимые методы. Этот класс надо поместить в файл '''init.php''', а файл положить в папку того документа, для экспорта которого, вы этот контейнер создавали. Теперь при создании объекта экспорта будет создан не стандартный объект, а тот, который вы написали в файле. К примеру, вы хотите производить экспорт оценок через собственный контейнер. Тогда должна получиться такая структура папок:&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/ &lt;br /&gt;
    .../im/reports/templater/grades_list/csv/&lt;br /&gt;
    .../im/reports/templater/grades_list/html/&lt;br /&gt;
    .../im/reports/templater/grades_list/init.php&lt;br /&gt;
Класс контейнера должен именоваться так: dof_тип-плагина_имя-плагина_templater_название-папки-документа. В нашем случае это '''dof_im_reports_templater_grades_list'''.&lt;br /&gt;
&lt;br /&gt;
== API плагина ==&lt;br /&gt;
В этом разделе описаны все функции интерфейса плагина templater.&lt;br /&gt;
=== Внешний ===&lt;br /&gt;
====dof_modlib_templater:====&lt;br /&gt;
*'''template'''($plugintype, $pluginname, $data, $templatename) — возвращает класс экспорта документа из указанного плагина. Возвращает объект класса dof_modlib_templater_package или dof_тип-плагина_имя-плагина_templater_имя-документа&lt;br /&gt;
** $plugintype - тип плагина&lt;br /&gt;
** $pluginname - имя плагина&lt;br /&gt;
** $data - данные для экспорта, структурированные как указано [[Разработка:modlibs/templater#Формат исходных данных|выше]].&lt;br /&gt;
** $templatename - имя документа; здесь указывается имя папки, в которой лежат шаблоны для формирования документа в разных форматах. В рассмотренных выше примерах это '''grages_list''', '''teachers_list''' или '''students_list'''.&lt;br /&gt;
&lt;br /&gt;
*'''template_path'''($plugintype, $pluginname, $templatename,$adds=null, $fromplugin) - возвращает путь внутри плагина.&lt;br /&gt;
** $plugintype - тип плагина&lt;br /&gt;
** $pluginname - имя плагина &lt;br /&gt;
** $templatename - имя документа (см. предыдущую функцию)&lt;br /&gt;
** $adds - дополнительный путь внутри плагина&lt;br /&gt;
** $fromplugin - какой путь нужно вернуть: из внешнего плагина или из modlib/templater. Ее возможные значения:&lt;br /&gt;
*** null (по умолчанию) - искать путь сначала во внешнем плагине, а затем во внутреннем&lt;br /&gt;
*** true  - искать только во внешнем планине&lt;br /&gt;
*** false - искать только в modlib/templater&lt;br /&gt;
Таблица, описывающая работу этой функции:&lt;br /&gt;
{| border=1&lt;br /&gt;
 |'''№'''&lt;br /&gt;
 |'''$templatename'''&lt;br /&gt;
 |'''$fromplugin'''&lt;br /&gt;
 |'''Результат'''&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |null&lt;br /&gt;
 |null&lt;br /&gt;
 |Путь внутри modlib/templater&lt;br /&gt;
 |-&lt;br /&gt;
 |2&lt;br /&gt;
 |null&lt;br /&gt;
 |true&lt;br /&gt;
 |false&lt;br /&gt;
 |-&lt;br /&gt;
 |3&lt;br /&gt;
 |null&lt;br /&gt;
 |fasle&lt;br /&gt;
 |Путь внутри modlib/templater&lt;br /&gt;
 |-&lt;br /&gt;
 |4&lt;br /&gt;
 |Существующее&lt;br /&gt;
 |null&lt;br /&gt;
 |Путь из внешнего плагина&lt;br /&gt;
 |-&lt;br /&gt;
 |5&lt;br /&gt;
 |Существующее&lt;br /&gt;
 |true&lt;br /&gt;
 |Путь из внешнего плагина&lt;br /&gt;
 |-&lt;br /&gt;
 |6&lt;br /&gt;
 |Существующее&lt;br /&gt;
 |false&lt;br /&gt;
 |Путь внутри modlib/templater&lt;br /&gt;
 |-&lt;br /&gt;
 |7&lt;br /&gt;
 |Ошибочное&lt;br /&gt;
 |null&lt;br /&gt;
 |false&lt;br /&gt;
 |-&lt;br /&gt;
 |8&lt;br /&gt;
 |Ошибочное&lt;br /&gt;
 |true&lt;br /&gt;
 |false&lt;br /&gt;
 |-&lt;br /&gt;
 |9&lt;br /&gt;
 |Ошибочное&lt;br /&gt;
 |false&lt;br /&gt;
 |false&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====dof_modlib_templater_package====&lt;br /&gt;
*'''get_file'''($type, $options) - получить отформатированные данные, пригодные для обработки функцией file_put_contents(). &lt;br /&gt;
**$type — в какой формат экспортировать. Должно совпадать с названием папок в ...'''/modlibs/templater/formats/''' - '''dbg''' или '''csv''', или '''odf''' и др. А также с именем папки во внешнем плагине, в котором лежит шаблон экспорта в файлы такого типа.&lt;br /&gt;
**$options — дополнительные параметры.&lt;br /&gt;
*'''send_file'''($type, $options) — инициализировать передачу файла клиенту через браузер.&lt;br /&gt;
**$type — в какой формат экспортировать, &lt;br /&gt;
**$options — дополнительные параметры.&lt;br /&gt;
*'''get_formats'''() - список доступных для указанного документа типов файлов экспорта.&lt;br /&gt;
*'''template_path'''($adds=null, $fromplugin) - путь к шаблону  (работает через класс dof_modlib_templater)&lt;br /&gt;
**$adds - дополнительный путь, присоединяемый к возвращаемому функцией template_path в классе '''dof_modlib_templater''':&lt;br /&gt;
**$fromplugin - какой путь нужно вернуть: из внешнего плагина или из modlib/templater. Возможные значения:&lt;br /&gt;
*** null (по умолчанию) - искать путь сначала во внешнем плагине, а затем в &lt;br /&gt;
*** true  - искать только во внешнем планине&lt;br /&gt;
*** false - искать только в modlib/templater&lt;br /&gt;
&lt;br /&gt;
=== Внутренний ===&lt;br /&gt;
Этот раздел понадобится вам в случае если вам будет нужно написать собственный формат или тип документа.&lt;br /&gt;
&lt;br /&gt;
====dof_modlib_templater_package:====&lt;br /&gt;
*'''__construct'''($dof, $plugintype, $pluginname, $templatename)&lt;br /&gt;
**$dof - стандартный объект $DOF&lt;br /&gt;
**$plugintype - тип плагина (im, storage, modlib и т. д.)&lt;br /&gt;
**$pluginname - имя плагина &lt;br /&gt;
**$templatename - имя шаблона форматирования, для которого вызывается обьект '''dof_modlib_templater_package''':&lt;br /&gt;
*'''set_data'''($obj) — загрузить необработанные данные в объект.&lt;br /&gt;
** $obj - объект с необработанными данными&lt;br /&gt;
*'''get_data'''() - внутренний метод. Получить необработанный объект с данными.&lt;br /&gt;
&lt;br /&gt;
====dof_modlib_templater_format====&lt;br /&gt;
*'''__construct'''($dof, $plugintype, $pluginname, $templatename) - конструктор класса. Вызывается автоматически объектом dof_modlib_templater_package.&lt;br /&gt;
** $dof - объект [[Разработка:DOF|$DOF]]&lt;br /&gt;
** $plugintype - Тип плагина&lt;br /&gt;
** $pluginname - имя плагина&lt;br /&gt;
** $templatename - имя шаблона для экспорта&lt;br /&gt;
*'''get_file'''($options)&lt;br /&gt;
** $options - произвольные дополнительные параметры&lt;br /&gt;
*'''set_data'''($data)&lt;br /&gt;
** $data - объект с заранее подготовленными данными&lt;br /&gt;
*'''get_filename'''($options)&lt;br /&gt;
** $options - произвольные дополнительные параметры&lt;br /&gt;
*'''get_mimetype'''($options)&lt;br /&gt;
** $options - произвольные дополнительные параметры&lt;br /&gt;
*'''template_path'''($adds=null, $fromplugin) - путь к папке данного формата (работает через класс package)&lt;br /&gt;
** $adds - дополнительный путь, присоединяемый к возвращаемому функцией template_path в классе '''dof_modlib_templater_package''':&lt;br /&gt;
** $fromplugin - какой путь нужно вернуть: из внутреннего плагина или из modlib/templater. Возможные значения:&lt;br /&gt;
*** null (по умолчанию) - искать путь сначала во внешнем плагине, а затем в &lt;br /&gt;
*** true  - искать только во внешнем планине&lt;br /&gt;
*** false - искать только в modlib/templater&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные методы Sigma ===&lt;br /&gt;
*'''date'''($fofmat,$value = null) - Форматирует системную дату/время. Равносилен стандартной функции РНР [http://ru2.php.net/manual/ru/function.strftime.php strftime].&lt;br /&gt;
*'''mb_substr'''($value,$start = 0,$length = 1) - Получает часть строки. Равносилен стандартной функции РНР [http://ru2.php.net/manual/ru/function.mb-substr.php mb_substr]. Используемая кодировка 'utf-8'.&lt;br /&gt;
*'''get_value'''($id,$field,$code) - Возвращает значение поля в записи с указанным id.&lt;br /&gt;
**  $id - id записи в таблице&lt;br /&gt;
**  $field - поле в таблице&lt;br /&gt;
**  $code - имя плагина справочника&lt;br /&gt;
*'''get_string'''($identifier, $pluginname = NULL, $a = NULL, $plugintype = 'im') - Возвращает строку перевода из файла локализации. Равносилен стандартному методу деканата '''get_string'''.&lt;br /&gt;
&lt;br /&gt;
== Форматы экспорта ==&lt;br /&gt;
В этом разделе будут рассмотрены все поддерживаемые плагином templater форматы экспорта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ODF ===&lt;br /&gt;
Open Document Format.&lt;br /&gt;
Этот формат используется документами [http://openoffice.ru OpenOffice]. В этом формате можно создавать как обычные текстовые документы (odt), так и электронные таблицы (ods). Для подготовки документа нужно разметить его тегами шаблонизатора [http://pear.php.net/package/HTML_Template_Sigma Sigma]. Создание текстового документа и электронной таблицы происходит одинаково - разница только в расширении файла: odt - для текстового документа, и ods для электронной таблицы.&lt;br /&gt;
&lt;br /&gt;
Экспорт в формат odf реализуется стандартным образом. Отдельных слов, в силу особенностей структуры документа, заслуживает только подготовка шаблона.&lt;br /&gt;
Все файлы формата odf представляют собой zip-архивы определенной структуры. У '''odt''' или '''ods''' документов собственно текст находится в файле '''content.xml''', который лежит в корне архива. Для того, чтобы правильно разметить документ - воспользуйтесь разделом [[Разработка:modlibs/templater#Подготовка шаблона документа|Подготовка шаблона документа]].&lt;br /&gt;
&lt;br /&gt;
В плагине, из которого планируется реализовать экспорт в odf,  папке odf, должна лежать папка с именем '''content''', в которой должны лежать каталоги и файлы распакованные из этого архива. Собственно текст документа хранится в файле '''content.xml'''. Поэтому именно этот файл должен быть размечен как шаблон документа. Остальные файлы и папки можно оставить без изменения. В итоге мы должны увидеть что-то подобное:&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/Configurations2/&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/META-INF/&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/Thumbnails/&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/content.xml&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/meta.xml&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/mimetype&lt;br /&gt;
    .../im/reports/templater/grades_list/odf/content/settings.xml&lt;br /&gt;
Ниже представлена схема структуры папок, с пояснением, для чего какие файлы и директории нужны.&lt;br /&gt;
[[Изображение:folders5.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Пример реализации экспорта в '''odf''':&lt;br /&gt;
    $template = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $data, 'grades_list');&lt;br /&gt;
    $template-&amp;gt;send_file('odf');&lt;br /&gt;
    die;&lt;br /&gt;
&lt;br /&gt;
=== CSV ===&lt;br /&gt;
Comma Separated Value - значения разделенные запятыми. Файлы этого формата  - это набор строк, данные в которых отделяются друг от друга специальными текстовыми разделителями. Обычно запятой, точкой с запятой или символом таблуляции.&lt;br /&gt;
&lt;br /&gt;
Экспорт в этот формат имеет свои особенности.&lt;br /&gt;
&lt;br /&gt;
По умолчанию экспорт документов в этот формат происходит следующим образом: &lt;br /&gt;
* из входных данных берется самый первый массив объектов;&lt;br /&gt;
* названия свойств (названия, а не значения!) первого объекта становятся строкой заголовков, остальные поля - строками данных;&lt;br /&gt;
* при формировании строк данных в них попадают только данные, которые хранятся в свойствах объекта, одноименных со свойствами объекта, из которого сформирована строка заголовка. Лишние данные отбрасываются, недостающие заменяются пробелами;&lt;br /&gt;
* все остальные элементы входных данных игнорируются.&lt;br /&gt;
&lt;br /&gt;
Поскольку csv-файлы имеют стандартную и неизменную структуру, шаблоны для их построения не требуются. Из объекта данных формируется последовательность строк, после чего обработанные данные отсылаются клиенту:&lt;br /&gt;
    $template = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $data, 'teachers_list');&lt;br /&gt;
    $template-&amp;gt;send_file('csv');&lt;br /&gt;
    die;&lt;br /&gt;
&lt;br /&gt;
По умолчанию строка заголовка вставляется в конечный файл. Но можно это отключить:&lt;br /&gt;
    $template = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $data, 'teachers_list');&lt;br /&gt;
    $options = new object;&lt;br /&gt;
    $options-&amp;gt;title = false;&lt;br /&gt;
    $template-&amp;gt;send_file('csv', $options);&lt;br /&gt;
    die;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
Экспорт в этот формат пригодиться в случае, если вам нужно сохранить данные из какого-либо документа как web-страницу.&lt;br /&gt;
Как обычно, надо создать файл шаблона, разметить его, положить в установленное место и назвать '''template.html'''.  О том, как правильно его разметить можно прочитать в разделе [[Разработка:modlibs/templater#Подготовка шаблона документа|Подготовка шаблона документа]].&lt;br /&gt;
Пример кода:&lt;br /&gt;
    $template = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $data, 'grades_list');&lt;br /&gt;
    $template-&amp;gt;send_file('html');&lt;br /&gt;
=== DBG ===&lt;br /&gt;
Это тестовый вариант экспорта. На экран выводятся входные данные в том виде как они переданы. Это может помочь разобраться с их структурой и проверить работоспособность классов. Для этого варианта экспорта не требуется никакого шаблона. Все остальное - как обычно.&lt;br /&gt;
Пример кода:&lt;br /&gt;
    $template = $DOF-&amp;gt;modlib('templater')-&amp;gt;template('im', 'reports', $data, 'grades_list');&lt;br /&gt;
    $template-&amp;gt;send_file('dbg');&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://pear.php.net/package/HTML_Template_Sigma Шаблонизатор HTMLTemplateSigma]&lt;br /&gt;
*[http://pear.php.net/manual/en/package.html.html-template-sigma.intro-syntax.php Справка по синтаксису шаблонизатора Sigma]&lt;/div&gt;</summary>
		<author><name>K-krsnv</name></author>	</entry>

	</feed>