Все циклы возвращают записи (информацию) из базы данных: о статьях, разделах, авторах и т.д.Каждая запись содержит поля: название, дату, вводный и основной текст, и многие другие. Для того, что бы отобразить эту информацию в HTML шаблоне в необходимых места мы используем теги.
Теги SPIP используются для вывода нужной нам информации в необходимом месте.
Базовое использование
Теги располагаются внутри циклов (для того, чтобы знать какую информацию необходимо вывести - о статье, разделе и т.д.).Имена тегов очень простые (но они на французском!). Полный список тегов для стандартных циклов приведен в документации по каждому циклу.
Имя тега всегда начинается с символа "решетка" (#), а название пишется заглавными (большими) буквами.
Имя тега всегда соответствует имени поля в базе данных SPIP.
Пример, который выводит названия всех статей в разделе:
<BOUCLE_articles(ARTICLES){id_rubrique}>
<li>#TITRE
</BOUCLE_articles>
Каждый раз, когда выполняется цикл ( SPIP находит информацию о статье), тег #TITRE заменяется на название статьи:
<li>Название статьи 1
<li>Название статьи 2
...
<li>Название последней статьи
Все очень просто: в необходимом месте мы просто пишем имя тега и при выполнении цикла он заменяется на соответствующую информацию из базы данных.
Опциональный код
На практике крайне редко информация выводится в чистом виде, обычно элементам задается оформление при помощи HTML тегов.
Например: есть SPIP тег, который отвечает за вывод главного названия статьи (#SURTITRE). Но часто это поле не заполняется при внесении информации на сайт. Заранее мы не можем знать, внесут ли эту информацию редакторы сайта или нет.
Добавим вывод главного названия в предыдущий пример. Мы получим следующий код:
<BOUCLE_articles(ARTICLES){id_rubrique}>
<li>#SURTITRE<br>#TITRE
</BOUCLE_articles>
который выводит главное название (#SURTITRE) и название (#TITRE) для каждой статьи раздела. Но что произойдет, если у какой то статьи главное название будет пустым? HTML код будет выглядеть следующим образом: "<li><br> Название статьи", т.е. выведется маленькая точка (из-за HTML тега li), пустая строка и в следующей строке - название статьи.
Нам необходимо выводить "<br>" только тогда, когда у статьи есть информация в поле главное название (#SURTITRE).
Такая запись тега позволяет решить эту задачу:
[ опциональный код перед (#TAG) опциональный код после]
Сам тег расположен между круглыми скобками, а весь дополнительный код находится между квадратными скобками. Содержимое необязательный код перед тегом и необязательный код после тега выводится только в случае, если соответствующий тег содержит информацию. Если соответствующей информации в базе нет, то ничего из того, что находится между квадратными скобками, не выводится.
Доработаем наш пример:
<BOUCLE_articles(ARTICLES){id_rubrique}>
<li>[(#SURTITRE)<br>]#TITRE
</BOUCLE_articles>
Теперь пример работает правильно: если главное название статьи существует, оно выводится, а после него следует тег <br>; если же поле пустое, то <br> не добавляется на страницу.
Расширенное использование
Начиная с версии 1.8 можно размещать один тег в другом. Например, если мы хотим вывести главное название статьи (#SURTITRE) только в том случае, когда есть информация в подзаголовке статьи (#SOUSTITRE), то код будет выглядеть так:
<BOUCLE_articles(ARTICLES){id_rubrique}>
[<li> [(#SURTITRE)<br>](#SOUSTITRE)]
</BOUCLE_articles>
N.B.Нельзя в опциональную часть тега вставлять циклы. Если необходимо вызвать цикл в зависимости от наличия того или иного тега, то можно вынести цикл в отдельный файл и подключить его с помощью директив #INCLURE или #MODELE в опциональной части кода.
Как отличить теги с одинаковыми именами
Когда один цикл вложен в другой, то очень часто у нас есть теги с одинаковыми именами. Например:
<BOUCLE_sections(RUBRIQUES){id_rubrique}>
<BOUCLE_articles(ARTICLES){id_rubrique}>
#TITRE
</BOUCLE_articles>
</BOUCLE_sections>
В цикле (_sections) можно вывести название раздела (#TITRE), а в цикле (_articles) - название статьи (тоже #TITRE). В данном примере выведутся названия статьей, так как тег находится в цикле (_articles).
Если необходимо во внутреннем цикле использовать тег из внутреннего цикла, то синтаксис будет выглядеть следующим образом: #n:TAG где n - название цикла (нижнее подчеркивание тоже часть названия). Пример:
<BOUCLE_sections(RUBRIQUES){id_rubrique}>
<BOUCLE_articles(ARTICLES){id_rubrique}>
#_sections:TITRE : #TITRE
</BOUCLE_articles>
</BOUCLE_sections>
отобразит название раздела перед названием статьи.
Мы можем получать доступ только к значениям тегов из внешнего цикла. Не получится вывести произвольный тег из любого цикла в произвольном месте на странице шаблона. Пример:
<BOUCLE_sections(RUBRIQUES){id_rubrique}>
#TITRE
</BOUCLE_sections>
<BOUCLE_articles(ARTICLES){id_rubrique}>
#_sections:TITRE : #TITRE
</BOUCLE_articles>
значение #_sections:TITRE в цикле _articles не выведется, так как _section не является внешним по отношению к _articles.
Фильтры. Меняем значение тега до его отображения на странице
Достаточно часто необходимо изменить или переформатировать информацию, получаемую из базы данных, для правильно вывода на странице. Например:
- вывести название только заглавными буквами;
- вместо даты вывести только день недели или месяц;
- уменьшить размер изображения;
- и многое другое
Фильтры - это способ изменить информацию, которая хранится в базе данных и выводится при помощи тега непосредственно перед генерацией страницы. В SPIP уже есть фильтры, которые обеспечивают основные операции. Название используемого фильтра(ов) пишется после имени тега:
[ код до (#TAG|фильтр1|фильтр2|...|фильтрn) код после ]
Фильтры выполняются последовательно, слева направо.
Note. Любой фильтр - это PHP функция, в которую качестве аргумента передается значение тега. Таким образом можно использовать встроенные в PHP функции для работы с тегами.
- Внимание: фильтры нельзя использовать с динамическими тегами.
Примеры некоторых фильтров:
- majuscules выводит текст заглавными (большими) буквами, например:
[(#TITRE|majuscules)]
- justifier используется для выравнивания текста по ширине (i.e. <p align=justify>); пример:
[(#TEXTE|justifier)]
Более подробная информация по фильтрам есть в этой статье.
Отключаем встроенную обработку тегов SPIPом
SPIP обрабатывает все основные теги перед выводом - как минимум преобразовывает свою внутреннюю разметку в HTML, например символ ~ преобразуется в неразрывный пробел (NBSP).
В некоторых случаях возникает необходимость вывести информацию без этой обработки, именно в том виде, в котором она хранится в базе данных. Для этого достаточно добавить звездочку (*) сразу после имени тега, таким образом:
[ код до (#TAG*|фильтр1|фильтр2|...|фильтрn) код после ]
(подробная информация о #TAG* и #TAG**)
Теги с параметрами
Начиная с версии [SPIP 1.8] отдельные теги [1] используются с параметрами. Список параметром передается между фигурными скобками «{» и «}», в качестве разделителя между ними используется запятая. Например: #ENV{lang,fr}
.
Параметром может быть константа или другой SPIP тег, но теги могут использоваться лишь в простой записи: без опционального кода или фильтров.