4 ноября 2009 г.

Теги виджетов в шаблонах Blogger

Основы применения тегов <b:widget> для создания виджетов мы рассмотрели в статье «Структура шаблонов и специальные теги Blogger». Если Вы собираетесь работать с виджетами в визуальном режиме на вкладке «Дизайн» > «Элементы страницы», тогда это все, что Вам нужно знать. Если же Вы предпочитаете работать непосредственно с кодом шаблона на вкладке «Дизайн» > «Изменить HTML» в режиме «Расширить шаблоны виджета», тогда эта статья для Вас.

Первое, что нужно сделать - добавить закрывающий тег. В результате вместо:

<b:widget [...параметры...] />

должно получиться:

<b:widget [...параметры...]>
</b:widget>

Теперь давайте поговорим о том, что можно поместить между этими тегами.

Вложения

Содержимое виджета заключается внутри секций includable, которые имеют такой формат:

<b:includable id='main' var='thiswidget'>
    [здесь можно вставлять любой контент]
</b:includable>

Параметры тега следующие:

  • id - (обязательный) уникальный идентификатор из буквенно-цифровых символов.
  • var - (необязательный) идентификатор из буквенно-цифровых символов для обращения к данным внутри секции. Порядок работы с данными описан ниже.

У любого виджета должна быть одна главная includable-секция с идентификатором id='main'. Она обычно содержит большую часть всего содержимого, отображаемого для данного виджета, и, в большинстве случаев, этой секции бывает достаточно.

Если же Вы создадите несколько секций includable с различными идентификаторами ID, то автоматически они отображаться не будут. Однако, если Вы, например, создадите секцию includable с идентификатором id='new', то Вы можете сослаться на нее из главной секции с помощью конструкции <b:include name='new' /> и таким образом отобразить ее содержимое.

Параметры тега b:include следующие:

  • name - (обязательный) буквенно-цифровой идентификатор, соответствующий ID одной из существующий секций b:includable в том же виджете.
  • data - (необязательный) выражение или данные для передачи в секцию includable. Значение параметра data будет передано в параметр var includable-секции.

Далее следует простой пример, демонстрирующий использование b:includable и b:include. Порядок работы с циклами и данными будет описан позднее. Главное, что нужно понять из этого примера, каким образом секция «post» отображается внутри секции «main». В данном примере в цикле из массива сообщений posts выбираются отдельные сообщения i и в теге include через параметр data сообщения передаются в секцию includable с id = 'post'. Вложенная секция, ссылаясь на полученное сообщение через параметр var='p', печатает его заголовок.

<b:includable id='main'>
   <b:loop var='i' values='posts'>
      <b:include name='post' data='i'/>
   </b:loop>
</b:includable>

<b:includable id='post' var='p'>
   Title: <data:p.title/>
</b:includable>

Вложения наиболее полезны в тех случаях, когда у Вас есть некоторый код, который Вы хотите повторить несколько раз в разных местах. Вы можете написать это код только один раз, вложить его в секцию b:includable, а затем с помощью b:include использовать этот код там, где Вам нужно. Если же перед Вами не стоит такая задача, тогда Вы можете обойтись единственной includable-секцией. Заметьте, что главная includable-секция включается в код виджета автоматически. Писать <b:include name='main'/> вручную нет необходимости.

Данные

Тег data: tag, вероятно, один из самых важных, поскольку именно с помощью него вы получаете доступ к содержимому блога. Вот парочка примеров использования этого тега:

<data:title/>

или

<data:photo.url/>

Первый пример самый простой и будет работать в большинстве виджетов, так как у большинства виджетов есть заголовки (title). Все, что он делает, это печатает заголовок виджета. Второй пример иллюстрирует сложную переменную, из которой мы выбираем определенное свойство. Фото, скажем в виджете «Профиль», может иметь такие свойства как url (адрес), height (высота) и width (ширина). Использование символа точки «.» указывает на то, что мы хотим получить адрес именно фото, а не чего-нибудь другого.

С помощью тега data: можно получить доступ к различным данным. Виджеты различных типов имеют свои наборы тегов для доступа к данным. Полный список тегов data: мы рассмотрим в следующий раз.

Оператор цикла

Тег b:loop позволяет многократно повторить некоторый контент. Обычно он используется для вывода на печать списка сообщений для данной страницы, списка комментариев или списка ярлыков и т. д. Основной формат тега для использования циклов таков:

<b:loop var='identifier' values='set-of-data'>
   [повторяемый контент]
</b:loop>

В качестве переменной 'identifier' может быть любое выбранное Вами имя. В процессе выполнения цикла в эту переменную будут передаваться элементы набора данных 'set-of-data'. Традиционно этой переменной дают имя i. Набор данных 'set-of-data', указываемый в параметре values, может быть любым элементом данных списочного типа (полный список тегов data: будет рассмотрен в следующей статье). Например, в виджете «Сообщения блога» сообщения (posts) представляют собой список. Код, приведенный в следующем примере, перебирает в цикле все сообщения, выводя на печать заголовок каждого сообщения, заключенный в теги заголовка <h2>.

<b:loop var='i' values='data:posts'>
   <h2><data:i.title/></h2>
</b:loop>

Заметьте, что в параметр i передаются поочередно значения каждого сообщения из списка. Таким образом, Вы можете получить заголовок каждого из этих сообщений.

Условный оператор If / Else

Теги условного оператора b:if и b:else можно использовать для отображения содержимого при выполнении определенного условия. Основной формат условного оператора выглядит следующим образом:

<b:if cond='condition'> 
   [содержимое, отображаемое при выполнении условия cond]
<b:else/>
   [содержимое, отображаемое при невыполнении условия cond]
</b:if>

Тег b:else необязательный. При его отсутствии результатом работы условного оператора будет либо содержимое секции b:if, либо ничего. Однако закрывающий тег </b:if> обязателен в любом случае.

В качестве условия «condition» можно использовать любые выражения, которые могут иметь значения либо true (истина), либо false (ложь). Некоторые теги данных сами по себе возвращают значения true/false, например allowComments (показать комментарии) для сообщения. Другие элементы данных можно сравнивать с определенными значениями, чтобы в результате получить true или false. Вот несколько примеров:

  • <b:if cond='data:post.showBacklinks'> Истина, если для текущего сообщения установлено свойство «Показать обратные ссылки».
  • <b:if cond='data:blog.pageType == "item"'> Истина, если текущая страница - страница сообщения.
  • <b:if cond='data:displayname != "Fred"'> Истина, если имя автора отлично от Fred.
  • <b:if cond='data:post.numComments > 1'> Истина, если у текущего поста более одного комментария.

Источник: Widget Tags for Layouts.

Комментировать в ВКонтакте

Комментировать в Facebook

Комментировать в Blogger

1 комментарий:

  1. Спасибо за полезную информацию. Решил попробовать разобрать шаблон - статьи очень помогают.

    ОтветитьУдалить