La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Les Boucles et Balises SPIP 2.0.6 Prendre en compte les éléments et relations : Maîtriser la syntaxe et exploiter les générateurs de boucles et balises.

Présentations similaires


Présentation au sujet: "Les Boucles et Balises SPIP 2.0.6 Prendre en compte les éléments et relations : Maîtriser la syntaxe et exploiter les générateurs de boucles et balises."— Transcription de la présentation:

1 Les Boucles et Balises SPIP 2.0.6 Prendre en compte les éléments et relations : Maîtriser la syntaxe et exploiter les générateurs de boucles et balises SPIP Fichier HTML Règles CSS Boîtes imbriquées Arborescence des balises HTML Boucles et Balises SPIP Code HTML + Balises SPIP François Daniel Giezendanner, SEM (Service Ecoles et Medias) - DIP - Genève, 5 rue des Gazomètres, 1205 CH-Genève Tél: +41 22 / 388-33-14, francois-daniel.giezendanner@edu.ge.ch - Tél: +41 22 / 388-33-14, francois-daniel.giezendanner@edu.ge.ch -http://icp.ge.ch/sem/cms-spip/ Cours « Squelettes SPIP » - Mardi 21 avril et Mardi 5 mai 2009, 8h00-18h00

2 Documentation en français http://www.spip.net/spip.php?page=plan&lang=fr Ce document Powerpoint est basé sur la documentation officielle SPIP : « Documentation en français » : http://www.spip.net/fr. Lors de sa présentation, une copie papier de cette documentation est distribuée aux participants du cours. Référence : Principe général Des boucles et des balises La syntaxe des boucles La syntaxe des balises SPIP La boucle ARTICLES La boucle RUBRIQUES La boucle BREVES La boucle AUTEURS La boucle FORUMS La boucle MOTS La boucle SITES (ou SYNDICATION) La boucle DOCUMENTS Principe général Des boucles et des balises La syntaxe des boucles La syntaxe des balises SPIP La boucle ARTICLES La boucle RUBRIQUES La boucle BREVES La boucle AUTEURS La boucle FORUMS La boucle MOTS La boucle SITES (ou SYNDICATION) La boucle DOCUMENTS La boucle SYNDIC_ARTICLES La boucle SIGNATURES La boucle HIERARCHIE Les critères communs à toutes les boucles Les balises propres au site Les formulaires Les boucles de recherche Les filtres de SPIP Les boucles récursives La « popularité » des articles La gestion des dates Exposer un article dans une liste La boucle SYNDIC_ARTICLES La boucle SIGNATURES La boucle HIERARCHIE Les critères communs à toutes les boucles Les balises propres au site Les formulaires Les boucles de recherche Les filtres de SPIP Les boucles récursives La « popularité » des articles La gestion des dates Exposer un article dans une liste « Mise en page : manuel de référence » : Dont voici la table des matières http://www.spip.net/spip.php?page=plan&lang=fr Télécharger la dernière version SPIP 1.7.2 : http://www.spip.net/spip-dev/DISTRIB/

3 CSS : Quelques exemples de mise en page fluide en n colonnes CSS : Quelques exemples de mise en page fluide en n colonnes CSSnColZdUfIs_V2.ppt Téléchargement : http://icp.ge.ch/sem/cms-spip/spip.php?article166 Les CSS dans SPIP 1.7.2 Les CSS dans SPIP 1.7.2 CssSpip172Article_v04.ppt 169 Téléchargement : http://icp.ge.ch/sem/cms-spip/spip.php?article169 Avant de lire ce document et ses sources, il est profitable de consulter les documents et pages web suivants : Télécharger le présent document Powerpoint « Les Boucles et Balises SPIP 1.9.2.d » : http://icp.ge.ch/sem/cms-spip/spip.php?article403 « Mise en page : manuel de référence » : http://www.spip.net/fr_rubrique143.html Basez-vous sur le manuel de référence : Patrick VINCENT : http://www.spip-contrib.net/Support-de-formation-Creation-de Et consultez : « Support de formation - Création de sites Web sous SPIP »

4 Principe général http://www.spip.net/fr_article3437.html

5 Les objets principaux de la BdD les articles les brèves les images et les documents joints les rubriques les mots clefs les sites syndiqués les auteurs les messages internes / de calendrier les forums et les pétition... les articles les brèves les images et les documents joints les rubriques les mots clefs les sites syndiqués les auteurs les messages internes / de calendrier les forums et les pétition... les images et les documents joints Dans le répertoire /IMG/ Manipulés par les utilisateurs :

6 Les autres objets de la BdD L'indexation du contenu (moteur de recherche) Les statistiques de visite L'indexation du contenu (moteur de recherche) Les statistiques de visite Créés automatiquement par le système : La version du système Les options fonctionnelles : forums, révisions, l'orthographe, prévisualisation, etc. La version du système Les options fonctionnelles : forums, révisions, l'orthographe, prévisualisation, etc. Les métadonnées

7 Reconnaître un objet 1. L'identifier parmi la liste des objets. 2. Noter son numéro d'identifiant unique : Visible dans l'URL du site public ou privé : Visible dans le backoffice : (espace privé) 3. Connaître linteraction entre les objets de SPIP. http://icp.ge.ch/mon-site/spip.php?page=article&id_article=275 Ou plus simplement depuis SPIP 1.9 : http://icp.ge.ch/mon-site/spip.php?article275

8 Liens entre les objets SPIP forums Images et Documents Mots-clés

9 Squelettes de la distribution (/dist)...

10 Extrait de la Base de Données Extraits de la Base de Données

11

12

13

14

15 Fichiers HTML principaux du Squelette /dist de SPIP 1.9.2.d Fichiers HTML principaux du Squelette /dist de SPIP 1.9.2.d Chacun de ces 14 types de documents possède son propre squelette 1. article.html 1. article.html 2. auteur.html 2. auteur.html 3. backend-breves.html 3. backend-breves.html 4. Backend.html 4. Backend.html 5. breve.html 5. breve.html 6. distrib.html 6. distrib.html 7. forum.html 7. forum.html 1. article.html 1. article.html 2. auteur.html 2. auteur.html 3. backend-breves.html 3. backend-breves.html 4. Backend.html 4. Backend.html 5. breve.html 5. breve.html 6. distrib.html 6. distrib.html 7. forum.html 7. forum.html 8. mot.html 8. mot.html 9. plan.html 9. plan.html 10. recherche.html 11. resume.html 12. rubrique.html 13. site.html 14. sommaire.html 8. mot.html 8. mot.html 9. plan.html 9. plan.html 10. recherche.html 11. resume.html 12. rubrique.html 13. site.html 14. sommaire.html

16 Dans SPIP, les fichiers.html (incluant les CSS) sont appelés squelettes, ils décrivent linterface graphique des pages. Balises html CSS (fichiers externes appelés par link si possible) Boucles et balises SPIP Balises html CSS (fichiers externes appelés par link si possible) Boucles et balises SPIP « placer le titre ici »; « indiquer à cet endroit la liste des articles portant sur le même thème »...);... JavaScript Flash XML PHP... JavaScript Flash XML PHP... … bref, en gros : tout ce quon place habituellement dans une page Web. Le fichier.HTML et aussi en cas de besoin : Les boucles et les balises SPIP permettent de récupérer des informations dans la base de données et de les placer dans la page web, du genre : sont rédigés avec différents types dinstructions : Les fichiers.html

17 Pour chaque type de page, un squelette Principe général de fonctionnement de SPIP http://www.spip.net/fr_article3437.html#nh1 http://exemple.org/spip.php?article3437 Lorsquun visiteur demande la page : SPIP se base donc sur ladresse URL de la page pour déterminer le squelette à utiliser : SPIP se base donc sur ladresse URL de la page pour déterminer le squelette à utiliser : SPIP va chercher un squelette nommé « article.html ».

18 Lorsque SPIP appelle un squelette, il lui passe un Contexte ( ou Environnement ) Ainsi, lURL fournit dautres éléments que le nom du squelette. Par exemple, dans /spip.php?article3437, le numéro de larticle demandé (3437) ; dans /spip.php?page=recherche&recherche=ecureuil, le mot recherché (ecureuil). Il sagit dun « contexte », cest-à-dire, une ou plusieurs « variables denvironnement », que SPIP va fournir au squelette pour quelles puissent être utilisées dans la composition de la page. En effet, le squelette article.html a besoin de connaître le numéro de larticle demandé pour rechercher son titre, son texte,... dans la base de données. De même, le squelette recherche.html doit connaître les mots recherchés par le visiteur pour trouver les enregistrements de la base de données qui contiennent ces termes.

19 /spip.php?page=recherche&recherche=ecureuil Dans toute URL, les variables denvironnement apparaissent après le « ? ». Lorsquil y en a plusieurs, elles sont séparées par des « & ». on a donc 1.deux variables : page et recherche, 2.auxquelles on attribue les valeurs respectives « recherche » et « écureuil ». Variables Valeurs (si si, vous pouvez essayer !). On a donc ici aussi deux variables : page a la valeur "article" et id_article a la valeur "3437". Ces variables permettent à SPIP dutiliser les données de larticle 3437 dans le squelette article.html. /spip.php?article3437 Dans le cas de : SPIP a simplifié lURL qui correspond en fait à : /spip.php?page=article&id_article=3437 Seules les Valeurs sont écrites, les Variables sont implicites Dans lURL

20 ou les résultats de recherche LURL /spip.php?page=abcd appelle le squelette abcd.html LURL /spip.php appelle le squelette sommaire.html Avec deux cas particuliers : Il sagit de la page daccueil du site. 1.Créer des squelettes qui ne sont pas prévus par le système et 2.Les nommer comme vous le souhaitez. En dautres termes, vous pouvez: /spip.php?page=plan /spip.php?page=recherche&recherche=ecureuil Cette syntaxe sert également pour les pages telles que le plan du site par exemple :

21 Une interface différente dans le même site Des squelettes différents pour des rubriques particulières et leurs contenu (sous-rubriques, articles, brèves, etc.) En plus de la mise en page par défaut des différents contenus du site (rubrique.html, article.html, etc.), vous pouvez créer des squelettes différents pour des rubriques particulières du site et leurs contenus. Il suffit de créer de nouveaux fichiers.html et de les nommer selon le principe suivant : - Une interface différente pour une rubrique et ses contenus (sous-rubriques, articles, brèves, etc.) : il faut compléter le nom du fichier squelette correspondant par « -numéro » (un tiret suivi dun numéro de rubrique). Par exemple, si vous créez un fichier rubrique-60.html, il sappliquera à la rubrique n°60 et à ses sous-rubriques en lieu et place de rubrique.html. Le squelette article- 60.html sappliquera aux articles de la rubrique n°60. Si cette rubrique contient des sous-rubriques, leurs articles adopteront également le nouveau squelette. Idem pour breve-60.html... et ainsi de suite. Le fichier rubrique-60.html sappliquera à la rubrique n°60 et à ses sous-rubriques en lieu et place de rubrique.html Le fichier rubrique-60.html sappliquera à la rubrique n°60 et à ses sous-rubriques en lieu et place de rubrique.html

22 Le fichier rubrique-60.html sappliquera à la rubrique n°60 et à ses sous-rubriques en lieu et place de rubrique.html Le fichier rubrique-60.html sappliquera à la rubrique n°60 et à ses sous-rubriques en lieu et place de rubrique.html Le fichier article-60.html sappliquera à tous les articles de la rubrique n°60 et à leurs sous-rubriques en lieu et place de article.html Le fichier breve-60.html sappliquera à toutes les brèves de la rubrique n°60 et à leurs sous-rubriques en lieu et place de breve.html Des squelettes différents pour des rubriques particulières et leurs contenu (sous-rubriques, articles, brèves, etc.) Compléter le nom du fichier squelette correspondant par « -numéro »

