четверг, 24 февраля 2011 г.

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

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

Тэг 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 может иметь компоненты urlheight и 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'> Истинно, если пост имеет более одного комментария.