пятница, 18 февраля 2011 г.

Метатипы: (4) Использование


Итак, мы создали метатип и добавили его элемент (мета-поле) на страницу. По умолчанию опция ShowDate включена.

Теперь изменим функцию ShowCreateDate, которую мы создали ранее, так, чтобы она показывала дату последнего изменения на конкретной странице сайта, только если опция ShowDate включена.
Сначала в эту функцию мы добавим вызов другой функции - функции получения элементов данных для метатипа ShowDateSettings: GetShowDateSettingsXml.

Так как эта функция будет возвращать все элементы этого метатипа, мы отфильтруем их так, чтобы возвращался только элемент добавленный на текущую страницу. Фильтр по странице работает и используется точно также, как и фильтр для функций, возвращающих  элементы данных из папки данных (см. Создание и использование папок данных (2)).

В шаблоне функции мы будем проверять значение поля ShowDate: и если оно будет true, мы будем показывать дату, а если false - не будем.
  1. В разделе Функции, откроем для редактирования нашу функцию Demo.ShowChangeDate.
  2. На вкладке Вызовы функций добавим функцию Demo.ShowDateSettings.GetShowDateSettingsXml.
  3. У этой функции выберем параметр Filter и в качестве Типа параметра вызовем Функцию: Demo.ShowDateSettings.ActivePageReferenceFilter.
  4. Оставим значение по умолчанию для ее параметра Page Scope: Current page (текущая страница).

На вкладке Просмотр можно увидеть, что именно возвращает функция GetShowDateSettingsXml.

Теперь изменения в шаблоне.
  1. На вкладке Шаблон добавим переменную ShowDate (для удобства)...

    <xsl:variable name="ShowDate" select="/in:inputs/in:result[@name='GetShowDateSettingsXml']/ShowDateSettings/@ShowDate" />

  2. … и между тегами <body></body> изменим код так, чтобы выполнялась проверка поля ShowDate:

    <body>
    <xsl:if test="$ShowDate='true'">
    Последнее изменение: <xsl:value-of select="$ChangeDate" />
    </xsl:if>
    </body>
В итоге шаблон нашей обновленной функции должен выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:in="http://www.composite.net/ns/transformation/input/1.0"
  xmlns:lang="http://www.composite.net/ns/localization/1.0"
  xmlns:f="http://www.composite.net/ns/function/1.0"
  xmlns:de="#dateExtensions"
  xmlns="http://www.w3.org/1999/xhtml"
  exclude-result-prefixes="xsl in lang f">
  <xsl:variable name="ChangeDate" select="/in:inputs/in:result[@name='GetIPageXml']/IPage/@ChangeDate" />
  <xsl:variable name="ShowDate" select="/in:inputs/in:result[@name='GetShowDateSettingsXml']/ShowDateSettings/@ShowDate" />
  <xsl:template match="/">
    <html>
      <head />  
      <body>
        <xsl:if test="$ShowDate='true'">
          <div id="LastModifiedDate">
Последнее изменение: <xsl:value-of select="de:ShortDateFormat($ChangeDate)" />
       </div>
        </xsl:if>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>:

Так как мы ее уже добавили в шаблоны страниц сайта, можно сразу проверить, как все будет работать.
  1. Откроем несколько страниц для редактирования в разделе Контент.
  2. На вкладке Метаданные уберем “галочку” из поля ShowDate.
  3. Сохраним и опубликуем изменения.
  4. Посмотрим эти страницы в браузере (или на вкладке Просмотр).

На этих страницах дат не будет.

На этом все про метатипы.

Это достаточно простой пример про метатипы, но он дает неплохое начальное представление о их функции и возможностях.

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

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