Quel est le Webmestre qui n’a pas eu besoin un jour de faire une variante de rubrique ou de toute autre page de son site ? Ensuite se pose la question de faire partager cette variante.
Un moyen simple de partage est le fichier séparé, un squelette de page, plutôt qu’un morceau de code à insérer quelque part. Spip le permet de plusieurs manières :
- avec un numéro de rubrique comme dans article-XX.html, rubrique=XX.html
- de manière indirecte avec boucle et mot-clé : si le squelette de page invoqué est flanqué d’un certain mot-clé, la boucle pourra inclure le squelette spécialisé (la variante) au lieu du squelette standard.
Malheureusement cette dernière solution n’est pas normalisée , d’où cette proposition de convention d’échange entre fournisseur de squelette et client. Elle permettra d’intégrer immédiatement des squelettes de page dans des squelettes de site.
Convention
Ce qui est indiqué ci-après pour les articles est transposable à n’importe quel autre squelette de page (rubrique , brève...). La version de Spip minimum est 1.8.2e.
Coté fournisseur
- donner un nom si possible unique à la variante ; par exemple walma3
- nommer le squelette d’après le nom de variante soit très exactement : article-walma3.html (on aurait de manière analogue rubrique-walma3.html pour une rubrique
- éviter d’utiliser la balise #SELF si la variante doit se référencer elle-même (cas des squelettes ayant à transférer des paramètres). En effet, #SELF irait référencer article.html au lieu de article-walma3.html. A la place de #SELF il faudra donc désigner la page de manière explicite soit directement (page.php3 ?fond=article-walma3) soit par la balise #PAGE{walma3}
si l’on a besoin d’utiliser des filtres.
- joindre le code de la balise #PAGE si besoin
Coté client
En condition préalable, le site client devra comporter :
- une boucle de sélection de variante dans article.html
- le cas échéant, le code de #PAGE dans mes_fonctions.php3
Cette préparation, décrite en annexe, sera à faire une fois et permettra d’accueillir plusieurs variantes.
On mettra en service une variante simplement en :
- créant le mot clé walma3
- déposant article-walma3.html dans son dossier squelettes
Après quoi les rédacteurs n’auront plus qu’à opter pour la variante avec un simple ajout de mot-clé à leur article
Annexe
Exemple de sélecteur
Un exemple de code pour la sélection de variante dans article.html. Ici on a choisi de regrouper les mots-clés de variante dans un groupe _Article pour lequel il est conseillé de cocher le choix d’unicité.
<BOUCLE_extension (ARTICLES){id_article}{type_mot==_Article}>
[(#REM) Appel d'une variante ]
<BOUCLE_ext(MOTS){id_article}{type=_Article}{0,1}>
<INCLURE(page.php3){fond=article-#TITRE}{id_article}{debut_page}>
</BOUCLE_ext>
</BOUCLE_extension>
.... le squelette standard d'article.....
<//B_extension>
On voit bien ici : article-#TITRE comment est construit le nom de variante, avec #TITRE comme nom du mot clé associé à l’article.
On peut faire la boucle de manière différente, l’essentiel étant de déclencher l’inclusion du bon squelette avec le mot-clé.
La balise #PAGE
Le code de la balise #PAGE à insérer facultativement dans mes_fonctions.php3. Cette balise ne préjuge pas du type de squelette et fonctionnera aussi bien pour des rubriques, brèves etc.
function balise_PAGE($p) {
if ($a = $p->param) {
$sinon = array_shift($a);
if (!array_shift($sinon)) {
$p->fonctions = $a;
array_shift( $p->param );
$nom = array_shift($sinon);
$nom = ($nom[0]->type=='texte') ? $nom[0]->texte : "";
}
}
if (!$nom) {
// #PAGE sans argument : idem #SELF
$p->code = 'quote_amp($GLOBALS["clean_link"]->getUrl())';
} else {
ereg("\?(.*)$", quote_amp($GLOBALS["clean_link"]->getUrl()), $regs);
$p->code = '\'page.php3?fond='.$nom.'&'.$regs[1].'\'';
}
$p->statut = 'php';
return $p;
}
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |