SPIP 2, prêt à bondir !

, par Matthieu Marcillaud

La sortie de SPIP 2 s’annonce plus que jamais imminente. Cet article va essayer de compléter quelques points oubliés dans les 2 articles précédents (SPIP 2 se prépare et SPIP 2 se prépare (suite)).

Not not not ! I want it !

A propos de l’écriture des squelettes SPIP, un certain nombre de points ont été sensiblement améliorés suite à l’écoute attentive des créateurs de sites.

Une demande qui revenait souvent était de pouvoir « Afficher les articles qui n’ont pas le mot clé "X" ».

Facile dites-vous ? Une petite boucle :

  1. <BOUCLE_art(ARTICLES){titre_mot != 'X'}> ...

Oui, mais attention ! Dans cette boucle, le compilateur va afficher tous les articles qui ont au moins un mot clé soustraits de ceux n’ayant qu’un seul mot clé intitulé ’X’...

C’est parfois ce que l’on cherche, mais pas tout le temps... Ainsi, dans ces cas là, si un article n’a pas de mot clé, il n’est pas affiché. A l’inverse, s’il possède le mot clé ’X’ et un autre mot, alors il est affiché.

Dans certains cas, on souhaite plutôt dire « affiche tous les articles, sauf ceux liés à un mot clé ’X’ »

Comment fait-on ? On boucle sur tous les articles ayant le mot clé souhaité, sans rien afficher, puis on effectue une deuxième boucle qui ne tient pas compte des articles déjà présentés (dans la première boucle) grâce au critère doublons. Ce qui donne :

  1. <BOUCLE_pas_ce_mot(ARTICLES){titre_mot = 'X' }{doublons}> </BOUCLE_pas_ce_mot>
  2. <BOUCLE_art(ARTICLES){doublons}> ...

Télécharger

SPIP 2 introduit une nouvelle syntaxe pour celles et ceux qui aiment ces relations compliquées :

  1. <BOUCLE_articles(ARTICLES){!titre_mot = 'X'}> ...

Pour résumer : {titre_mot != 'X'} est différent de {!titre_mot = 'X'}. Le premier affiche tous les articles ayant un mot clé, sauf ceux ayant uniquement le mot ’X’. Le second affiche les articles qui ne sont pas liés au mot-clé ’X’ (cela inclus donc ceux qui ne sont liés à aucun mot).

Les mots étaient un exemple, on peut bien sûr utiliser d’autres champs SQL. Question : que fait la boucle suivante en SPIP 2 ?

  1. <BOUCLE_rub(RUBRIQUES){!articles.titre == '^[Ll]'}> ...

Réponse : Elle sélectionne les rubriques qui n’ont aucun article dont le titre commence par un « L » ou un « l ». Attention tout de même, cette requête utilisant une expression régulière (^[Ll]) nécessite beaucoup de calculs pour les gestionnaires de bases de données (MySQL ou un autre) et pourrait donc être gourmande en temps.

Doublon d’houblons

Parfois il est intéressant de transmettre les doublons créés dans des inclusions, des noisettes. Ceci était totalement impossible avant SPIP 2. Maintenant, toute inclusion « statique » via la balise #INCLURE peut obtenir les doublons de la page qui l’appelle en transmettant le parametre {doublons}. L’inverse, par contre, à savoir que la page appelée puisse transmettre des doublons créés en son sein au squelette qui l’appelle, n’est pas possible.

Un exemple simple de noisette qui va être appelée : noisettes/bieres.html

  1. <BOUCLE_5_autres_bieres(ARTICLES){doublons houblon}{0,5}>
  2. - #TITRE<br />
  3. </BOUCLE_5_autres_bieres>

Télécharger

