Solution Technologies
Управление сайтом без ограничений

Руководство разработчика XS2

Скачать pdf-версию.

Часть 1. XS2 шаг за шагом

Глава 10. Взаимодействие процессора и шаблона

В главах 5 и 8 мы уже познакомились с процессором. Однако до сих пор мы не пользовались одним из самых главных преимуществ процессора - возможностью подготовки данных для шаблона. Для того, чтобы понять, как сотрудничают процессор и шаблон в одном методе, попробуем решить следующую задачу. Добавим на наш сайт страницу, которая будет выводить новости за определенный год и месяц. Год и месяц передаются в URL как два параметра, разделенных точкой.

Добавим новый метод к модулю "news". Наш метод получит название "select_news" и будет состоять из процессора и шаблона. В процессоре мы произведем выборку новостей за указанный год и месяц, а затем передадим выбранные новости в шаблон, который отобразит их в определенном HTML-коде.

Листинг 19

Процессор:

1.  <?php
2.    $condition = 'YEAR(Date) = '.$_THE.PARAMS[0].' AND ¶
                 MONTH(Date) = '.$_THE.PARAMS[1];
3.    $news = xs2GetNodes(array('mod'=>'news', ¶
                 'NType'=>'news_post', 'sort'=>'Date ¶
                 desc', 'condition'=>$condition));
4.  
5.    $_HTML->assign('my_news_posts',$news);
6.  ?>

Листинг 20

Шаблон:

1.  <html>
2.    <head>
3.      <title>Новости за {$_THE.PARAMS[0]} месяц ¶
                 {$_THE.PARAMS[1]} года</title>
4.    </head>
5.    <body>
6.      {foreach from=$my_news_posts item="my_news_post"}
7.        <h2>{$my_news_post.NName}</h2>
8.        {foreach name="authors" from=$my_news_post.Authors ¶
                 item="author"}
9.          {$author.NName}{if !$smarty.foreach.authors.last}, ¶
                 {/if}
10.       {/foreach}
11.       <div>{$my_news_post.Date|date_format:"%d.%m.%Y"}</div>
12.     {/foreach}
13.   </body>
14. </html>

В процессоре мы выбрали все новости в переменную PHP $news, а затем с помощью функции assign() передали ее в шаблон под именем "my_news_posts". Подробнее о функции assign() можно прочитать в документации Smarty в разделе "Smarty для программистов -> Методы", здесь же нам важно, что глобальная переменная $_HTML автоматически доступна в процессоре и содержит экземпляр класса Smarty. Это означает, что на ней можно вызывать любые методы этого класса.

Поскольку в процессоре нам доступен экземпляр класса Smarty, мы можем, в частности, создавать в нем собственные модификаторы наподобие "date_format". Воспользуемся этой возможностью для вывода в строке №3 Листинга 20 не номера месяца, а его русского названия. Для этого нам потребуется модификатор, преобразующий номер месяца в название. Модификатор - это обычная функция PHP, зарегистрированная через объект Smarty с помощью метода "register_modifier()". Изменим наш процессор следующим образом:

Листинг 21
1.  <?php
2.    function monthNum2Name($monthNum){
3.      $monthes = array('январь',
4.                       'февраль', 'март', 'апрель',
5.                       'май', 'июнь', 'июль', 'август',
6.                       'сентябрь', 'октябрь', 'ноябрь',
7.                       'декабрь');
8.      return $monthes[(int)$monthNum+1];
9.    }
10.   $_HTML->register_modifier("num2name","monthNum2Name");
11. 
12.   $condition = 'YEAR(Date) = '.$_THE.PARAMS[0].' AND ¶
                 MONTH(Date) = '.$_THE.PARAMS[1];
13.   $news = xs2GetNodes(array('mod'=>'news', ¶
                 'NType'=>'news_post', 'sort'=>'Date ¶
                 desc', 'condition'=>$condition));
14. 
15.   $_HTML->assign('my_news_posts',$news);
16. ?>

Мы реализовали функцию преобразования и зарегистрировали ее в Smarty под именем "num2name". Теперь мы можем использовать новый модификатор в шаблоне:

Листинг 22
1.  <html>
2.    <head>
3.      <title>Новости за {$_THE.PARAMS[0]|num2name} ¶
                 {$_THE.PARAMS[1]} года</title>
4.    </head>
5.    ...
6.  </html>

Если вызвать наш новый метод в брузере, например, вот так http://www.example.com/news/select_news/2008.02.htm, то мы должны увидеть все новости за февраль 2008 года, если таковые есть в базе.

Введение

Основные характеристики системы XS2
Требование к хостинг-площадке, на которой устанавливается XS2.
Инструкции по установке XS2 на хостинг-площадке.

Часть 1. XS2 шаг за шагом

Модель данных в XS2: модуль, тип, узел, метод.
Как организовать простейшую структуру данных в XS2 и вывести узлы на главной странице сайта.
Множественный выборки узлов и их вывод на странице в цикле.
Создание второстепенной страницы и организация ссылок на нее.
Структура метода в XS2. Что такое процессор и как он взаимодействует в шаблоном внутри одного метода.
Дерево как универсальный способ организации узлов в XS2. Как настраивать вложенность узлов друг в друга.
Ссылки между узлами как основное средство построения альтернативных структур узлов.
Использование функция XS2 API для выполнения редакторских операций в коде методов.
Функция xs2Fetch и ее возможности при организации повторного использования методов.
Подробнее о взаимодействии процессора и шаблона в одном методе: передача данных между процессором и шаблоном.

Часть 2. Решения на платформе XS2

О чем пойдет речь во второй части, для кого она предназначена.
Как производить дополнительные манипуляции с узломпри его вставка, редактировании, удалении, копировании или перемещении.
Постраничный вывод как способ показа больших массивов данных в одном шаблоне.
Как с помощью XS2 быстро сделать сайт с поддержкой множества языковых версий.
Быстрое развертывание удобных пользовательских интерфейсов с технологией AJAX на платформе XS2.
Подробнее о том, как организовать сложные структуры данных в XS2 и производить в них поиск.
В следующих главах, которые будут публиковаться здесь по мере их написания, мы планируем рассказать о:
Copyright ©1998-2008 Солютекс. Все права защищены.
Этот сайт сделан в designLab | Работает на технологии XS2
Условия использования | О защите конфиденциальности