23 - Une interface pour une seule rubrique. (SPIP 1.3) On peut créer une interface qui sapplique à une rubrique, mais pas à ses sous-rubriques. Pour cela, il faut compléter le nom du fichier squelette correspondant par « =numéro ». Par exemple, il faut créer un fichier rubrique=60.html, qui sappliquera uniquement à la rubrique n°60, mais pas à ses sous-rubriques. Idem pour article=60.html, breve=60.html, etc. Ces squelettes sappliquent aux contenus de la rubrique n°60 mais ceux de ses sous-rubriques retrouvent lhabillage par défaut. Notez bien : le numéro indiqué est celui dune rubrique. Les squelettes article- 60.html ou article=60.html ne concernent donc pas larticle n°60 mais bien tous les articles de la rubrique n°60. Des squelettes pour une seule rubrique Le fichier rubrique=60.html sappliquera uniquement à la rubrique n°60 en lieu et place de rubrique.html Le fichier rubrique=60.html sappliquera uniquement à la rubrique n°60 en lieu et place de rubrique.html

24 Le fichier rubrique=60.html sappliquera uniquement à la rubrique n°60 en lieu et place de rubrique.html Le fichier rubrique=60.html sappliquera uniquement à la rubrique n°60 en lieu et place de rubrique.html Le fichier article=60.html sappliquera à tous les articles de la rubrique n°60 en lieu et place de article.html Le fichier article=60.html sappliquera à tous les articles de la rubrique n°60 en lieu et place de article.html Le fichier breve=60.html sappliquera à toutes les brèves de la rubrique n°60 en lieu et place de breve.html Le fichier breve=60.html sappliquera à toutes les brèves de la rubrique n°60 en lieu et place de breve.html Compléter le nom du fichier squelette correspondant par « =numéro » Des squelettes pour une seule rubrique

25

26

27 Grosso modo, lorsque SPIP doit utiliser un fichier, il le cherche dans différents répertoires dans lordre suivant : 1. Dans la « liste de dossiers » désignés dans la variable $dossier_squelettes, si celle-ci est définie ; 2. Dans le dossier squelettes/ situé à la racine du site ; 3. Puis (depuis SPIP 1.9) dans la « liste des dossier de plugins installés » dans la variable $plugins ; 4. A la racine du site ; 5. Dans le répertoire dist/ ; 6. Et enfin dans le répertoire ecrire/. « Grosso modo », car à cela sajoutent quelques subtilités, dont un ordre de priorité par fichier de squelette, qui permet des variantes plus fines : par rubrique, par branche ou par langue. Ordre de lecture des fichiers html 1 2 3 4 5 6 Priorité des dossiers de squelettes

28

29

30

31

32

33

34

35 Portail Communal Erasme http://reseau.erasme.org/

36 Portail Communal Erasme http://reseau.erasme.org/

37 Portail Communal Erasme http://reseau.erasme.org/

38 Portail Communal Erasme http://reseau.erasme.org/

39 Portail Communal Erasme http://reseau.erasme.org/

40 Portail Communal Erasme http://reseau.erasme.org/

41

42 Lappel dune page spécifique se fait par lintermédiaire du moteur php de SPIP. http://monsite.net/spip.php?page=article&id_article=5 Par exemple, pour appeler larticle n°5, lURL correspondante est : Le principe de fonctionnement du cache Ou plus simplement depuis SPIP 1.9 : http://monsite.net/spip.php?article5

43 #CACHE{24*3600} Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 2. SPIP vérifie dans le dossier de cache /tmp/cache/ Sil existe déjà le fichier correspondant dossier /tmp/cache/ article5.php

44 Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 2. SPIP vérifie dans le dossier de cache /tmp/cache/ Sil existe déjà le fichier correspondant 1. Le fichier appelé est donc article.html, avec en paramètre id_article=5. 1. Le fichier appelé est donc article.html, avec en paramètre id_article=5. article5.php dossier /tmp/cache/ #CACHE{24*3600}

45 2. La première tâche du moteur php de SPIP consiste à vérifier dans le dossier /CACHE sur votre serveur, sil existe déjà un fichier correspondant à cet article. 2. La première tâche du moteur php de SPIP consiste à vérifier dans le dossier /CACHE sur votre serveur, sil existe déjà un fichier correspondant à cet article. Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 2. SPIP vérifie dans le dossier de cache /tmp/cache/ Sil existe déjà le fichier correspondant article5.php dossier /tmp/cache/ #CACHE{24*3600}

46 2bis. Si un tel fichier existe dans le dossier de cache /tmp, le moteur php de SPIP vérifie sa date de création. Si ce fichier est suffisamment récent, il le retourne directement à lutilisateur. Le processus de consultation est alors terminé. 2bis. Si un tel fichier existe dans le dossier de cache /tmp, le moteur php de SPIP vérifie sa date de création. Si ce fichier est suffisamment récent, il le retourne directement à lutilisateur. Le processus de consultation est alors terminé. Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 2. SPIP vérifie dans le dossier de cache /tmp/cache/ Sil existe déjà le fichier correspondant article5.php dossier /tmp/cache/ #CACHE{24*3600}

47 Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 article5.html 2. SPIP vérifie dans le dossier de cache /tmp/cache/ Sil existe déjà le fichier correspondant /tmp 3. Sil nexiste pas un tel fichier dans le cache /tmp (première visite sur cet article, par exemple), ou si son âge est trop ancien, Le moteur php de SPIP démarre le calcul de cette page. 3. Sil nexiste pas un tel fichier dans le cache /tmp (première visite sur cet article, par exemple), ou si son âge est trop ancien, Le moteur php de SPIP démarre le calcul de cette page. article5.php #CACHE{24*3600}

48 Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 article5.html 2. SPIP vérifie dans le dossier de cache /tmp /cache/ Sil existe déjà le fichier correspondant /tmp 4. La page article.html est alors chargée et analysée. Elle contient la mise en page correspondant à ce type de document. Il sagit de HTML complété dindications permettant de placer les éléments tirés de la base de données. En fonction des éléments requis par article.html, SPIP va chercher les informations nécessaires tirées de la base de données mySQL et les insérer aux endroits prévus. 4. La page article.html est alors chargée et analysée. Elle contient la mise en page correspondant à ce type de document. Il sagit de HTML complété dindications permettant de placer les éléments tirés de la base de données. En fonction des éléments requis par article.html, SPIP va chercher les informations nécessaires tirées de la base de données mySQL et les insérer aux endroits prévus. article5.php #CACHE{24*3600}

49 Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 article5.html 2. SPIP vérifie dans le dossier de cache /tmp Sil existe déjà le fichier correspondant 5. Un fichier est ainsi fabriqué par le moteur php de SPIP, à partir de la description contenue dans article.html, avec les éléments tirés de la base de données pour lid_article=5. Ce fichier est alors sauvegardé dans le dossier de cache /tmp et renvoyé au visiteur. article5.php dossier /tmp/cache/ #CACHE{24*3600}

50 Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 article5.html 2. SPIP vérifie dans le dossier de cache /tmp Sil existe déjà le fichier correspondant Lors dune visite suivante, si le délai entre les deux visites est suffisamment court, cest donc ce nouveau fichier stocké dans le cache /tmp qui est retourné, sans avoir à faire un nouveau calcul à partir de la base de données. En cas de plantage de la base de données, cest forcément le fichier en cache qui est retourné, même sil est « trop âgé ». Lors dune visite suivante, si le délai entre les deux visites est suffisamment court, cest donc ce nouveau fichier stocké dans le cache /tmp qui est retourné, sans avoir à faire un nouveau calcul à partir de la base de données. En cas de plantage de la base de données, cest forcément le fichier en cache qui est retourné, même sil est « trop âgé ». article5.php dossier /tmp/cache/ #CACHE{24*3600}

51 Fichier appelé : page=article&id_article=5 1. Lutilisateur appelle la page : /spip.php?page=article&id_article=5 article5.html 2. SPIP vérifie dans le dossier de cache /tmp Sil existe déjà le fichier correspondant Remarque. On voit ici que chaque page du site est mise en cache individuellement, et chaque re-calcul est provoqué par les visites du site. Il ny a pas, en particulier, un re-calcul de toutes les pages du site dun seul coup à échéance régulière (ce genre de « grosse manoeuvre » ayant le bon goût de surcharger le serveur et de le faire parfois planter). Remarque. On voit ici que chaque page du site est mise en cache individuellement, et chaque re-calcul est provoqué par les visites du site. Il ny a pas, en particulier, un re-calcul de toutes les pages du site dun seul coup à échéance régulière (ce genre de « grosse manoeuvre » ayant le bon goût de surcharger le serveur et de le faire parfois planter). article5.php dossier /tmp/cache/ #CACHE{24*3600}

52 La page « id_article=5 » est demandée à SPIP, c est à dire lURL http://localhost/spip/ spip.php?page=article& id_article=5, La page « id_article=5 » est demandée à SPIP, c est à dire lURL http://localhost/spip/ spip.php?page=article& id_article=5, Non : Délai dépassé Non : Délai dépassé Calcule id_article=5 en intégrant les éléments de la base de données Non Consulte CACHE : Existence fichier id_article=5 ? Mise en CACHE Affiche article12.html Oui $delais < Age-Fichier ? Affiche article5.html Fichier Existe ? Oui : Délai Non-dépassé Oui : Délai Non-dépassé (3/5)

53 La page « id_article=5 » est demandée à SPIP, c est à dire http://localhost/spip/spip.php?page= article&id_article=5, Non : Délai dépassé Non : Délai dépassé Calcule id_article=5 en intégrant les éléments de la base de données Non Consulte CACHE : Existence fichier id_article=5 ? Mise en CACHE Affiche article12.html Oui $delais < Age-Fichier ? Affiche article5.html Fichier Existe ? Oui : Délai Non-dépassé Oui : Délai Non-dépassé Schéma ou Organigramme ? Chacun choisit le «langage» qui lui convient ! Schéma ou Organigramme ? Chacun choisit le «langage» qui lui convient ! Distinguer : le Squelette HTML en amont du CACHE du Fichier HTML calculé pour le CACHE et lECRAN

54

55 un surlangage à PHP/MySQL Boucles et Balises - Critères et Filtres Le langage des Boucles et Balises SPIP est

56 Par rapport au couple PHP/mySQL, nous verrons que le langage SPIP nous facilite le travil de programmation et nous fait gagner un temps fou (surtout : il est beaucoup plus simple). SPIP : un nouveau langage SPIP est certes un nouveau langage, mais il est conçu pour grandement nous faciliter le travail décriture PHP/MySQL dédié à linterrogation de la base données (récupération de données) et à laffichage de ces mêmes données aux endroits adéquats de la page web. SPIP est un langage qui utilise des balise similaires à celles du HTML. Il commande le langage d interrogation de base de données MySQL pour en extraire des informations et le langage php pour diverses opérations (sélection, tri (ordre de tri), classement, filtrage pour limiter laffichage des balises, …). Il constitue donc une couche logicielle « située au dessus » de PHP/MySQL pour en faciliter lusage dans le cadre restreint défini par les besoins du CMS SPIP. Cette sur-couche logicielle SPIP peut donc être dénommée au choix : un langage de balises, un langage de tag, un markup langage, un métalangage ou un surlangage.