Appelée par ce squelette :

  1. <BOUCLE_5_bieres(ARTICLES){doublons houblon}{0,5}>
  2. - #TITRE<br />
  3. </BOUCLE_5_bieres>
  4.  
  5. [(#INCLURE{fond=noisettes/bieres}{doublons})]

Télécharger

Conjuguer le conditionnel...

Il devenait de plus en plus fréquent de devoir tester certains paramètres de balises afin de conditionner tel ou tel affichage. Avant SPIP 2.0, un des outil proposé était le filtre |?{si oui, si non}, souvent utilisé de la sorte :

  1. [(#SOUSTITRE|substr{0,4}|=={abcd}|?{'Le sous titre commence par les lettres «abcd»','Le sous-titre est autre chose !'})]

Ou encore :

  1. [(#SOUSTITRE|substr{0,4}|=={abcd}|?{' '})
  2. Le sous titre commence par les lettres «abcd»
  3. ]
  4. [(#SOUSTITRE|substr{0,4}|=={abcd}|?{'',' '})
  5. Le sous titre est autre chose...
  6. ]

Télécharger

SPIP 2 dispose maintenant de nouveaux filtres pour gérer les conditions sur les balises, qui permettent une meilleure lisibilité et compréhension du code. Arrive ainsi |oui (équivalent de |?{' '}, |non équivalent de |?{'',' '}, |et, |ou, |xou.

oui

  1. [(#TITRE|strlen|>{30}|oui) Ce titre est long ]

non

  1. [(#CHAPO|non) Il n'y a pas de chapo ]

et : l’un et l’autre

  1. [(#CHAPO|et{#TEXTE}) Il y a un chapo, et un texte ]
  2. [(#CHAPO|et{#TEXTE}|non) Il n'y a pas les deux ensemble ]

Télécharger

ou : l’un ou l’autre

  1. [(#CHAPO|ou{#TEXTE}) Il y a soit un chapo, soit un texte, soit les deux ]
  2. [(#CHAPO|ou{#TEXTE}|non) Il y a ni chapo, ni texte ]

Télécharger

xou : indique l’un ou l’autre, mais pas aucun, ni les deux.

  1. [(#CHAPO|xou{#TEXTE}) Il y a soit un chapo, soit un texte (mais pas les deux, ni aucun) ]
  2. [(#CHAPO|xou{#TEXTE}|non) Il y a soit rien, soit tout, mais pas l'un des deux ]

Télécharger

Par ailleurs, SPIP comprendra les équivalent anglais « yes », « not », « or », « and » et « xor »

Et traduire toujours mieux

Outre des outils spécifiques sur la zone de développements de plugins (salvatore) pour faciliter les traductions des développements, SPIP 2 permet maintenant de passer certains paramètres aux chaines de langues depuis les squelettes.

Pour utiliser une chaîne de langue, il suffit de connaitre son code, par exemple : <:bouton_telecharger:> ou si cela provient d’un plugin <:notations:note_ponderee:>.

Ce que permettaient les fonctions PHP de SPIP, c’est de donner des arguments, qui sont alors remplacés dans les chaines de langues, par exemple :

  1. echo _T('plugin_necessite_lib', array('lib',$librairie));

Cette ligne va chercher dans les fichers de langue l’entrée « plugin_necessite_lib » et va remplacer la chaine de caractères « @lib@ » par le contenu de la variable $librairie.

Pour réaliser la même chose dans un squelette SPIP 2, voici comment procéder. Rien de bien sorcier :

  1. <:machaine_de_langue{cle, valeur}:>
  2.  
  3. Qui pourrait donner :
  4. <:plugin_necessite_lib{lib,#ENV{librairie}}:>
  5.  
  6. Ou encore
  7. <:mediatheque:total_documents{total, #TOTAL}:>

Télécharger

Favicon automatique

SPIP pouvant applatir maintenant des images en format .ico, il est possible (ce que propose les squelettes par défaut) de créer le fichier favicon (l’icone qui s’affiche à gauche de l’adresse du site dans votre navigateur) automatiquement à partir du logo de votre site. C’est ce que propose le code suivant :

  1. [(#REM) Lien vers l'icone destinee a la barre de bookmarks, au format .ico ]
  2. [<link rel="shortcut icon" href="(#ENV*{favicon}
  3. |sinon{#CHEMIN{favicon.ico}}
  4. |sinon{#LOGO_SITE_SPIP}
  5. |image_passe_partout{32,32}
  6. |image_recadre{32,32,center}
  7. |image_format{ico}|extraire_attribut{src}
  8. |sinon{#CHEMIN{spip.ico}})" type="image/x-icon" />]

Télécharger

Ce code agit ainsi :

  • si un fichier « favicon.ico » existe, il est utilisé
  • sinon on calcule un favicon à partir du logo du site s’il existe
  • sinon on prend celui de SPIP

Préparez-vous !

Oui, quelques sources prédisent une sortie vraiment proche... Alors, sait-on jamais... Préparez vos claviers et vos articles !

Coup de pouce

Pour me maintenir en éveil et en pleine forme physique et mentale, vous pouvez me faire le cadeau d'un jus de fruit pressé.

En plus de m'hydrater, de m'offrir une alimentation saine crudivore et frugivore, cela peut aussi me motiver à produire d'autres documentations ou peut-être à prendre des vacances ! :)

Vous pouvez également me « Flattrer » si vous utilisez le service en ligne très malin Flattr de microdonations qui permet d'allouer un budget mensuel à des créateurs de contenu. Votre budget est partagé chaque mois entre toutes les personnes que vous avez flattées ce mois là.