guiderdoni.net

Bloc notes : spip, css, xhtml, web, standards, mac ...

Accueil > Spip > Un squelette spécifique pour un article grâce aux filtres de test

Articles de cette rubrique

Articles

publie le mardi 13 février 2007 par Alexandra

Un squelette spécifique pour un article grâce aux filtres de test

Objectif :

Soit une rubrique spéciale qui a l’id rubrique=26.
Un squelette spéciale pour les articles de la dite rubrique : article=26
Dans cette rubrique plusieurs articles, id 52, id 53, id 54 etc...
On veut une page spéciale pour l’article id 52 seulement.

Solutions

1. Pour ce genre de choses, la gestion des squelettes par mot clé est une bonne solution.

Cf le plugin squelette par mot clé.

2. Faire un squelette article-toto.html pour l’article spécifique à l’id 52

Dans article=26.html, squelette des articles de la rubrique 26, mettre uniquement les lignes de codes qui suivent.

Avoir un squelette article.html

Syntaxe donnée sur user par Spipcarto
- En old-style :

[(#ENV{id_article}|choixsiegal{52,' ',''})
<INCLURE{fond=article-toto}{id_article}>]

[(#ENV{id_article}|choixsiegal{52,'',' '})
<INCLURE{fond=article}{id_article}>]

- En new style

[(#ENV{id_article}|=={'339'}|?{' ',''})
     <INCLURE{fond=article-toto}{id_article}>]

[(#ENV{id_article}|=={'339'}|?{'',' '})
<INCLURE{fond=article}{id_article}>]

Attention : Penser à donner le contexte de l’inclure en passant les paramètres que l’on doit "propager" :
{id_article}{self=#SELF}

Explications données par Job

Grâce au premier filtre (#ENV{id_article}|=={'52}|?{' ',''}) renvoie un espace (cad quelque chose de différent de rien) si id_article = 52 et rien si id_article est différent de 52.

Le petit "espace" a pour effet d’activer le <INCLURE{fond=article-carte}>

La second filtre est exactement l’inverse

Boucle conditionnelle en fonction d’une rubrique

Dans ce type de filtres conditionnels, une boucle ne passe pas.
Il fait mettre cette boucle dans un inclure.

[(#ID_RUBRIQUE|=={7}|?{' ',''})
[(#INCLURE{fond=inc-truc}{id_rubrique})]
]

Voir aussi l’article un squelette spécifique pour un article isolé et son forum pour les versions antérieures de SPIP 1.9.

Je rêvais que SPIP traite les articles comme les rubriques, à savoir article11.html, squelettes spécifique à l’id article 11 et XDJUJ l’a fait :

- Soit le squelette article.html avec le code suivant :

#SET{matrice_article,article}
<BOUCLE_Article(ARTICLES){id_article}>
[(#CHEMIN{noisettes/articles/article[(#ID_ARTICLE)].html}|oui)
#SET{matrice_article,article#ID_ARTICLE}
]
[(#INCLURE{fond=noisettes/articles/#GET{matrice_article}}{env})]
</BOUCLE_Article>
[(#INCLURE{fond=noisettes/articles/#GET{matrice_article}}{env})]
<//B_Article>

- et soit un répertoire noisettes/articles dans squelettes (squelettes/noisettes/articles)
- avec dedans le squelettes article.html (squelette générique)
- et article11.html pour le squelette dédié à la rubrique 11

Si donc article 11 existe dans noisettes on le prend, et s’il n’existe pas on prend l’article générique qui se trouve lui-même aussi dans noisettes, et de la sorte il n’y a aucun risque pour les articles de la rubrique 11 chope ce squelette, puisque dans ce cas là, le squelette article=11.html doit être dans le répertoire squelettes. Merci XDjuj, c’est vraiment terrible !

Autre méthode en jouant du #SET et du #ARRAY

[(#SET{squelette_specifique, #ARRAY{0,10,11,12}})]
<BOUCLE_principale(ARTICLES){id_article} {id_article !IN #GET{squelette_specifique}} >
</BOUCLE_principale>
[(#ENV{id_article}|in_array{#GET{squelette_specifique}}|oui)
<INCLURE{fond=article#ENV{id_article}, env} />
<//B_principale>

Plus d’info sur les filtres de tests

La doc officielle

L’excellent article de Cent20

Un très bon article de Yoann sur le filtres sioui sinon et filtres de test

- Les traitements conditionnels avec SPIP :
Excellent article de bb.

- Filtres de test sur un ou plusieurs documents attachés à l’article

Forum

Répondre à cet article

6 commentaires

Un squelette spécifique pour un article grâce aux filtres de test

Toggg sur user proposait également ceci.

Tu pourrais séparer le corps des articles, du moins ce qui diffère entre normal et 3445 dans 2 sous-squelettes, mettons corps-article.html et corps-3445.html que tu inclues conditionnelement dans ton article.html grâce à un test sur id_article

Eventuellement aussi en SPIP 1.9, on peut utiliser #INCLUDE si les délais des pages sont les
mêmes, dans ce cas il doit même être possible de mettre les includes directement dans le test, sauf erreur :

7 mars 2007 - repondre message

Un squelette spécifique pour un article grâce aux filtres de test

Bonjour,

J’ai testé la contribution et elle fonctionne bien pour l’article en question, mais les autres articles de la même rubrique ne s’affichent plus "Impossible d’afficher la page " !

Merci d’avance pour vos lumières !

4 mai 2007 - repondre message

Même problème...

> test googlemaps : http://www.ailleursloin.free.fr/spip (...)

6 mai 2008 - repondre message

Un squelette spécifique pour un article grâce aux filtres de test

Bonjour
Je viens d’appliquer le filtre de test présenté dans cet article sous spip 1.9.2e. Dans mon cas, je souhaite appliquer le squelette article-presse.html pour l’article 25 de la rubrique 14 et le squelette standard pour les autres articles de cette rubrique. J’ai donc créé rubrique=14.html avec les 4 lignes de code suivantes :

[(#ENV{id_article}|=={'25'}|?{' ',''})
    <INCLURE{fond=article-presse}{id_article}>]
[(#ENV{id_article}|!={'25'}|?{' ',''})
    <INCLURE{fond=article}{id_article}>]

Je parviens à bien afficher le squelette article-presse à l’article 25. Par contre j’ai une page blanche pour les autres articles de la rubrique (blanche blanche pas un seul bout de début de qui que ce soit ne s’affiche).
Par contre le squelette article fonctionne puisque je peux l’utiliser pour toutes les autres pages du site.

J’ai tourné ça dans tous les sens. Je bulle. Quelqu’un peut-il me donner une piste ou la solution ?

Merci

21 décembre 2008, par baobab14 - repondre message

Après plusieurs essais, j’ai trouvé la solution pour que les articles s’affichent :

  • Copie du fichier article.html en article_rub14.html
  • Création d’un fichier article_25.html avec le squelette spécifique
  • Création d’un fichier article=14.html avec :
    [(#ENV{id_article}|=={'25'}|oui)
     <INCLURE{fond=article_25}{id_article}>]
    [(#ENV{id_article}|=={'25'}|non)
     <INCLURE{fond=article_rub14}{id_article}>]

Et là, miracle ça marche !
Je n’ai pas compris pourquoi je dois copier article.html !

10 août 2009, par plumpcat - repondre message

Un squelette spécifique pour un article grâce aux filtres de test

Bien vu les squelettes "par article" (traité comme des rubriques avec un article.html aiguilleur) :-)

Merci beaucoup pour l’info très utile pour moi et merci à l’auteur !!

Manu

4 octobre 2009, par Manu - repondre message
2005-2017 - Contenu en GPL http://www.guiderdoni.net - Site réalisé avec SPIP 
rechercher - plan du site - prive - alexandra.guiderdoni@gmail.com
CSS - XHTML - squelette