вторник, 8 февраля 2011 г.

XSLT функции: (1) Создание

Несколько сообщений из этого цикла я первоначально задумывал в рамках другой темы - создание и использование метатипов. Но то, что здесь описано - создание определенной XSLT функции - тянет на собственную тему. Поэтому я сначала расскажу про создание этой функции, а затем, опираясь на данный материал, перейду к циклу сообщений про метатипы.

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

Итак, давайте создадим XSLT функцию ShowChangeDate, которая будет выводить дату последнего изменения текущей страницы, и, чтобы эта дата появлялась на каждой странице, добавим эту функцию в шаблоны страниц на сайте.

Для получения даты последнего изменения страницы, воспользуемся вызовом т.н. функции получения данных (модель: Get<тип>Xml) для типа данных IPage.

(Каждая страница на сайте хранится в системном типе данных Composite.Data.Types.IPage, а для каждого типа автоматически создаются функции для работы с их элементами данными, в нашем случае, GetIPageXml.)

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

(Используя наименования в админке, я предполагаю, что вы использует русифицированную версию C1.)
  1. В разделе Функции, добавим XSLT функцию, указав такие параметры:
    • Имя: ShowChangeDate
    • Пространство имен: Demo
    • Тип вывода: XHTML
  2. В редакторе функции на вкладке Вызовы функций добавим функцию Composite.Data.Types.IPage.GetIPageXml
  3. Для параметра Selected fields удалим все поля, которые автоматически были выбраны системой...
  4. … и добавим только поле ChangeDate.
  5. Сохраним функцию.
На вкладке Просмотр, можно увидеть, что функция выводит значение поля для всех страниц сайта.

<in:result name="GetIPageXml">
  <IPage ChangeDate="2011-02-08T08:50:48.8396493+02:00" xmlns=""/>
  <IPage ChangeDate="2011-02-08T08:50:48.7606448+02:00" xmlns=""/>
  <IPage ChangeDate="2011-02-08T08:50:48.7676452+02:00" xmlns=""/>
  <IPage ChangeDate="2011-02-08T08:50:48.7746456+02:00" xmlns=""/>
  <IPage ChangeDate="2011-02-08T08:50:48.7806459+02:00" xmlns=""/>
  <IPage ChangeDate="2011-02-08T08:50:48.7886464+02:00" xmlns=""/>
</in:result>

Нам нужно значение поля только текущей страницы, причем система должна сама определять, что для функции является текущей страницей. Для этого воспользуемся фильтром.

Комментариев нет:

Отправить комментарий