57 BOUCLE(ARTICLES) BOUCLE(AUTEURS) BOUCLE(BREVES) BOUCLE(DOCUMENTS) BOUCLE(FORUMS) BOUCLE(GROUPES_MOTS) BOUCLE(HIERARCHIE) BOUCLE(MOTS) BOUCLE(RUBRIQUES) BOUCLE(SIGNATURES) BOUCLE(SITES), La boucle SITES (ou SYNDICATION) BOUCLE(SYNDIC_ARTICLES) Les Boucles récursives INCLURE BOUCLE(ARTICLES) BOUCLE(AUTEURS) BOUCLE(BREVES) BOUCLE(DOCUMENTS) BOUCLE(FORUMS) BOUCLE(GROUPES_MOTS) BOUCLE(HIERARCHIE) BOUCLE(MOTS) BOUCLE(RUBRIQUES) BOUCLE(SIGNATURES) BOUCLE(SITES), La boucle SITES (ou SYNDICATION) BOUCLE(SYNDIC_ARTICLES) Les Boucles récursives INCLURE Boucles Les Boucles récursives INCLURE Le surlangage à PHP/MySQL de SPIP Boucles et Balises, Critères et Filtres http://www.spip.net/@?lang=fr

58 Critères ad_email age agenda age_modif age_redac age_relatif annee_relatif branche date debut_... distant doublons exclus extension fragment fusion id_article id_auteur id_breve id_document id_enfant id_forum id_groupe id_mot id_parent id_rubrique id_secteur id_signature id_syndic id_syndic_article id_thread inverse jour_relatif lang lang_select logo meme_parent mode moderation mois_relatif nom_email origine_traduction pagination par... par hasard par num... par points plat racine recherche statut syndication titre titre_mot tout traduction type type_mot unique url {"inter"} {a, n-b} {a,b} {a/b} {n-a, b} {xxxx IN a,b,c,d,....} Le surlangage à PHP/MySQL de SPIP http://www.spip.net/@?lang=fr

59 Balises 1/2 #ANCRE_PAGINATION #ARRAY #BIO #CACHE #CHAPO #CHARSET #CHEMIN #COMPTEUR_BOUCLE #CONFIG #DATE #DATE_MODIF #DATE_NOUVEAUTES #DATE_REDAC #DEBUT_SURLIGNE #DESCRIPTIF #DESCRIPTIF_SITE_SPIP #DISTANT #DOSSIER_SQUELETTE #EDIT #EMAIL #EMAIL_WEBMASTER #EMBED_DOCUMENT #ENV #EVAL #EXPOSE #EXPOSER #FICHIER #FIN_SURLIGNE #FORMULAIRE_ADMIN #FORMULAIRE_ECRIRE_AUTEUR #FORMULAIRE_FORUM #FORMULAIRE_INSCRIPTION #FORMULAIRE_RECHERCHE #FORMULAIRE_SIGNATURE #FORMULAIRE_SITE #GET #GRAND_TOTAL #HAUTEUR #HTTP_HEADER #ID_ARTICLE #ID_AUTEUR #ID_BREVE #ID_DOCUMENT #ID_FORUM #ID_GROUPE #ID_MOT #ID_PARENT #ID_RUBRIQUE #ID_SECTEUR #ID_SIGNATURE #ID_SYNDIC #ID_SYNDIC_ARTICLE #ID_THREAD #INCLURE #INSERT_HEAD #INTRODUCTION #IP #LANG #LANG_DIR #LANG_LEFT #LANG_RIGHT #LARGEUR #LESAUTEURS #LOGIN_PRIVE #LOGIN_PUBLIC #LOGO_ARTICLE Le surlangage à PHP/MySQL de SPIP http://www.spip.net/@?lang=fr

60 #LOGO_ARTICLE_NORMAL #LOGO_ARTICLE_RUBRIQUE #LOGO_ARTICLE_SURVOL #LOGO_AUTEUR #LOGO_AUTEUR_NORMAL #LOGO_AUTEUR_SURVOL #LOGO_BREVE #LOGO_BREVE_RUBRIQUE #LOGO_DOCUMENT #LOGO_MOT #LOGO_RUBRIQUE #LOGO_RUBRIQUE_NORMAL #LOGO_RUBRIQUE_SURVOL #LOGO_SITE #LOGO_SITE_SPIP #MENU_LANG #MENU_LANG_ECRIRE #MESSAGE #MIME_TYPE #MODELE #NOM #NOM_SITE #NOM_SITE_SPIP #NOTES #PAGINATION #PARAMETRES_FORUM #PETITION #PGP #PIPELINE #POINTS #POPULARITE #POPULARITE_ABSOLUE #POPULARITE_MAX #POPULARITE_SITE #PS #PUCE #RECHERCHE #REM #SELF #SET #SOURCE #SOUSTITRE #SPIP_CRON #SPIP_VERSION #SQUELETTE #SURTITRE #TAGS #TAILLE #TEXTE #TITRE #TOTAL_BOUCLE #TOTAL_UNIQUE #TYPE #TYPE_DOCUMENT #URL_ACTION_AUTEUR #URL_ARTICLE #URL_AUTEUR #URL_BREVE #URL_DOCUMENT #URL_FORUM #URL_LOGOUT #URL_MOT #URL_PAGE #URL_RUBRIQUE #URL_SITE #URL_SITE_SPIP #URL_SOURCE #URL_SYNDIC #VISITES Balises 2/2 Le surlangage à PHP/MySQL de SPIP http://www.spip.net/@?lang=fr

61 !={a} <={a} <{a} =={a} >={a} >{a} ?{sioui,sinon} abs_url affdate affdate_court affdate_jourcourt affdate_mois_annee afficher_enclosures afficher_tags agenda_affiche agenda_connu agenda_memo aligner_droite aligner_gauche alterner annee attribut_html centrer choixsiegal{val,sioui,sinon} compacte concat couleur_eclaircir couleur_eclaircir_si_foncee couleur_extraire couleur_extreme couleur_foncer couleur_foncer_si_claire couleur_inverser couper date_822 direction_css div enclosure2microformat entites_html extraire_attribut extraire_balise fichier form_hidden hauteur heures image_alpha image_aplatir image_flip_horizontal image_flip_vertical image_flou image_gamma image_masque image_nb image_recadre image_reduire image_reduire_par image_rotation image_sepia image_typo inserer_attribut Filtres 1/2 Le surlangage à PHP/MySQL de SPIP http://www.spip.net/@?lang=fr

62 jour justifier largeur liens_absolus liens_ouvrants lignes_longues majuscules match microformat2enclosure minutes modulo moins mois mult nom_jour nom_mois parametre_url plus PtoBR replace safehtml saison secondes sinon supprimer_numero supprimer_tags tags2dcsubject taille_en_octets textebrut texte_backend texte_script traduire_nom_langue unique url_absolue url_absolue_css vide vider_attribut Filtres 2/2 Le surlangage à PHP/MySQL de SPIP http://www.spip.net/@?lang=fr

63 $controler_dates_rss $cookie_path $couleurs_spip $debut_intertitre $dossier_squelettes $espace_logos $ferme_note $ferme_ref $fin_intertitre $flag_preserver $forcer_lang $ligne_horizontale $nombre_surligne $ouvre_note $ouvre_ref $puce $type_urls $url_glossaire_externe Variables de Personnalisation Le surlangage à PHP/MySQL de SPIP http://www.spip.net/@?lang=fr

64 BOUCLES, CRITERES, FILTRES MEMENTO – SPIP 1.9 d'après : http://www.spip-contrib.net http://www.spip.net/fr et http://reseau.erasme.org/spip par Patrick VINCENT, pvincent@erasme.org Le surlangage à PHP/MySQL de SPIP Boucles et Balises, Critères et Filtres

65

66

67

68

69

70

71

72

73 Des boucles et des balises Nous travaillons dans les fichiers «.html » La notion de base du langage de SPIP est la boucle. http://www.spip.net/fr_article894.html

74 Pour « fabriquer » le site, on va extraire de cette liste tous les éléments que lon veut afficher. La logique de la boucle Une base de données, classiquement, cest une liste déléments : ici : une liste des articles, une liste des rubriques, une liste des auteurs, etc. une liste des articles, une liste des rubriques, une liste des auteurs, etc. Exemple, dans la page dune rubrique on veut afficher : tous les articles contenus dans cette rubrique, ainsi que toutes les sous-rubriques contenues dans cette rubrique

75 Ces trois situations sont traitées par la notion unique de boucle, qui permet à la fois de gérer laffichage : Considérons les trois situations possibles : 1. Il existe une sous-rubriques unique en réponse à la requête 2. Il existe plusieurs sous-rubriques en réponse à la requête 3. Il ny a pas sous-rubriques dans cette rubrique spécifique 1. Il existe une sous-rubriques unique en réponse à la requête 2. Il existe plusieurs sous-rubriques en réponse à la requête 3. Il ny a pas sous-rubriques dans cette rubrique spécifique Exemple : Un squelette demande laffichage de toutes les sous-rubriques contenues dans une rubrique. Comment SPIP gère ces situation de manière différenciée ? dun seul élément, de plusieurs éléments successifs, ou labsence déléments. dun seul élément, de plusieurs éléments successifs, ou labsence déléments.

76 Le système de boucle permet, dans un code unique : de prévoir laffichage dun élément unique ; dindiquer comment est affichée une liste de plusieurs éléments ; de déterminer ce quon affiche lorsquil ny a aucun élément correspondant. de prévoir laffichage dun élément unique ; dindiquer comment est affichée une liste de plusieurs éléments ; de déterminer ce quon affiche lorsquil ny a aucun élément correspondant. dindiquer à quel endroit du code HTML on a besoin de quel type délément (à tel endroit on veut récupérer la liste des articles, à tel endroit on veut inclure la liste des sous-rubriques...) ; dautre part : dune part :

77 Analogie de la programmation en PHP/mySQL avec les boucles SPIP La récupération des données la construction de la syntaxe de la requête (qui consiste à dire « je veux récupérer la liste des articles contenus dans telle rubrique... ») ; La récupération des données la construction de la syntaxe de la requête (qui consiste à dire « je veux récupérer la liste des articles contenus dans telle rubrique... ») ; Laffichage des résultats lanalyse et laffichage des résultats au travers dune boucle. Laffichage des résultats lanalyse et laffichage des résultats au travers dune boucle. Dans SPIP, récupération des données et affichage des résultats sont les deux événements gérés au travers des boucles. Les requêtes mySQL en PHP se déroulent en deux temps :

78 Il existe ainsi des balises spécifiques à SPIP, permettant dindiquer précisément à quel endroit on affiche des éléments : Les balises SPIP Les éléments récupérés par les boucles SPIP sont composés de plusieurs éléments précis. titre, surtitre, sous-titre, texte dintroduction (chapeau), texte principal, post-scriptum, etc. titre, surtitre, sous-titre, texte dintroduction (chapeau), texte principal, post-scriptum, etc. « placer le titre ici », « placer le texte ici »... « placer le titre ici », « placer le texte ici »... Par exemple un article se compose de :

79 le principe (en description logique) de fonctionnement général dune boucle SPIP accompagnée de ses balises se présente comme suit : BOUCLE : afficher la liste des articles de cette rubrique Fin de la BOUCLE BOUCLE : afficher la liste des articles de cette rubrique Fin de la BOUCLE afficher ici le titre de l'article afficher le sous-titre afficher le texte Les balises à lintérieur des boucles Cette boucle, analysée par SPIP, peut donner trois résultats différents :

80 1. Il ny a aucun article dans cette rubrique Il n y a donc rien à afficher ! En revanche, si on la prévu, SPIP permet dafficher un message du genre : « Il ny a pas darticle »

81 Titre de l'article Sous-titre de l'article Texte de l'article Titre de l'article Sous-titre de l'article Texte de l'article 2. Il y a un seul article dans cette rubrique. Dans ce cas, la boucle SPIP affiche :

82 3. Il y a plusieurs articles dans cette rubrique La description de la mise en page (« placer ici... ») va alors être calculée successivement pour chacun des articles. Ce qui donne simplement : Titre de l'article 1 Sous-titre de l'article 1 Texte de l'article 1 Titre de l'article 1 Sous-titre de l'article 1 Texte de l'article 1 Titre de l'article 2 Sous-titre de l'article 2 Texte de l'article 2 Titre de l'article 2 Sous-titre de l'article 2 Texte de l'article 2 Titre du dernier article Sous-titre du dernier article Texte du dernier article Titre du dernier article Sous-titre du dernier article Texte du dernier article...

