четверг, 2 сентября 2010 г.

[Blogger.com] Язык шаблонов Blogspot: Тэги для содержимого виджетов

(Перевод материала Widget Tags for Layouts)


Тэг widget

Одинарная форма тэга <b:widget> для создания виджетов была рассмотрена в предыдущей статье. Если для работы с шаблоном блога используется только конструктор «Элементы страницы», то это всё, что потребуется.

Данная статья описывает тэги, которые вам понадобятся для тонкой настройки шаблона под свои потребности. Полную форму шаблона можно увидеть, если скачать его на компьютер, или же в режиме, включаемом флажком «Расширить шаблоны виджета» на вкладке «Редактирование HTML».

В полной форме тэг <b:widget> является парным, внутри которого помещается фактическое сожержимое виджета.

<b:widget [...attributes...]>
</b:widget>

Теперь рассмотрим, какие тэги шаблонизатора вы можете использовать внутри <b:widget>.

Тэги includable и include


Содержимое виджета располагается в подключаемых сегментах, которые имеют следующий формат

<b:includable id='main' var='thiswidget'>
[подключаемое содержимое]
</b:includable>
Атрибуты тэга:
  • id — (обязательный) Уникальный идентификатор. (Из цифр и латинских букв.)
  • var — (опциональный) Идентификатор для данных, адресуемых из содержимого сегмента. (См. ниже)

Каждый виджет обязан иметь один подключаемый сегмент с идентификатором id='main'. Он обычно содержит большую часть контента виджета, и во многих случаях других сегментов не требуется.

Созданные вами сегменты с различными идентификаторами не отображаются автоматически. Для подключения сегмента (из тела сегмента main или другого сегмента) используйте одиночный тэг <b:include/>. (Сегмент main всегда подключается автоматически.)

Атрибуты тэга b:include:
  • name — (обязательный) Идентификатор подключаемого сегмента.
  • data — (опциональный) Выражение, которое передается в сегмент как параметр. Значение данного выражения будет доступно из сегмента через переменную, указанную в его атрибуте var.
Пример, демонстрирующий использование b:includable и b:include. (Тэги loop и data описаны в следующих разделах данной статьи.) Сегмент main подключает сегмент post, передавая ему в качестве параметра i. Сегмент post получает доступ к данным i через переменную p и выводит свойство title.
<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>
Механизм подключаемых сегментов крайне полезен, если нужно в различных местах вставить вставить один и тот же код. Если такой необходимости не возникает, можно просто расположить весь код виджета в пределах одного сегмента main.

Тэг data

При помощи данного тэга осуществляется вставка в тело страницы реального содержимого блога. Примеры использования data:
<data:title/>
<data:photo.url/>
Первый пример будет работать в большинстве виджетов, поскольку практически все виджеты имеют заголовок, содержащийся в переменной title. Во втором примере используется составная переменная, из котрой мы выбираем отдельный компонент. Скажем, в контексте виджета, отображающего профиль пользователя, переменная photo может иметь компоненты url, height и width. Cимвол "." означает, что мы выбираем компонент url переменной photo. Существует множество данных, которые вы можете получить при помощи тэга data, в зависимости от конкретного виджета. Подробный список переменных, доступных через данный тэг, представлен в следующей статье.

Тэг loop

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

<b:loop var='identifier' values='set-of-data'>
[код, который будет повторяться в цикле]
</b:loop>
Атрибут var содержит имя переменной, в которой на каждой итерации цикла будет содержаться новая порция данных. Атрибут values содержит имя переменной, в которой находится список, перебор элементов которого будет производиться в цикле. Следующий пример кода выводит заголовки сообщений:
<b:loop var='i' values='data:posts'>
<h2><data:i.title/></h2>
</b:loop>

If / Else

Тэги b:if и b:else используются, чтобы отобразить один вариант контента при выполнении задонного условия и другой вариант — при не выполнении. Формат использования:
<b:if cond='условие'>
[содержимое, отображающееся, если условие выполняется]
<b:else/>
[содержимое, отображающееся, если условие не выполняется]
</b:if>

Тэг b:else не обязателен. Если он отсутствует, в случае невыполнения условия в данном месте не отображается ничего.

В условие можно помещать что угодно, что вычислится как булево значение. Некоторые переменные сами содержат булево значение, например allowComments. Некоторые примеры:
  • <b:if cond='data:post.showBacklinks'> Истинно, если в текущем посте следует отображать обратные ссылки.
  • <b:if cond='data:displayname != "Fred"'> Истинно, если отображаемое имя не равно Fred.
  • <b:if cond='data:post.numComments > 1'> Истинно, если пост имеет более одного комментария.

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