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