SPIP. Часто используемые блоки

Уже несколько лет мы создаем сайты в основном используя CMS SPIP. И накопилось немного стандартных приемов, блоков и заготовок.

Вывод пункта меню

Меню на основе разделов

<li><a href="#URL_RUBRIQUE" [title="(#TITRE|supprimer_numero)"]>[(#TITRE|supprimer_numero)]</a></li>

Меню на основе статей

<li><a href="#URL_ARTICLE" title="#TITRE">#TITRE</a></li>

Критерий для вывода разделов которые начинаются с цифры

Обычно, каждый раздел, иногда статья имеет порядковый номер. Кроме как задавать порядок вывода его можно использовать для для скрытия/открытия пунктов меню при помощи такого критерия:
{titre==^[[:digit:]]}

Вывод языковых версий сайта

Если каждая языковая версия сайта находится в корневой папке,
то мы просто выводим названия языков этих разделов.

<div class="language">
<BOUCLE_languages(RUBRIQUES) {racine} {par num titre} {titre==^[[:digit:]]}>
[<a href="#URL_SITE_SPIP?lang=#LANG" [title="#NOM_SITE_SPIP - (#TITRE|supprimer_numero|textebrut)"]>(#LANG|traduire_nom_langue)</a>]
</BOUCLE_languages>
</div>

Подключения функционала по ключевому слову

Кейворды очень удобно использовать для настроек внешнего вида и поведения статей. В данном примере я создал группу ключевых слов "Служебные", и ключевое слово id_mot=1, которым я регулирую выводить или нет форму обратной связи для этой статьи.

<BOUCLE_feedback(MOTS) {id_article} {id_mot=1} {0,1}> #FORMULAIRE_FEEDBACK</BOUCLE_feedback>

Фотогаллерея

Причем сразу с поддержкой lightbox. Поддержка обеспечивается rel=lightbox.

<B_gallery>
<h3>Фотогаллерея</h3>
<BOUCLE_gallery(DOCUMENTS) {id_article}{extension==jpg|png|gif} {mode=document} >
<div class="gallery-item">
[<a href="#URL_DOCUMENT" title="#TITRE" rel="lightbox">(#LOGO_DOCUMENT|image_reduire{150,0})</a>]
</div>
</BOUCLE_gallery>

Доступ к элементу из внешнего запроса

Ключевой момент - #_rubs:TITRE,этот тег выводит #TITRE рубрики из цикла _rubs.

<BOUCLE_rubs(RUBRIQUES)>
 <ul>
   <BOUCLE_arts(ARTICLES){id_rubrique}>
     <li>#_rubs:TITRE - #TITRE</li>
   </BOUCLE_arts>
 </ul>
</BOUCLE_rubs>

Путь

Путь к текущей странице (разделу). При необходимости легко переделать на статью.

<div class="pathway">
<a href="#URL_SITE_SPIP"><:accueil_site:></a>
<BOUCLE_pathway(HIERARCHIE) {id_rubrique}>
<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
</BOUCLE_pathway>
<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
</div>

Если у нас так организована структура сайта, что в корневые папки - это языковые версии сайта, то часто не надо выводить это в пути, тогда запрос меняется следующим образом(фактически мы добавляем LIMIT 1,100):

<div class="pathway">
<a href="#URL_SITE_SPIP"><:accueil_site:></a>
<BOUCLE_pathway(HIERARCHIE) {id_rubrique} {1,100}>
<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
</BOUCLE_pathway>
<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
</div>

Вывод из двух разделов одновременно

Часто надо выводить последние статьи из двух разделов и вложенных подразделов с сортировкой по дате. Вариант - выводим сначала из одного, а потом из второго - не подходит. Тогда используем массив и получаем такой код.

#SET{rubs, #ARRAY}
<BOUCLE_list (RUBRIQUES) {id_parent IN 4,8}>
#SET{rubs, #GET{rubs}|push{#ID_RUBRIQUE}}
</BOUCLE_list>

<ul>
<BOUCLE_last (ARTICLES) {id_rubrique IN #GET{rubs}} {par date} {inverse} {0,5}>
<li><a href="#URL_ARTICLE" title="#TITRE">#TITRE</a></li>
</BOUCLE_last>
</ul>

Вывод таблицы (по рядам)

Выводим элементы по 3 штуки в ряд.

<table>
<B_row>
<tr>
<BOUCLE_row (ARTICLES) {id_rubrique=5} {doublons} {par date} {0,3}>
<td  background="IMG/[(#LOGO_ARTICLE|fichier)]" >
<a href="#URL_ARTICLE">#TITRE</a>
</td>
</BOUCLE_row>
</tr>
<BOUCLE_row_again (BOUCLE_row)></BOUCLE_row_again>
</B_row>
</table>

Задание определенного класса ссылке на текущую рубрику

Используем при выделение цветом текущей ссылке в меню.

class="[(#ID_RUBRIQUE|=={#_main:ID_RUBRIQUE}|?{on,''})]"

Вывод #TEXTE если пустое #CHAPO

[(#CHAPO|?{#CHAPO,[(#TEXTE|couper{200})]})]

Ссылка на логотип с лайтбоксом

[<a href="#URL_SITE_SPIP/IMG/[(#LOGO_ARTICLE|fichier)]" title="#TITRE" rel="lightbox">(#LOGO_ARTICLE|image_reduire{205,0}|inserer_attribut{alt, #TITRE})</a>]

Ставим разделитель каждые 5 записей в BOUCLE

<BOUCLE_list(ARTICLES) {id_rubrique}>
[(#COMPTEUR_BOUCLE|modulo{5}|=={0}|oui) Разделитель]
</BOUCLE_list>

Задаем последнему элементу в цикле отдельный класс

<B_art>
<ul>
<BOUCLE_art(ARTICLES){id_rubrique=1}>
<li><a href="#URL_ARTICLE"
[(#TOTAL_BOUCLE|=={#COMPTEUR_BOUCLE}|?{"class=last",""})] >
#TITRE
</a></li>
</BOUCLE_art>
</ul>
</B_art>