SPIP Cookbook. Сборник готовых решений

Сборник готовых рецептов по решению самых распространенных проблем при установке сайта на 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"><:accuel:></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"><:accuel:></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,''})]"

Задание определенного класса если мы выбираем из массива

[(#ID_ARTICLE|in_array#ENVarticles|oui) class="on"]

Вывод вставки каждые три итерации блока

[(#COMPTEUR_BOUCLE|modulo{3}|=={0}|?{'<div class="clear"></div>'})]

Вывод элемента в зависимости от текущего языка

В данном случае у рубрики 1133 задан язык арабский, и мы проверяем если совпадает текущий язык с арабским, то выводим одно, если нет - то другое.

<BOUCLE_arlang (RUBRIQUES) {id_rubrique=1133} {lang=#LANG} {0,1}>
        <link rel="stylesheet" type="text/css" href="elements/voltaire-#LANG.css" media="screen,print">
</BOUCLE_arlang>
</B_arlang>       
        <link rel="stylesheet" type="text/css" href="elements/voltaire.css" media="screen,print">
<//B_arlang>

Связка ключ-статья-рубрика

Надо вывести названия ключевых слов (mots) из группы 1. Для каждого ключевого слова вывести список разделов, в которых есть статьи содержащие данное ключевое слово. Список разделов должен быть отсортирован.

<BOUCLE_manufacturer_mot(MOTS) {id_groupe=1} {par id_mot}>
<div class="right_title"><span>#TITRE</span></div>
<ul>
[(#REM) Определили, какие статьи с ключем "решение для..."]
[(#REM) для этих статей отобрали уникальные id_rubrique {fusion id_rubrique}]
[(#REM) Сохранили их в массив, для того, что бы при выводе мы могли задавать порядок вывода]

#SET{rubs, #ARRAY}
<BOUCLE_art_mot(ARTICLES) {id_mot} {id_secteur=3} {fusion id_rubrique}>
#SET{rubs, #GET{rubs}|push{#ID_RUBRIQUE}}
</BOUCLE_art_mot>
[(#REM) Вывели из массива]       
<BOUCLE_rub_mot(RUBRIQUES) {id_rubrique IN #GET{rubs}} {par num titre}>
<li><a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a></li>
</BOUCLE_rub_mot>
</ul>
</BOUCLE_manufacturer_mot>

Как вывести статьи у которых заполнено поле #TEXTE

Используем в запросе критерий {!texte LIKE ''}

наверх