83 La syntaxe des boucles http://www.spip.net/fr_article898.html

84 Les Fichiers HTML du squelette Les Fichiers HTML du squelette sont constitués de balises HTML (et de CSS externes) ajouté dinstructions du surlangage SPIP des Boucles et Balises interprété sur le serveur :

85 se répète autant de fois que la boucle obtient des éléments tirés de la base de données (cest-à-dire une fois, plusieurs fois, ou zéro fois). Syntaxe de base La syntaxe simplifiée dune boucle est la suivante : Code HTML + balises SPIP le

86 Syntaxe de base La syntaxe simplifiée est aussi présentée comme suit : #BALISE Objet de la Requête Critères de Requête Sélection et Ordre des Résultats Résultats

87 Code HTML + balises SPIP Toutes les boucles de SPIP commencent par linstruction BOUCLE. La ligne importante, ici, est : n = le nom de la boucle, ou le numéro de la boucle. n est indispensable pour identifier les boucles SPIP dans le code.

88 Code HTML + balises SPIP En numérotant les boucles, la syntaxe devient (exemple pour la boucle 5) :...... En donnant un nom aux boucles (le code est plus lisible), lunderscore est indispensable. Par exemple :...... n

89 ARTICLES RUBRIQUES AUTEURS BREVES etc. ARTICLES RUBRIQUES AUTEURS BREVES etc. Code HTML + balises SPIP (TYPE) (TYPE) = indique quel type déléments on veut récupérer indiqué entre parenthèses (sans espaces), en majuscules. TYPE doit correspondre obligatoirement à lun des types prévus dans SPIP :...... Pour lexemple précédent, on aurait donc :

90 ...... Code HTML + balises SPIP critère i Les critères {critère1}{critère2}... indiquent à la fois : Comme on peut combiner les critères, on peut très aisément fabriquer des requêtes très puissantes, du genre « afficher la liste des 5 articles les plus récents écrits par cet auteur » : afficher les sous-rubriques incluses dans cette rubrique afficher les autres rubriques installées au même niveau hiérarchique... afficher les sous-rubriques incluses dans cette rubrique afficher les autres rubriques installées au même niveau hiérarchique... classer les articles selon leur date, selon leur titre… afficher uniquement les 3 premiers articles afficher la moitié des articles... classer les articles selon leur date, selon leur titre… afficher uniquement les 3 premiers articles afficher la moitié des articles... - et la façon dont on va classer ou sélectionner les éléments : - selon quels critères on veut sélectionner les éléments de la base de données :

91 Une boucle SPIP affiche successivement les éléments contenus à lintérieur de la boucle : Syntaxe complète ce quon affiche avant la boucle et après la boucle au cas où elle contient un ou plusieurs résultats, et ce quon affiche sil ny a aucun élément. SPIP permet ainsi dindiquer : Cette syntaxe peut être complétée par des éléments conditionnels Code HTML + balises SPIP

92 Code HTML + balises SPIP

93 Code HTML + balises SPIP Ces éléments conditionnels sont optionnels

94 Code HTML + balises SPIP Code HTML optionnel avant Code HTML optionnel après Code HTML alternatif

95 Code HTML + balises SPIP Code HTML optionnel avant : nest affiché (avant les résultats de la boucle) que si la boucle contient au moins une réponse. Code HTML optionnel après Code HTML alternatif

96 Code HTML + balises SPIP Code HTML optionnel avant : nest affiché (avant les résultats de la boucle) que si la boucle contient au moins une réponse. Code HTML optionnel après : nest affiché (après les résultats de la boucle) que si la boucle contient au moins une réponse. Code HTML alternatif

97 Code HTML + balises SPIP Code HTML optionnel avant : nest affiché (avant les résultats de la boucle) que si la boucle contient au moins une réponse. Code HTML optionnel après : nest affiché (après les résultats de la boucle) que si la boucle contient au moins une réponse. Code HTML alternatif : est affiché à la place de la boucle (et donc également à la place des codes optionnels avant et après) si la boucle na trouvé aucune réponse.

98 Code HTML + balises SPIP Code HTML optionnel avant Code HTML optionnel après Code HTML alternatif Affichés que si la boucle contient au moins une réponse Affiché que si la boucle na trouvé aucune réponse Affiché que si la boucle na trouvé aucune réponse

99 Par exemple, le code : Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article. Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article.

100 Cette rubrique contient les éléments suivants: Titre de l'article Ces informations seront modifiées en fonctions des événements. Cette rubrique contient les éléments suivants: Titre de l'article Ces informations seront modifiées en fonctions des événements. donne les résultats suivants : Cas où il ny a quun seul article : Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article. Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article.

101 Cette rubrique contient les éléments suivants: Titre de l'article 1 Titre de l'article 2... Titre du dernier article Ces informations seront modifiées en fonctions des événements. Cette rubrique contient les éléments suivants: Titre de l'article 1 Titre de l'article 2... Titre du dernier article Ces informations seront modifiées en fonctions des événements. Cas où il a plusieurs articles : Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article. Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article.

102 Cas où il ny a aucun article : Cette rubrique ne contient pas d'article. Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article. Cette rubrique contient les éléments suivants: #TITRE Ces informations seront modifiées en fonctions des événements. Cette rubrique ne contient pas d'article.

103 Code HTML + balises SPIP Remarque : Il est interdit de mettre une boucle entre et sauf en passant par une commande. Il est interdit de mettre une boucle entre et sauf en passant par une commande. Par contre, il est possible de mettre des boucles supplémentaires dans les parties optionnelles situées après la définition autorisation et interdiction dajouts de Boucles Ajouts de Boucles autorisé, souvent indispensable.

104 Chaque boucle effectue la sélection des éléments tirés de la base de données en fonction de lObjet de la requête et de critères. Ces critères correspondent à lenvironnement (contexte) dans lequel se trouve la boucle. Par exemple : si on prévoit une boucle du genre « Afficher les articles inclus dans cette rubrique », il faut savoir de quelle rubrique il sagit. Cest ce que lon nomme lenvironnement (le contexte). Des critères denvironnement en cascade

105 Lorsque lon visite une page dun site SPIP, son adresse contient généralement une variable. Par exemple : Lenvironnement fourni par lURL Cette variable définit donc un premier environnement : la boucle « Afficher les articles inclus dans cette rubrique » doit alors être compris comme : /spip.php?page=rubrique &id_rubrique=15 « Afficher les articles de la rubrique15 » 1/4 /spip.php?rubrique15 ou Clairement, avec le même code de squelette, si on appelle ladresse : linterprétation de cette boucle deviendra : /spip.php?page=rubrique&id_rubrique=7 « Afficher les articles de la rubrique 7 ». ou /spip.php?rubrique7 (Le Contexte)

106 À lintérieur dune boucle, lenvironnement est modifié par chaque élément de la boucle. En plaçant des boucles les unes à lintérieur des autres, on hérite ainsi denvironnements imbriqués les uns dans les autres. Lenvironnement fourni par les autres boucles Afficher le titre de l'article Nom de l'auteur Afficher le titre de l'article Nom de l'auteur Considérons la structure suivante : Lenvironnement fourni par lURL 2/4 (Le Contexte)

107 Afficher le titre de l'article Nom de l'auteur Afficher le titre de l'article Nom de l'auteur la seconde boucle (BOUCLE_auteurs), qui est installée à lintérieur de la première boucle, en dépend pour chacune de ses exécutions successives (elle est exécutée pour chaque article de la première boucle) : « afficher les auteurs de cet article » devient successivement « afficher les auteurs du premier article », « du deuxième article » et ainsi de suite. On doit comprendre que : la première boucle (BOUCLE_articles) affiche les articles en fonction de la rubrique, selon lenvironnement fournit par lURL (id_rubrique=15 par exemple), dans cette boucle, on obtient un ou plusieurs articles; « à lintérieur » de chacun de ces articles, on a un environnement différent (celui de larticle, cest-à-dire, par exemple, id_article=199) ; Lenvironnement fourni par lURL 3/4 (Le Contexte)

108 Lors dimbrications de boucles successives, les résultats de chaque boucle interne dépendent du résultat des boucles dans lesquelles elles sont situées. La toute première boucle (celle qui contient toutes les autres) dépend dun paramètre fixé dans ladresse de la page. Lenvironnement fourni par lURL 4/4 Afficher le titre de l'article Nom de l'auteur Afficher le titre de l'article Nom de l'auteur (Le Contexte)

109 Boucles incluses et boucles successives 1/4 On peut inclure des boucles les unes à lintérieur des autres, chaque boucle incluse dépend du résultat de la boucle à lintérieur de laquelle elle est installée. On peut inclure des boucles les unes à lintérieur des autres, chaque boucle incluse dépend du résultat de la boucle à lintérieur de laquelle elle est installée. On peut aussi installer des boucles les unes à la suite des autres ; des boucles successives ninfluent pas les unes sur les autres. On peut aussi installer des boucles les unes à la suite des autres ; des boucles successives ninfluent pas les unes sur les autres.

110 Titre de la rubrique Titre de l'article Titre de la sous-rubrique Il n'y a pas de rubrique à cette adresse Titre de la rubrique Titre de l'article Titre de la sous-rubrique Il n'y a pas de rubrique à cette adresse Par exemple, la page dune rubrique est typiquement constituée des éléments suivants : Boucles incluses et boucles successives 2/4

111 Mais sil existe une rubrique 15, ces deux sous-boucles seront analysées. Boucles incluses et boucles successives 3/4 Titre de la rubrique Titre de l'article Titre de la sous-rubrique Il n'y a pas de rubrique à cette adresse Titre de la rubrique Titre de l'article Titre de la sous-rubrique Il n'y a pas de rubrique à cette adresse La première boucle (BOUCLE_rubrique) dépend de la variable passée dans lURL de la page (id_rubrique=15 par exemple). Les boucles suivantes (BOUCLE_articles et BOUCLE_sous_rubriques) sont installées à lintérieur de la première boucle. Ainsi, sil nexiste pas de rubrique 15, la première boucle ne donne aucun résultat (le code alternatif « Il ny a pas de rubrique... » est affiché), et donc les deux boucles incluses sont totalement ignorées.

112 Boucles incluses et boucles successives 4/4 Sil ny a pas darticles dans la rubrique 15 (BOUCLE_articles), on affichera tout de même la liste des sous-rubriques de la rubrique 15 (BOUCLE_sous_rubriques) ; et inversement. Titre de la rubrique Titre de l'article Titre de la sous-rubrique Il n'y a pas de rubrique à cette adresse Titre de la rubrique Titre de l'article Titre de la sous-rubrique Il n'y a pas de rubrique à cette adresse On constate également que ces deux boucles se présentent lune après lautre. Ainsi : Elles fonctionnent en fonction de la première boucle, mais indépendamment lune de lautre.

113 La syntaxe des balises SPIP http://www.spip.net/fr_article899.html

