Теги и их синтаксис

Все циклы возвращают записи (информацию) из базы данных: о статьях, разделах, авторах и т.д.Каждая запись содержит поля: название, дату, вводный и основной текст, и многие другие. Для того, что бы отобразить эту информацию в 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 тег, но теги могут использоваться лишь в простой записи: без опционального кода или фильтров.

Примечания

[1#ENV и #EXPOSER

Автор Serge Markitanenko Publié le : Mis à jour : 21/03/23

Traductions : عربي, català, Deutsch, English, Español, français, italiano, Nederlands, òc lengadocian, русский, українська