Carnet Wiki

Astuces SPIP

Version 125 — June 2012 touti

Contenu? [1] : UTF8 FAVICON BOUTONS PLUGINS CSS BALISES FILTRES CRITERES AUTORISATIONS MES_OPTIONS SQUELETTES MODELES LANG TYPO

<blockquote class="spip">

Attention, cette page concerne uniquement des astuces SPIP courtes.

Les astuces longues ont été déplaçées ici, sans oublier PasDansLaDoc. Merci de vous rendre dans la partie privé pour lire les règles de publication dans le forum attaché à cet article.

</blockquote>

Usage de cette page pour les ajouts

Veuillez noter qu’une astuce courte est faite de 1 à 3 lignes maximum au-delà, merci de déplacer votre astuce dans les astuces longues car la page sera impossible à maintenir!


UTF8

-  Convertir sa base en UTF-8 :

À utiliser pour une recherche alphabétique exacte ou pour avoir une jolie base dans PHPMyadmin. Passer par un code caché : ?exec=convert_sql_utf8 pour convertir sa base en UTF-8 (http://archives.rezo.net/archives/s...)

<blockquote class="spip">

plutôt utiliser le critère {collecte...}. À voir sur le glossaire de spip.net

</blockquote>

Retour..


BOUTONS

-  Créer un bouton de déconnexion avec la balise #BOUTON_ACTION :

Description de la balise #BOUTON_ACTION

La balise #BOUTON_ACTION est décrite dans la doc SPIP.
Le second paramètre est l’url de l’action, qui sera #URL_LOGOUT

Redirection après déconnexion

La balise #URL_LOGOUT accepte un paramètre qui est l’url de redirection après déconnexion.

Exemple de bouton de déconnexion avec redirection vers une page spécifique :

[(#BOUTON_ACTION{<:proposer_logout:>, #URL_LOGOUT{#URL_PAGE{mon_compte}}, 'logout', <:confirmer_logout:>})]

La balise #URL_LOGOUT n’accepte pas d’autre paramètre : http://core.spip.org/issues/2471

Retour..


FAVICON

Les squelettes de Spip acceptent automatiquement une icône (un fichier .bmp 16 ou 256 couleurs, en format 16x16 ou 32x32 pixels) nommée favicon.ico pour le site public ; pour remplacer l’icône Spip grise dans l’interface privée (pratique quand on intervient simultanément sur plusieurs sites sous SPIP), il suffit de la poser en fichier “spip.ico” dans votre dossier de squelettes.

Retour..


PLUGINS

-  Trouver si un plugin est là :

dans un squelette 1.9.2 : [(#EVAL{DIR_PLUGIN_PREFIX}|?{' ',”}) Mon action ]
depuis SPIP 2 : [(#PLUGIN{XXX}) Mon action ]
en php : if (defined('_DIR_PLUGIN_XXX')){ ... }

-  Récupérer le chemin d’un plugin dans un squelette :

#SET{cheminmonplugin, #EVAL{_DIR_PLUGIN_MONPLUGIN}}
#GET{cheminmonplugin}

-  Adopter plutôt une numérotation x.y.z comme numéro de version

z est incrémenté sur une correction
y sur une évolution fonctionnelle
x sur une incompatibilité avec les version précédentes.

exemple : version plugin 1.3.8

Retour..


CSS

-  Pipeline automatique de CSS dans un plugin :

style_public_plugin_xxx.html et, pour l’espace privé : prive/style_prive_plugin_xxx.html

-  Faire un CSS qui soit un squelette (cela permet de récupérer des variables) :

[(#REM) dans la page monstyle.html et en première ligne ]
#HTTP_HEADER{'Content-Type: text/css'}
.couleurdefond {
  background-color:green;
  [(#ENV{id_article}|={33}|?{background-color:pink;})]
}

Appeler la CSS dans une page SPIP

[(#REM) dans la page article.html par exemple cela retournera /?page=styles&id_article=33]
<link rel="stylesheet" type="text/css" href="[(#URL_PAGE{monstyle}|parametre_url{id_article,[(#ENV{id_article})] )]" />
...
<div class="couleurdefond">
change ici la couleur de fond en rose si article=33
</div>

Retour..


BALISES

Quand on crée une balise, on peut vouloir récupérer des variables du contexte (il y a un article déjà sur contrib qui explique cela) ; mais quand on veut trouver le «type» de boucle du contexte, il faut aller le chercher dans la pile $p :

$p->boucles[$p->id_boucle]->id_table

Compter le nombre de liens signalés dans un article
Meme pas nécessaire de batir une regex, juste
[Liens cités: (#PS|extraire_balises{a}|count)    ....]

Intégrer une balise à une expression
Pour afficher une chaine contenant une expression avec une balise

#SET{ma_variable,#VAL{'chaine avant le titre '}|concat{#TITRE}|concat{'
a la fin'}}

Retour..


FILTRES

-  Utiliser |textebrut pour compter la chaîne correctement, sinon l’apostrophe compte 5 :

[(#TITRE|textebrut|strlen|>{30}
|et{[(#TITRE|textebrut|strlen|<{60})]}|oui)
[(#INTRODUCTION|PtoBR|couper{85})] 
]

-  |unique dans un modèle :

Un modèle inséré dans un texte ne peut pas simplement appeler le filtre |unique car il arrive que SPIP calcule plusieurs fois le #TEXTE (par exemple pour les besoins de #INTRODUCTION) et l’environnement de |unique n’est pas réinitialisé à chaque fois...
Pour ces besoins, on utilisera un «unique nommé», avec un nom généré dynamiquement de manière ... unique à chaque fois : #SET{ident, #REM|uniquid} ; puis utiliser |unique{#GET{ident}}.

-  Utiliser |replace pour créer l’équivalent d’un sprintf dans la définition d’un #SET utilisé dans une boucle itérateurs (_fil_ et BoOz sur irc) :

#SET{req, #VAL{"
  SELECT a.truc_1,
         s.truc_2,
         s.truc_x
    FROM spip_matable s,
         spip_auteurs a
   WHERE a.id_auteur = s.id_auteur
     AND date_format(s.truc_x, '%Y %m %d') = '%s'
ORDER BY s.truc_x desc
   LIMIT 0, 100
"}|replace{'%s', #ENV{ladate}}}

<BOUCLE_rech(DATA) {source sql, #GET{req}}>
  ...

-  N’afficher que les images d’un texte :

<BOUCLE_f(ARTICLES) {id_article}>
  #SET{tab_img, #TEXTE|extraire_balises{img}}
  [(#GET{tab_img}|implode{'<br />'}|image_reduire{150})]
</BOUCLE_f>

Retour..


CRITÈRES

-  critères sur un titre numéroté

MYSQL ne comprend pas les raccourcis \s et \d dans une regexp, on ne peut donc pas les utiliser.

{titre==^[[:digit:]]+[.)][[:space:]]+[[:alnum:]]}

ou

{titre==^([0-9]+\. +)?[Aa]}

-  Critère conditionnel, sans parenthèses ni crochets, seulement des bisoux, euh, des accolades... :

<BOUCLE_seulement_pour_la_rubrique_dix(RUBRIQUES) {id_rubrique=#ID_RUBRIQUE|=={10}|?{10}}>

-  Afficher les articles ayant le mot clef «truc» :

<BOUCLE_g(ARTICLES) {titre_mot=truc}>

{titre_mot} étant obsolète on écrit désormais :

<BOUCLE_g(ARTICLES) {mots.titre}>

-  Le critère {par multi titre} permet de trier les titres alphabétiquement quand ils utilisent la balise multi pour le multilinguisme.

-  Le critère {fusion} pour faire un index :

on veut faire un index des titres d’articles, donc récupérer leur première lettre :

<BOUCLE_index(ARTICLES) {fusion SUBSTR(titre, 1, 1)} {" - "}>
[(#TITRE|mb_substr{0, 1})]
</BOUCLE_index>

-  Le critère {fusion} permet de faire un «GROUPBY» :

exemple sur un fil RSS, pour éviter des articles de même nom, on peut faire :

<BOUCLE_syndic(SYNDIC_ARTICLES) {fusion titre} {0, 10}>

On peut également faire une fusion pour avoir les articles tous issus de sites différents :

<BOUCLE_syndic(SYNDIC_ARTICLES) {fusion syndic_articles.id_syndic}>

-  Un simple {statut?} dans une boucle annule la restriction de statut sur la boucle document (comme sur une boucle article), on peut aussi demander {statut=prepa}

-  Utiliser un critère optionnel, et demander le critère via l’url :

<BOUCLE_articles(ARTICLES) {branche ?} {id_mot ?} {id_auteur ?}>

-  Limiter l’affichage des mots-clés liés seulement aux rubriques (ou articles) :

<BOUCLE_grmots(GROUPES_MOTS){id_groupe?}{tables_liees=rubriques}>
    <h3>#ID_GROUPE. <i>Groupe:</i> <a href="#URL_PAGE{groupmot,id_groupe=#ID_GROUPE}">#TITRE</a>. </h3> 
    <B_mot><ul>
    <BOUCLE_mot(MOTS){id_groupe}{par num titre, titre}{" - &nbsp; "}>
        #SET{total,0} 
        <BOUCLE_desmotscles(RUBRIQUES){id_mot}>
            #TITRE
        </BOUCLE_desmotscles>
        #SET{total,#GRAND_TOTAL}
        </B_desmotscles>
        <a href="#URL_MOT">#TITRE </a> 
        [(#GET{total}|choixsiegal{0, "", [ ((#GET{total}))]})]
        </BOUCLE_mot>
        </ul></B_mot>
</BOUCLE_grmots>
<//B_grmots>


Mais attention, le champ #TABLES_LIEES etant eventuellement multi-valué (!), cette astuce ne vous affichera pas les groupes de mots-clés liés aux articles et à autre chose (Spip 2) !

-  N’afficher que les articles dont le «num titre» est pair :

on considère que tous les titres des articles sont préfixés avec un nombre suivi d’un point suivi d’un espace («123. Le titre») :
<BOUCLE_art_pair(ARTICLES) par num titre titre==^ [2]*[02468][.] [3] "
"
>
#TITRE


<BOUCLE_art_impair(ARTICLES) par num titre titre==^ [4]*[13579]%

Retour à la version courante

Toutes les versions