114 Une balise est toujours précédée du signe dièse (#) Fonctionnement simplifié Une balise SPIP se place à lintérieur dune boucle, puisquil faut savoir si lon veut récupérer un élément dun article, dune rubrique, etc. Le nom de ces balises est généralement simple, et nous fournirons : # TITRE # TITRE pour chaque type de boucle la liste complète des balises que lon peut utiliser Par exemple, affichons une liste de noms darticles : 1/2

115 Lorsque la boucle est exécutée, la balise SPIP #TITRE est à chaque fois remplacée par le titre de larticle en question : Titre de l'article 1 Titre de l'article 2... Titre du dernier article Titre de l'article 1 Titre de l'article 2... Titre du dernier article On indique à lintérieur du code HTML le nom de lélément désiré, et celui-ci est remplacé par le contenu tiré de la base de données. Fonctionnement simplifié 2/2 #TITRE #TITRE

116 Par exemple : il existe une balise SPIP pour indiquer le surtitre dun article. Or de nombreux articles nont pas de surtitre. #SURTITRE #TITRE #SURTITRE #TITRE Codes optionnels...qui donne une liste darticles, avec lindication du surtitre et du titre de chaque article. Dans la pratique, un élément de contenu est souvent accompagné de code HTML qui ne doit safficher que si cet élément existe (par exemple : #SURTITRE ), faute de quoi la mise en page devient imprécise. Mais que se passe-t-il si larticle na pas de surtitre ? On obtient le code : « », cest-à-dire une petite puce suivie dune ligne blanche. 1/3 Complétons lexemple précédent :

117 Le code optionnel avant et le code optionnel après ne saffichent que sil existe, dans la base de données, un élément correspondant à cette balise. Codes optionnels 2/3 Ce quil faut faire : nafficher le code « » que si un surtitre existe pour larticle La syntaxe de la balise SPIP devient alors : [ code optionnel avant (#BALISE) code optionnel après ] et lensemble du texte conditionnel entre crochets La balise qui détermine loption est placée entre parenthèses

118 Codes optionnels 3/3 #SURTITRE #TITRE #SURTITRE #TITRE Lexemple devient : [ (#SURTITRE) ] #TITRE [ (#SURTITRE) ] #TITRE sil nexiste pas de surtitre, même le est occulté. On obtient alors le résultat recherché : sil existe un surtitre pour cet article, il est affiché et suivi du

119 Dans SPIP, on peut directement appliquer des filtres aux éléments récupérés de la base de données, en les indiquant dans la syntaxe des balises SPIP, qui devient : [ option avant (#BALISE|filtre1|filtre2|...|filtren) option après ] La syntaxe est donc de faire suivre : le nom de la balise, entre les parenthèses, par les filtres successifs, séparés par une barre verticale (nommée habituellement pipe). Filtrer les résultats Il est fréquent de vouloir modifier un élément tiré de la base de données, soit pour obtenir un affichage différent (par exemple, afficher le titre entièrement en majuscules), soit pour récupérer une valeur découlant de cet élément (par exemple, afficher le jour de la semaine correspondant à une date). pipe Appliqués sur filtres 1/2

120 Remarque. En réalité, les filtres sont des fonctions PHP. Vous pouvez donc utiliser directement les fonctions de PHP (à condition que ces fonctions fonctionnent avec une seule variable), en plus des fonctions livrées avec SPIP. Voici par exemple deux filtres (parmi dautres) fournis par SPIP : justifier : affiche le texte en justification totale (cest-à-dire ) ; par exemple : [(#TEXTE|justifier)] majuscules : passe le texte en majuscules (plus puissant que la fonction de PHP correspondante, qui ne fonctionne pas correctement avec les caractères accentués) ; par exemple : [(#TITRE|majuscules)] Filtrer les résultats 2/2

121 [ option avant (#BALISE * |filtre1|filtre2|...|filtren) option après ] Court-circuiter le traitement par SPIP SPIP applique un traitement typographique à tous les textes tirés de la base de données. En particulier, il place des espaces insécables avant certains symboles (point-virgule, point dinterrogation, etc.), et analyse des raccourcis de mise en page. Dans certains cas, vous pouvez avoir besoin de court-circuiter ce traitement, afin de récupérer directement le texte brut tel quil est placé dans la base de données. Pour cela, il suffit dajouter une astérisque ( * ) à la suite de la balise SPIP. Ce qui donne :

122 La boucle ARTICLES Une boucle darticles se code en plaçant ARTICLES entre parenthèses (remarquez le s à ARTICLES) : (Il nexiste aucun moyen dafficher les articles « en cours de rédaction », « proposés à la publication » ou « refusés ».) http://www.spip.net/fr_article902.html Les éléments contenus dans une telle boucle sont des articles. Une boucle ARTICLES ne retourne que des articles publiés. Remarque :

123 {tout} {id_article} {id_rubrique} {id_secteur} {branche} {id_auteur} {id_mot} {titre_mot=xxxx}, ou {type_mot=yyyy} {id_groupe=zzzz} {lang} {date} {recherche} {tout} {id_article} {id_rubrique} {id_secteur} {branche} {id_auteur} {id_mot} {titre_mot=xxxx}, ou {type_mot=yyyy} {id_groupe=zzzz} {lang} {date} {recherche} Les critères de sélection 1/4 On utilisera lun ou autre des critères suivants pour indiquer comment on sélectionne les éléments.

124 Les critères de sélection On utilisera lun ou autre des critères suivants pour indiquer comment on sélectionne les éléments. {tout} les articles sont sélectionnés dans lintégralité du site (dans toutes les rubriques). Utile notamment pour afficher les articles les plus récents (dans lintégralité du site) sur la page daccueil. En réalité, le critère « tout » nest pas traité de manière informatique : cest un aide-mémoire pour le webmestre ; on obtient le même résultat en nindiquant aucun des critères suivants. {id_article} retourne larticle dont lidentifiant est id_article. Comme lidentifiant de chaque article est unique, ce critère ne retourne quune ou zéro réponse. {id_rubrique} retourne la liste des articles contenus dans la rubrique id_rubrique. {id_secteur} retourne les articles dans ce secteur (un secteur est une rubrique qui ne dépend daucune autre rubrique, cest-à-dire située à la racine du site). 2/4

125 [SPIP 1.4] {branche} : le critère {branche} retourne lensemble des articles de la rubrique ET de ses sous-rubriques. (Cest une sorte dextension du critère {id_secteur}. Toutefois, à linverse de {id_secteur=2}, il nest pas possible dappeler directement une branche en faisant par exemple {branche=2} : techniquement parlant, il faut que la rubrique en question figure dans le contexte courant. Ce critère est à utiliser avec parcimonie : si votre site est bien structuré, vous ne devriez pas en avoir besoin, sauf dans des cas très particuliers.) {id_auteur} retourne les articles correspondant à cet identifiant dauteur (utile pour indiquer la liste des articles écrits par un auteur). Les critères de sélection 3/4 {id_mot} retourne les articles correspondant à cet identifiant de mot-clé (utile pour indiquer la liste des articles traitant dun sujet donné). [SPIP 1.3] {titre_mot=xxxx}, ou {type_mot=yyyy} retourne les articles liés au mot-clé dont le nom est « xxxx », ou liés à des mots-clés du groupe de mots-clés « yyyy ». Attention, on ne peut pas utiliser plusieurs critères {titre_mot=xxxx} ou {type_mot=yyyy} dans une même boucle.

126 [SPIP 1.4] {id_groupe=zzzz} permet de sélectionner les articles liés à un groupe de mots-clés ; principe identique au {type_mot} précédent, mais puisque lon travaille avec un identifiant (numéro du groupe), la syntaxe sera plus « propre ». [Nota : Ce critère nest pas (en létat actuel du développement de SPIP) cumulable avec le précédent {type_mot=yyyy}] [SPIP 1.7.1] {lang} sélectionne les articles de la langue demandée dans ladresse de la page. [SPIP 1.7.2] Les critères {date} (ou {date=...} ou {date==...}) permettent de sélectionner un article en fonction de la date passée dans lURL. {recherche} retourne les articles correspondant aux mots indiqués dans linterface de recherche (moteur de recherche incorporé à SPIP). Voir la page consacrée au moteur de recherche. Les critères de sélection 4/4

127 Une fois fixé lun des critères ci-dessus, on pourra ajouter les critères suivants pour restreindre le nombre déléments affichés. Les critères communs à toutes les boucles sappliquent évidemment. {exclus} permet dexclure du résultat larticle dans lequel on se trouve déjà (par exemple, lorsque lon affiche les articles contenus dans la même rubrique, on ne veut pas afficher un lien vers larticle dans lequel on se trouver déjà). {doublons} ou {unique} (ces deux critères sont rigoureusement identiques) permettent dinterdire laffichage darticles déjà affichés dans dautres boucles elles mêmes marquées {doublons}. Les critères daffichage 1/1

128 Les balises suivantes correspondent aux éléments directement tirés de la base de données. Vous pouvez les utiliser également en tant que critère de classement (par exemple : {par date} ou {par titre}). Les balises de cette boucle Les balises tirées de la base de données 1/3

129 #ID_ARTICLE affiche lidentifiant unique de larticle. Utile pour fabriquer des liens hypertextes non prévus (par exemple vers une page « Afficher au format impression ». #SURTITRE retourne le surtitre. #TITRE retourne le titre de larticle. #SOUSTITRE retourne le soustitre. #DESCRIPTIF retourne le descriptif. #CHAPO retourne le texte dintroduction (chapeau). #TEXTE retourne le texte principal de larticle. #PS retourne le post-scriptum. Les balises de cette boucle Les balises tirées de la base de données 2/3

130 Les dates : #DATE, #DATE_REDAC, #DATE_MODIF sont explicitées dans la documentation sur « La gestion des dates ». #ID_RUBRIQUE est lidentifiant de la rubrique dont dépend larticle. #ID_SECTEUR est lidentifiant du secteur dont dépend larticle (le secteur étant la rubrique située à la racine du site). #NOM_SITE et #URL_SITE correspondent aux données du « lien hypertexte » de larticle (si vous avez activé cette option). #VISITES est le nombre de visites sur cet article. #POPULARITE donne le pourcentage de popularité de cet article, voir la documentation La « popularité » des articles. Les balises de cette boucle Les balises tirées de la base de données 3/3

131 Les balises de cette boucle Les balises calculées par SPIP 1/2 Les éléments suivants sont calculés par SPIP. (Ils ne peuvent pas être utilisés comme critère de classement.) #NOTES les notes de bas de page (calculées à partir de lanalyse du texte). #INTRODUCTION : [SPIP 1.4] si larticle contient un descriptif, cest celui-ci qui est utilisé ici ; sinon, SPIP affiche les 600 premiers caractères du début de larticle (chapeau puis texte). [SPIP 1.3] Dans les versions précédentes de SPIP, ce sont systématiquement les premiers caractères de larticle (chapeau puis texte) qui sont pris en compte (le descriptif nest pas utilisé). #LESAUTEURS les auteurs de cet article. Cela permet déviter de créer une boucle AUTEURS pour obtenir le même résultat. #URL_ARTICLE est lURL de la page de larticle.

132 #FORMULAIRE_FORUM fabrique linterface permettant de poster un message répondant à cet article. #FORMULAIRE_SIGNATURE fabrique linterface permettant de signer la pétition associée à cet article. #PARAMETRES_FORUM fabrique la liste des variables exploitées par linterface du formulaire permettant de répondre à cet article. Par exemple : [ Répondre à cet article ] Les balises de cette boucle Les balises calculées par SPIP 2/2

133 #LOGO_ARTICLE le logo de larticle, éventuellement avec la gestion du survol. #LOGO_ARTICLE_RUBRIQUE le logo de larticle, éventuellement remplacé par le logo de la rubrique sil nexiste pas de logo spécifique à larticle. #LOGO_RUBRIQUE le logo de la rubrique de larticle. Les logos sinstallent de la manière suivante : [(#LOGO_ARTICLE|alignement|adresse)] Lalignement peut être left ou right. Ladresse est lURL de destination du lien de ce logo (par exemple #URL_ARTICLE). Si lon nindique pas dadresse, le bouton nest pas cliquable. Les balises de cette boucle Les logos 1/2

134 Si lon veut récupérer directement le nom du fichier du logo (alors que les balises précédentes fabriquent le code HTML complet pour insérer limage dans la page), par exemple pour afficher une image en fond de tableau, on utilisera le filtre |fichier comme suit : [(#LOGO_ARTICLE|fichier)] Par ailleurs deux balises permettent de récupérer un seul des deux logos : #LOGO_ARTICLE_NORMAL est le logo sans survol ; #LOGO_ARTICLE_SURVOL est le logo de survol. Les balises de cette boucle Les logos 2/2

135 La boucle RUBRIQUES http://www.spip.net/fr_article904.html

136 Les critères de sélection 1/3 On utilisera lun ou autre des critères suivants pour indiquer comment on sélectionne les éléments. {id_rubrique} retourne la rubrique dont lidentifiant est id_rubrique. Comme lidentifiant de chaque rubrique est unique, ce critère retourne une ou zéro réponse. {id_secteur} retourne les rubriques de ce secteur. (On peut également, par extension, utiliser le critère {branche} décrit dans La boucle ARTICLES). {id_parent} retourne la liste des rubriques contenues dans une rubrique. {racine} retourne la liste des secteurs (rigoureusement identique à {id_parent=0}). {id_enfant} retourne la rubrique qui contient la rubrique (une seule réponse; ou zéro réponse si la présente rubrique est située à la racine du site).

137 Les critères de sélection 2/3 {meme_parent} retourne la liste des rubriques dépendant de la même rubrique que la rubrique en cours. Permet dafficher les rubriques « s ?urs » qui se trouvent au même niveau dans la hiérarchie. {recherche} retourne les rubriques correspondant aux mots indiqués dans linterface de recherche (moteur de recherche incorporé à SPIP). Voir la page consacrée au moteur de recherche. À partir de la version SPIP 1.4, les rubriques peuvent être liées à des mots-clés. Les critères de mots-clés peuvent donc être désormais utilisés dans les boucles (RUBRIQUES) : {id_mot}, {titre_mot=xxx} récupèrent les rubriques liées au mot dont le numéro est id_mot ou dont le titre est titre_mot ; {id_groupe}, {type_mot=yyyy} récupèrent les rubriques liées à des mots du groupe id_groupe, ou du groupe dont le titre est type_mot.

138 Les critères de sélection 3/3 [SPIP 1.7.1] {tout} affiche les rubriques vides en plus des rubriques contenant des éléments publiés. On réservera ce choix à des besoins très spécifiques ; en effet, par défaut, SPIP naffiche pas sur le site public les rubriques qui ne contiennent aucun élément actif, afin de garantir que le site ne propose pas de « culs de sac » (navigation vers des pages ne proposant aucun contenu).

139 Les critères daffichage 1/1 Une fois fixé lun des critères ci-dessus, on pourra ajouter les critères suivants pour restreindre le nombre déléments affichés. Les critères communs à toutes les boucles sappliquent évidemment. {exclus} permet dexclure du résultat la rubrique dans lequel on se trouve déjà (utile avec meme_parent). {doublons} ou {unique} (ces deux critères sont rigoureusement identiques) permettent dinterdire laffichage de rubriques déjà affichées dans dautres boucles.

140 Les balises de cette boucle Les balises tirées de la base de données 1/1 Les balises suivantes correspondent aux éléments directement tirés de la base de données. Vous pouvez les utiliser également en tant que critère de classement (généralement : {par titre}). #ID_RUBRIQUE affiche lidentifiant unique de la rubrique. #TITRE retourne le titre de la rubrique. #DESCRIPTIF retourne le descriptif. #TEXTE retourne le texte principal de la rubrique. #ID_SECTEUR est lidentifiant du secteur dont dépend la rubrique (le secteur étant la rubrique située à la racine du site).

141 Les balises de cette boucle Les balises calculées par SPIP 1/2 #NOTES les notes de bas de page (calculées à partir de lanalyse du texte). #INTRODUCTION les 600 premiers caractères du texte, les enrichissements typographiques (gras, italique) sont supprimés. #URL_RUBRIQUE est lURL de la page de la rubrique. [SPIP 1.4] #DATE affiche la date de la dernière publication effectuée dans la rubrique et/ou ses sous-rubriques (articles, brèves...). #FORMULAIRE_FORUM fabrique linterface permettant de poster un message répondant à cette rubrique.

142 Les balises de cette boucle Les balises calculées par SPIP 2/2 #PARAMETRES_FORUM fabrique la liste des variables exploitées par linterface du formulaire permettant de répondre à cette rubrique. Par exemple : [ Répondre à cette rubrique ] #FORMULAIRE_SITE [SPIP 1.4] Le #FORMULAIRE_SITE affiche une interface permettant aux visiteurs du site de proposer des référencements de sites. Ces sites apparaîtront comme « proposés » dans lespace privé, en attendant une validation par les administrateurs. Ce formulaire ne saffiche que si vous avez activé loption « Gérer un annuaire de sites » dans la Configuration sur site dans lespace privé, et si vous avez réglé « Qui peut proposer des sites référencés » sur « les visiteurs du site public ».

143 Les balises de cette boucle Le logo 1/1 #LOGO_RUBRIQUE le logo de la rubrique, éventuellement avec la gestion du survol. Sil ny a pas de logo pour cette rubrique, SPIP va automatiquement chercher sil existe un logo pour la rubrique dont elle dépend, et ainsi de suite de manière récursive. Le logo sinstalle de la manière suivante : [(#LOGO_RUBRIQUE|alignement|adresse)] [SPIP 1.4] #LOGO_RUBRIQUE_NORMAL affiche le logo « sans survol » ; #LOGO_RUBRIQUE_SURVOL affiche le logo de survol : ces deux balises permettent par exemple, quand on est dans une rubrique, de gérer un logo « avec survol » pour les liens vers les autres rubriques, et de laisser le logo de survol seul dans la rubrique active.

144 La boucle MOTS http://www.spip.net/fr_article909.html#BOUCLE-MOTS- La boucle MOTS retourne une liste de mots-clés.

145 Les critères de sélection 1/3 On utilisera lun ou autre des critères suivants pour indiquer comment on sélectionne les éléments. {tout} les mots sont sélectionnés dans lintégralité du site. {id_mot} retourne le mot-clé dont lidentifiant est id_mot. {id_groupe} retourne les mots-clés associés au groupe de mots dont le numéro est id_groupe. {id_article} retourne les mots-clés associés à cet article (cest lutilisation la plus courante de cette boucle). {id_rubrique} retourne les mots-clés associés à une rubrique. {id_breve} retourne les mots associés à une brève. {id_syndic} retourne les mots associés à un site référencé. {id_forum} retourne les mots associés à un message de forum (attention, utilisation très spécifique). {titre=france} retourne le mot-clé intitulé france (par exemple). {type=pays} retourne les mots-clés du groupe de mots-clés intitulé pays (par exemple). La boucle MOTS

146 Les critères daffichage 1/1 Une fois fixé lun des critères ci-dessus, on pourra ajouter les critères suivants pour restreindre le nombre déléments affichés. Les critères communs à toutes les boucles sappliquent évidemment. La boucle MOTS

147 Les balises de cette boucle Les balises tirées de la base de données 1/1 Les balises suivantes correspondent aux éléments directement tirés de la base de données. Vous pouvez les utiliser également en tant que critère de classement (généralement : {par titre}). #ID_MOT affiche lidentifiant unique du mot. #TITRE affiche le titre (le mot-clé lui-même). #DESCRIPTIF affiche le descriptif du mot. #TEXTE affiche le texte associé au mot. #TYPE affiche la catégorie dans laquelle est installé ce mot-clé (par exemple, le mot-clé « France » pourrait être associé à la catégorie « Pays »). #LOGO_MOT affiche le logo associé au mot-clé. #URL_MOT affiche ladresse de ce mot La boucle MOTS

148 La boucle GROUPES-MOTS http://www.spip.net/fr_article909.html#BOUCLE-MOTS-

149 Les critères de sélection 1/1 la boucle GROUPES_MOTS permet, si vous avez plusieurs groupes de mots-clés, de sélectionner ces groupes, et dorganiser par exemple une page récapitulative de tous les mots-clés classés par groupe, puis par ordre alphabétique à lintérieur de chaque groupe, par exemple via le code suivant : #TITRE #TITRE La boucle GROUPES-MOTS

150 Les balises et critères de sélection 1/1 Les balises et critères associés à cette boucle sont : #ID_GROUPE, lidentifiant du groupe de mots [également disponible dans la boucle(MOTS)] ; #TITRE, le titre du groupe [à lintérieur de la boucle(MOTS), vous pouvez utiliser #TYPE pour afficher cette valeur]. La boucle GROUPES-MOTS

151 Les critères communs à toutes les boucles http://www.spip.net/fr_article900.html Certains critères sappliquent à (presque) tous les types de boucles. Ce sont des critères destinés à restreindre le nombre de résultats affichés ou à indiquer lordre daffichage. On peut sans difficulté combiner plusieurs de ces critères de sélection.

152 {par critère_de_classement} indique lordre de présentation des résultats. Ce critère de classement correspond à lune des balises tirées de la base de données pour chaque type de boucle. Par exemple, on pourra classer les articles {par date}, {par date_redac} ou {par titre}. (Notez que, si les balises sont en majuscules, les critères de classement sont en minuscules.) Cas particulier : {par hasard} permet dobtenir une liste présentée dans un ordre aléatoire. Inverser le classement. De plus, {inverse} provoque laffichage du classement inversé. Par exemple {par date} commence par les articles les plus anciens ; avec {par date}{inverse} on commence la liste avec les articles les plus récents. Classer les résultats 1/3

153 Classer par numéro. (SPIP 1.3) Lorsquon réalise le classement selon un élément de texte (par exemple le titre), le classement est réalisé par ordre alphabétique. Cependant, pour forcer un ordre daffichage, on peut indiquer un numéro devant le titre, par exemple : « 1. Mon premier article », « 2. Deuxième article », « 3. Troisième... », etc ; avec un classement alphabétique, le classement de ces éléments donnerait la série « 1, 10, 11, 2, 3... ». Pour rétablir le classement selon les numéros, on peut utiliser le critère : {par num critère} Classer les résultats 2/3

154 Par exemple : affiche les articles dune rubrique classés selon lordre chronologique inversé (les plus récents au début, les plus anciens à la fin), et : les affiche selon lordre alphabétique de leur titre ; enfin : les affiche selon lordre du numéro de leur titre (remarque : loption {par num titre} ne fonctionne pas pour les plus anciennes versions de MySQL, antérieures à la version 3.23). Classer les résultats 3/3

155 On peut classer selon plusieurs critères (dès SPIP 1.8) : On indique ainsi des ordres de classement consécutifs. On peut spécifier autant de critères que nécessaire. Par exemple {par critère1, critère2}. {par date, titre} triera les résultats par date puis les résultats ayant la même date seront triés par titre. Les résultats seront dabord triés selon le critère1, puis le critère2 pour les résultats ayant le même critère1. Classer selon plusieurs critères 1/4

156 Avec [SPIP 1.8.2] on peut spécifier Classer selon plusieurs critères 2/4 plusieurs critères {par...} pour une boucle pour arriver au même résultat. Par exemple : {par date, titre} est équivalent à lexemple précédent. {par date} {par titre}

157 Remarque : Quand on utilise plusieurs critères de tri, Cest pourquoi [SPIP 1.8.2] introduit Par exemple : le critère {inverse} ne sapplique quau critère de tri placé juste avant. la notation {!par...} qui inverse un critère de tri en particulier. {!par date} {par num titre} trie par : date décroissantes puis par numéros croissants dans le titre pour les résultats ayant la même date. Classer selon plusieurs critères 3/4

158 [(#TITRE|supprimer_numero)] Classe les articles : par ordre de titre puis par numéro. Classer selon plusieurs critères <BOUCLE_articles(ARTICLES) {id_rubrique} {par num titre}{!par date}> [(#TITRE|supprimer_numero)] Classe les articles : par numéro puis puis ceux portant un numéro identique seront classés par date inverse. 4/4

159 Quelques critères intéressants… {inverse} {par hasard} {par date} {par visites} {par popularité} Exercice : établissez les listes suivantes pour les articles dun site : 10 articles les plus récents 10 articles les plus anciens 10 articles les plus visités 10 articles les moins visités 10 articles les plus populaires 10 articles les moins populaires 10 articles au hasard Distinguer la POPULARITE, le NOMBRE TOTAL DE VISITES et le NOMBRE MOYEN DE VISITES dun article, dune rubrique, dun site avec SPIP : http://icp.ge.ch/sem/cms-spip/spip.php?article250

160 {critère », « = », « <= ». Tous les critères de classement (tels que tirés de la base de données) peuvent également être utilisés pour limiter le nombre de résultats. Par exemple : affiche larticle dont le numéro est 5 (utile pour mettre en vedette un article précis sur la page daccueil). affiche les articles du secteur numéro 2. Expressions régulières. Très puissant (mais nettement plus complexe à manipuler), le terme de comparaison « == » introduit une comparaison selon une expression régulière. Par exemple : sélectionne les articles dont le titre commence par « a » ou « A ». Comparaisons, égalités 1/4

161 Négation. (SPIP 1.2) On peut utiliser la notation {xxx != yyy}, le ! Correspondant à la négation (opérateur logique NOT). sélectionne les articles dont le titre ne commence pas par « a » ou « A ». sélectionne les articles qui nappartiennent pas au secteur numéro 2. Pour faciliter lutilisation des comparaisons sur les dates, on a ajouté des critères : Comparaisons, égalités 2/4 age et age_redac correspondent respectivement à lancienneté de la publication et de la première publication dun article, en jours : {age<30} sélectionne les éléménts publiés depuis un mois ; les critères mois, mois_redac, annee, annee_redac permettent de comparer avec des valeurs fixes ({annee<=2000} pour les éléments publiés avant la fin de lannée 2000).

162 On peut combiner plusieurs de ces critères pour effectuer des sélections très précises. Par exemple : affiche les articles du secteur 2, à lexclusion de ceux de la rubrique 3, et publiés depuis moins de 30 jours. Astuce. Le critère age est très pratique pour afficher les articles ou les brèves dont la date est située « dans le futur », avec des valeurs négatives (à condition davoir sélectionné, dans la Configuration précise du site, loption « Publier les articles postdatés »). Par exemple, ce critère permet de mettre en valeur des événements futurs. {age<0} sélectionne les articles ou les brèves dont la date est située dans le futur (« après » aujourdhui)... Comparaisons, égalités 3/4

163 (SPIP 1.3) Âge par rapport à une date fixée. Le critère age est calculé par rapport à la date daujourdhui (ainsi {age<30} correspond aux articles publiés depuis moins dun mois par rapport à aujourdhui). Le critère age_relatif compare la date dun article ou dune brève à une date « courante » ; par exemple, à lintérieur dune boucle ARTICLES, on connaît déjà une date pour chaque résultat de la boucle, on peut donc sélectionner par rapport à cette date (et non plus par rapport à aujourdhui). Par exemple : Comparaisons, égalités 4/4 #TITRE <BOUCLE_suivant(ARTICLES){id_rubrique}{age_relatif<=0} {exclus}{par date}{0,1}> Article suivant: #TITRE #TITRE <BOUCLE_suivant(ARTICLES){id_rubrique}{age_relatif<=0} {exclus}{par date}{0,1}> Article suivant: #TITRE la BOUCLE_suivant affiche un seul article de la même rubrique, classé par date, dont la date de publication est inférieure ou égale à la date de l«article_principal» ; cest-à-dire larticle de la même rubrique publié après larticle principal.

164 Affichage dune partie des résultats {branche} : A partir de [SPIP 1.8.2], limite les résultats - pour des boucles ayant un #ID_RUBRIQUE - à la branche actuelle (la rubrique actuelle et ses sous-rubriques). retournera tous les articles de la rubrique actuelle et de ses sous-rubriques. retournera tous les articles qui ne sont pas dans la rubrique actuelle ou ses sous-rubriques, Par exemple : 1/15

165 Affichage dune partie des résultats On peut utiliser le critère {branche?} optionnel pour ne lappliquer que si une rubrique est sélectionnée dans le contexte (une boucle englobante ou lurl fournie un id_rubrique). Par exemple : retournera tous les articles de la rubrique actuelle et de ces sous-rubriques si il y a un id_rubrique dans le contexte, sinon, tous les articles du site. 2/15

166 Affichage dune partie des résultats {doublons} ou { unique} (ces deux critères sont rigoureusement identiques) permettent dinterdire laffichage des résultats déjà affichés dans dautres boucles utilisant ce critère. {doublons xxxx} à partir de [SPIP 1.8], on peut avoir plusieurs jeux de critères {doublons} indépendants. Les boucles ayant {doublons rouge} nauront aucune incidence sur les boucles ayant {doublons bleu} comme critère. 3/15

167 Affichage dune partie des résultats {exclus} permet dexclure du résultat lélément (article, brève, rubrique, etc.) dans lequel on se trouve déjà. Par exemple, lorsque lon affiche les articles contenus dans la même rubrique, on ne veut pas afficher un lien vers larticle dans lequel on se trouve déjà. 4/15

168 5/15 Affichage dune partie des résultats

169 6/15 Affichage dune partie des résultats

170 7/15 Affichage dune partie des résultats

171 [ (#DATE|nom_jour) [(#DATE|affdate)] ] [ (#LOGO_ARTICLE||reduire_image{150}) ] [ (#SURTITRE) ] [ (#TITRE|supprimer_numero) ] (#TITRE|supprimer_numero) ] --> [ (#SOUSTITRE) ] [ (#NOM_SITE) ] [ (#CHAPO) ] [(#TEXTE|typo_couleur|reduire_image{400,0})] [ : (#PS) ] [ (#NOTES) ] Adaptation du squelette SARKA pour un paramétrage par mots-clés, fichier sommaire-2.html http://icp.ge.ch/sem/cms-spip/spip.php?article277 Choisir des articles avec un mot-clé Extrait du fichier sommaire-2.html Affichage dune partie des résultats 8/15

172 Pour empêcher l'affichage d'articles avec le mot clef : pas_sommaire Adaptation du squelette SARKA pour un paramétrage par mots-clés, fichier sommaire-2.html http://icp.ge.ch/sem/cms-spip/spip.php?article277 Exclure des articles avec un mot-clé Affichage dune partie des résultats 9/15

173 {a,b} où a et b sont des chiffres. Ce critère permet de limiter le nombre de résultats. a indique le résultat à partir duquel on commence laffichage (attention, le premier résultat est numéroté 0 - zéro) ; b indique le nombre de résultats affichés. Par exemple {0,10} affiche les dix premiers résultats ; {4,2} affiche les deux résultats à partir du cinquième (inclus). {debut_xxx,b} est une variante très élaborée de la précédente. Elle permet de faire commencer la limitation des résultats par une variable passée dans lURL (cette variable remplace ainsi le a que lon indiquait précédemment). Cest un fonctionnement un peu compliqué, que fort heureusement on na pas besoin dutiliser trop souvent. Affichage dune partie des résultats 10/15

174 La variable passée dans lURL commence forcément par debut_xxx (où xxx est un mot choisi par le webmestre). Ainsi, pour une page dont lURL est : Affichage dune partie des résultats petition.php?id_article=13&debut_signatures=200 avec un squelette (petition.html) contenant par exemple : on obtient la liste des 100 signatures à partir de la 200-ième. petition.php?id_article=13&debut_signatures=200 avec un squelette (petition.html) contenant par exemple : on obtient la liste des 100 signatures à partir de la 200-ième. petition.php?id_article=13&debut_signatures=300 on obtient la liste des 100 signatures à partir de la 300-ième. petition.php?id_article=13&debut_signatures=300 on obtient la liste des 100 signatures à partir de la 300-ième. Avec lURL : 11/15

175 {a/b} où a et b sont des chiffres. Ce critère permet dafficher une partie a (proportionnellement) des résultats en fonction dun nombre de « tranches » b. Par exemple : {1/3} affiche le premier tiers des résultats. Ce critère est surtout utile pour présenter des listes sur plusieurs colonnes. Pour obtenir un affichage sur deux colonnes, il suffit de créer une première boucle, affichée dans une case de tableau, avec le critère {1/2} (la première moitié des résultats), puis une seconde boucle dans une seconde case, avec le critère {2/2} (la seconde moitié des résultats). Affichage dune partie des résultats 12/15

176 {a,n-b} à partir de [SPIP 1.8], est une variante de {a,b} On limite laffichage en fonction du nombre de résultats dans la boucle : a est le résultat à partir duquel commencer à faire laffichage ; b indique le nombre de résultats à ne pas afficher à la fin de la boucle. Par exemple : {0,n-10} affiche tous les résultats de la boucle sauf les 10 derniers. Affichage dune partie des résultats 13/15

177 {n-a,b} à partir de [SPIP 1.8], est le pendant de {a, n-b} : On limite à b résultats en commençant laffichage au a ème résultat avant la fin de la boucle. Par exemple : {n-20,10} affiche 10 résultats en partant du 20e résultat avant la fin de la boucle. Affichage dune partie des résultats 14/15

178 Attention. Lutilisation du critère {doublons} avec ce critère est périlleuse. Par exemple : Affichage dune partie des résultats 15/15 #TITRE #TITRE #TITRE #TITRE naffichera pas tous les articles de la rubrique ! Imaginons par exemple quil y ait au total 20 articles dans notre rubrique. La BOUCLE_prem va afficher la première moitié des articles, cest-à-dire les 10 premiers, et interdire (à cause de {doublons}) de les réutiliser. La BOUCLE_deux, elle, va récupérer la deuxième moitié des articles de cette rubrique qui nont pas encore été affichés par la BOUCLE_prem ; donc, la moitié des 10 articles suivants, cest-à-dire les 5 derniers articles de la rubrique. Vous avez donc « perdu » 5 articles dans lopération...

179 Affichage entre les résultats 1/1 {"inter"} permet dindiquer un code HTML (ici, inter) inséré entre les résultats de la boucle. Par exemple, pour séparer une liste dauteurs par une virgule, on indiquera :

180 Le système de pagination http://www.spip.net/fr_article3367.html 1/6

181 Lorsquune boucle renvoie plusieurs dizaines darticles (ou, pour une pétition, plusieurs milliers de signatures), il nest pas souhaitable, voire impossible, de tout afficher sur une seule page. On préférera alors répartir les résultats en plusieurs pages, avec un système de navigation page à page. Sil est possible de réaliser cela avec des boucles SPIP ordinaires, cest tout de même relativement complexe. Aussi SPIP 1.9 introduit-il un système simplifié de pagination des résultats dune boucle. Le système de pagination 2/6

182 Au plus simple, ce système est composé dun critère et dune balise : le critère {pagination} sajoute sur la boucle à paginer ; la balise #PAGINATION, placée dans une des parties optionnelles (« avant » ou « après ») de la boucle, affiche la « pagination ». #PAGINATION #TITRE Si le site comporte 90 articles publiés, cette boucle affichera la liste des dix plus anciens articles, surplombée de liens conduisant vers la page qui affiche les dix suivants, les dix daprès, etc. Le système de pagination 3/6

183 Ancres de pagination La balise #PAGINATION comporte une ancre html qui permet au navigateur dafficher directement la partie de la page qui est paginée ; toutefois si lon veut mettre les liens de pagination en dessous de la liste des articles, il faut pouvoir placer lancre au-dessus de la liste. Cest à cela que sert la balise #ANCRE_PAGINATION, qui retourne lancre en question, et interdit à la balise #PAGINATION suivante dafficher son ancre. #ANCRE_PAGINATION #TITRE #PAGINATION Le système de pagination 4/6

184 Le nombre total de résultats : Dans une boucle avec le critère {pagination}, #TOTAL_BOUCLE affiche le nombre déléments effectivement retournés, cest-à-dire 10 sur les pages pleines, et 10 ou moins sur la dernière page de résultats. Pour afficher le nombre déléments qui auraient été retournés si le critère {pagination} navait pas été là, utilisez la balise #GRAND_TOTAL. #ANCRE_PAGINATION #TITRE Il y a au total #GRAND_TOTAL articles, cette page en affiche #TOTAL_BOUCLE indiquera : « Il y a au total 1578 articles, cette page en affiche 10. » Le système de pagination 5/6

185 Changer le pas de la {pagination} Le nombre standard de 10 éléments par page peut être modifié par un paramètre supplémentaire dans le critère. Ainsi #TITRE retournera les titres de cinq articles à partir de debut_page. Le paramètre en question peut lui-même être composé comme on le souhaite à partir dautres balises, notamment #ENV{xx}, ce qui permet de faire un affichage à la demande très complet. Le système de pagination 6/6

186 dautres squelettes http://www.spip.net/fr_article1828.html Lorsque lon a des éléments de texte et des boucles communs à plusieurs fichiers, on peut vouloir extraire ces éléments des pages où ils se trouvent, les installer dans un fichier séparé, et les appeler depuis les autres squelettes. De cette façon, le code commun est regroupé dans un unique fichier, ce qui facilite notamment les modifications qui concernent plusieurs squelettes dun seul coup. 1/4

187 On installe ainsi typiquement, dans de tels fichiers séparés appelés depuis de nombreux squelettes, des éléments tels que : Les déclarations dentête des pages HTML (appel des javascript, des feuilles de style...), Les éléments de navigation communs à la plupart des pages (en haut de page, en colonne de gauche...), La bannière supérieure (logo, liens vers les crédits du site, la page de contact...), Un pied de page... Inclure dautres squelettes 2/4

188 3/4

189 4/4

190 Plugin Crayon http://www.spip-contrib.net/Les-Crayons 1/4

191 Plugin « crayons » Les crayons Un plugin pour une édition directe sur le site public mercredi 23 avril 2008, par Fil, toggg http://www.spip-contrib.net/Les-Crayons Ce plugin permet déditer les articles directement sur le site public. #EDIT{xxx} dans la class dun élément entourant la balise #XXX permet de la rendre éditable à laide du plugin crayons #INSERT_HEAD La balise #INSERT_HEAD (depuis SPIP 1.9.1), elle : doit se situer entre les balises et de vos squelettes. permet à SPIP, ainsi quaux plugins éventuels, dajouter du contenu entre ces deux balises html. 2/4 Référence :

192 Plugin « crayons » Extrait de /squelettes-dist/ de SPIP2 : [(#LOGO_ARTICLE||image_reduire{200,200})] [ (#SURTITRE) ] #TITRE [ (#SOUSTITRE) ]... … 3/4

193 Plugin « crayons » Extrait de /squelettes-dist/ de SPIP2 … suite : [ (#CHAPO|image_reduire{500,0}) ] [ (#TEXTE|image_reduire{500,0}) ] [ : [(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})] ] [ (#PS|image_reduire{500,0}) ] … 4/4

194 [ option avant (#BALISE|filtre1|filtre2|...|filtren) option après ] Les filtres de SPIP http://www.spip.net/fr_article901.html Nous avons vu dans la syntaxe des balises SPIP quil était possible de modifier le comportement et laffichage des balises en leur attribuant des filtres. [ option avant (#BALISE|filtre1|filtre2|...|filtren) option après ] Les filtres 1, 2,..., n sont appliqués successivement à la #BALISE.

195 Les filtres de mise en page 1/1 Les filtres de mise en page suivants (majuscules, justifier...) ne sont plus conseillés. Il est recommandé de leur préférer, désormais, lutilisation des styles CSS correspondants. majuscules fait passer le texte en majuscules. Par rapport à la fonction de PHP, majuscules sapplique également aux lettres accentuées. justifier fait passer le texte en justification totale ( ). aligner_droite fait passer le texte en justification à droite ( ). aligner_gauche fait passer le texte en justification à gauche ( ). centrer centre le texte ( ).

196 Les filtres des dates 1/2 Les filtres suivants sappliquent aux dates ([(#DATE|affdate)] par exemple) : affdate affiche la date sous forme de texte, par exemple «13 janvier 2001». jour affiche le jour (en nombre). mois affiche le mois (en nombre). annee affiche lannée. [SPIP 1.0.2] heures affiche les heures dune date (les dates fournies par SPIP contiennent non seulement le jour, mais également les horaires).

197 Les filtres des dates 2/2 [SPIP 1.0.2] minutes affiche les minutes dune date. [SPIP 1.0.2] secondes affiche les secondes. nom_jour affiche le nom du jour (lundi, mardi...). nom_mois affiche le nom du mois (janvier, février...). saison affiche la saison (hiver, été...).

198 Filtres de texte 1/2 La plupart de ces filtres ont été introduits dans la version [SPIP 1.4] liens_ouvrants transforme les liens SPIP qui donnent vers des sites extérieurs en liens de type « popup », qui ouvrent dans une nouvelle fenetre ; cest léquivalent du target=blank du HTML. N.B. : les développeurs de SPIP estiment quil sagit en général dune impolitesse, car les internautes savent très bien sils ont envie ou pas douvrir une nouvelle fenêtre - or ce système le leur impose. Mais la demande était trop forte, et nous avons craqué ;-) supprimer_numero sert à éliminer le numéro dun titre, si par exemple on veut faire des tris darticles {par num titre} mais ne pas afficher les numéros (car ils ne servent quà ordonner les articles). Le format des préfixes numerotés est « XX. titre », XX étant un nombre à n chiffres (illimité). PtoBR transforme les sauts de paragraphe en simples passages a la ligne, ce qui permet de « resserrer » une mise en page, par exemple à lintérieur dun sommaire

199 Filtres de texte 2/2 taille_en_octets permet de transformer un nombre doctets (25678906) en une chaîne de caractères plus explicite (« 24.4 Mo »). supprimer_tags est une suppression basique et brutale de tous les textebrut sapparente au filtre supprimer_tags, mais il agit de manière un peu plus subtile, transformant notamment les paragraphes et en sauts de ligne, et les espaces insécables en espaces simples. Utilisation, par exemple, pour faire un descriptif META à partir du #DESCRIPTIF : [ ]

200 Filtres de logos 1/3 fichier [SPIP 1.4]. Affecté à un logo, ce filtre permet de récupérer directement le nom de fichier correspondant au logo.

201 Filtres de logos 2/3 si le premier « filtre » nest pas un alignement, SPIP considère quil sagit dun URL et fait un lien du logo vers cette adresse ; si le premier filtre est un alignement, SPIP considère que le deuxième « filtre » est un URL ; les filtres suivants sont de vrais filtres au sens habituel (y compris des filtres « maison » déclarés dans mes_fonctions.php ; pour appliquer un filtre quelconque sans mettre dURL, il faut mettre deux barres. Par exemple : permet de récupérer le logo dans la variable php $logo, pour traitement ultérieur (voir ci-dessous pour la signification de |texte_script). ||autres filtres (deux barres) : Contrairement aux versions précédentes, [SPIP 1.4] permet de passer des filtres « maison » sur les logos : la logique est un peu tordue, car il fallait respecter la compatibilité avec SPIP 1.3. Lanalyse se déroule comme suit :

202 Filtres de logos 3/3 SPIP 1.7.1 introduit le filtre reduire_image, qui permet de forcer une taille maximale daffichage des logos. Ce filtre sutilise par exemple sur un logo darticle de la façon suivante : [(#LOGO_ARTICLE|right||reduire_image{130})] Dans cet exemple, logo de larticle apparaît aligné à droite, à une taille maximale de 130 pixels. NB. Si loption « création de vignettes » est activée dans la configuration du site, ces logos réduits seront des fichiers dimages spécifiques calculés automatiquement par le serveur (idéalement, avec lextension GD2 installée sur le serveur), pour les formats acceptés par le serveur (avec GD2, habituellement, les formats JPG et PNG). Sinon, cest une version complète de limage qui est affichée, mais avec une taille daffichage fixée directement en HTML.

203 Filtres techniques 1/2 Ces filtres ont été introduits par [SPIP 1.4]. entites_html transforme un texte en entités HTML, que lon peut donc implanter dans un formulaire, exemple : [ (#DESCRIPTIF| entites_html) ] texte_script transforme nimporte quel champ en une chaîne utilisable en PHP ou Javascript en toute securité, exemple :. Attention : utilisez bien le caractère ' et non " : en effet, dans le second cas, si votre texte contient le symbole $, le résultat peut être catastrophique (affichage partiel, affichage dautre chose, plantage php, etc.).

204 Filtres techniques 2/2 attribut_html rend une chaîne utilisable sans dommage comme attribut HTML ; par exemple, si lon veut ajouter un texte de survol au lien normal vers un article, on utilisera : <a href="#URL_ARTICLE" [ title = "(#DESCRIPTIF|supprimer_tags| attribut_html)" ]>#TITRE. [SPIP 1.6] introduit le filtre |sinon, qui indique ce quil faut afficher si lélément « filtré » est vide : ainsi [(#TEXTE|sinon{"pas de texte"})] affiche le texte ; si celui-ci est vide, affiche « pas de texte ».

205 Ajouter ses propres fonctions 1/4 Les filtres de SPIP sont des fonctions PHP à une seule variable. Vous pouvez utiliser directement les fonctions habituelles de PHP, mais également créer les vôtres, sur le modèle : <?php function mon_filtre($texte){ $texte = (bidouillages en PHP)...; return $texte; } ?> <?php function mon_filtre($texte){ $texte = (bidouillages en PHP)...; return $texte; } ?>

206 Ajouter ses propres fonctions 2/4 Afin de ne pas avoir à modifier des fichiers de SPIP (qui risqueraient dêtre écrasés lors dune prochaine mise à jour), vous pouvez installer vos fonctions personnelles dans un fichier mes_fonctions.php : si SPIP repère un fichier ayant ce nom, il linclut automatiquement. Par exemple, ARNO* a développé le filtre enlettres, qui nest pas inclus dans la distribution standard de SPIP. Ce filtre écrit un nombre en toutes lettres ( [(#DATE|annee|enlettres)] = « deux mille deux ») ; ce filtre peut être téléchargé sur http://www.uzine.net/spip_contrib/a... ; il suffit de lajouter dans votre fichier mes_fonctions.php pour lutiliser.

207 Ajouter ses propres fonctions 3/4 Depuis [SPIP 1.5], il est possible de passer des paramètres dans les filtres. La syntaxe est [(#BALISE|filtre{arg1, arg2}|...)] Le filtre doit être défini de la manière suivante dans mes_fonctions.php : function filtre($texte, $arg1='valeur par defaut1', $arg2='valeur par défaut 2') {....calculs.... return (une chaîne de caractères); }

208 Ajouter ses propres fonctions 4/4 On peut ainsi appeler nimporte quelle fonction php, ou sappuyer sur des fonctions définies dans SPIP ou dans mes_fonctions.php, pour peu quelles respectent lordre des arguments (le texte à traiter doit être impérativement le premier argument). Par exemple, pour couper le texte à une longueur donnée (50 caractères), on pourra utiliser [(#TEXTE|couper{50})].


Télécharger ppt "Les Boucles et Balises SPIP 2.0.6 Prendre en compte les éléments et relations : Maîtriser la syntaxe et exploiter les générateurs de boucles et balises."

Présentations similaires


Annonces Google