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

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

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

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

Глава 4. Вторая страница

Мы сделали первую страницу, на которой выводится пять самых свежих заголовка новостей. Сформулируем новую задачу: на главной странице заголовки новостей необходимо сделать ссылками, при нажатии на которые открывается страница с полным текстом новости. Задача предполагает создание второго метода, который будет отображать выбранную новость в виде заголовка, даты публикации и полного текста.

До сих пор мы работали с методом "index", прикрепленного непосредственно к проекту. Теперь нам необходимо создать второй метод. Перед тем, как это сделать, сделаем небольшое теоретическое отступление.

Метод в XS2 можно прикреплять к трем различным сущностям: непосредственно к проекту (именно так мы поступили с "index"), к любому из модулей, к любому из типов в модуле. В нашем случае помимо самого проекта, мы можем прикрепить новый метод к модулю "news" или к типу "news_post". От чего зависит выбор варианта размещения, и на что он влияет? Зависит он от желания разработчика логически отделить одну группу методов от другой. Логично, если метод главной страницы сайта прикрепляется непосредственно к проекту, а метод, выводящий, например, новость, к объекту "Новость". Общий критерий выбора варианта размещения метода можно сформулировать так: метод лучше прикреплять к той сущности, вывод подсущностей которой является основной задачей данного метода. Говоря проще, если основной задачей метода является вывод последних новостей, свежих статей, последних сообщений из блога, информации о проекте, то есть узлов из совершенно разных модулей, то этот метод лучше прикрепить к проекту, поскольку именно проект является той сущностью, для которой все выводимые узлы являются подсущностями. Если же необходимо вывести текст одной новости, то единственной сущностью, для которой конкретный узел-новость является подсущностью, это тип "Новость". От того, к какой сущности прикреплен метод, зависит URL, по которому его можно вызвать в браузере.

Если метод прикреплен непосредственно к проекту, то его URL имеет вид http://имя домена/имя метода/
Если метод прикреплен к модулю, то его URL имеет вид http://имя домена/имя модуля/имя метода
Если метод прикреплен к типу, то его URL имеет вид http://имя домена/имя модуля/имя типа/имя метода/

Итак, приняв во внимание теоретические соображения, мы прикрепим новый метод для вывода страницы с текстом новости к типу "Новость". Назовем наш метод "show", поскольку он показывает узлы того типа, к которому он прикреплен. Название метода совершенно ни на что не влияет: разработчик волен выбирать удобные для него и для пользователя названия. Единственное требования к ним - соответствие стандарту на системные названия XS2.

Для добавления метода к типу "Новость", щелкните правой кнопкой мыши на пункте "Новостное сообщение" в дереве проектов. В появившемся контекстном меню выберите действие "Методы". Дальнейшие действия абсолютно аналогичны тем, что мы выполняли при добавлении метода "index".

Теперь напишем код метода:

Листинг 5
1.  <html>
2.    <head>
3.      <title>Страница новости</title>
4.    </head>
5.    <body>
6.      {xs2GetNode mod="news" NodId={$_THE.PARAMS[0]} ¶
                 var="my_news_post"}
7.  
8.      <h1>{$my_news_post.NName}</h1>
9.      <div>{$my_news_post.Date}</div>
10.     <div>
11.       {$my_news_post.Text}
12.     </div>
13.   </body>
14. </html>

Этот код практически полностью повторяет Листинг 2, за исключением строки №6, где вместо жесткого указания идентификатора узла, мы подставили значение из переменной $_THE.PARAMS[0]. Снова немного теории.

Наш метод отображает одну конкретную новость. Возникает попрос: а как указать методу, какую именно новость от должен вывести? Для этого мы воспользуемся передачей параметров в URL метода. Те, кто знаком с веб-разработкой, наверняка вспомнят о передаче параметров в URL после знака "?". Безусловно, можно воспользоваться этим удобным способом передачи параметров. Однако XS2 предлагает и другой, альтернативный, способ. Дело в том, что адрес страницы типа http://example.com/show.php?a=1&b=3&c=4 выглядит не очень привлекательно не только для человека, но и для поисковых систем. В XS2 параметры можно передавать в конце URL, разделяя их точкой; после последнего параметра обязательно ставить ".htm". За счет этого URL выглядит гораздо лучше (http://example.com/news/1.3.4.htm). Параметры, переданные таким образом, доступны в шаблоне метода в переменной $_THE.PARAMS (в PHP это находящийся в глобальной видмости массив $_THE['PARAMS']). Эта переменная является массивом, в котором все переданные параметры нумеруются от 0.

В нашем методе мы предполагаем, что идентификатор узла-новости, который нужно вывести, передается первым параметром в URL: например, http://домен/news/news_post/show/2.htm. Важно понимать, что разработчик сам придумывает, какие параметры передавать и в каком порядке - XS2 лишь предоставляет удобную возможность их передачи непосредственно в URL.

Итак, метод показа новости готов, осталось изменить метод главной страницы так, чтобы заголовки статей стали ссылками на этот метод.

Листинг 6
1.  {foreach from=$my_news_posts item="my_news_post"}
2.    <h1>{$my_news_post.NName}</h1>
3.    <div>{$my_news_post.Date|date_format:"%d.%m.%Y"}</div>
4.    <a href="/news/news_post/show/{$my_news_post.NodId}.htm">
5.      читать всю новость
6.    </a>
7.  {/foreach}

Мы добавили ссылку на метод show, прикрепленный к типу "Новостное сообщение", с передачей идентификатора новости через первый параметр. Теперь можно проверить, как все это работает.

Введение

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

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

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

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

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