Squelettes pour groupes et par groupes de mots

Utiliser des fichiers mots-XX.html et groupes-XX.html pour personnaliser ses squelettes mots en fonction des groupes de mots-clés et créer des squelettes pour les groupes de mots-clés eux-mêmes.

Une contrib — dans sa première partie — pour satisfaire une demande récurrente. Avoir des squelettes de mots en fonction des groupes de mots et des squelettes de groupe selon les groupes à la façon des squelettes article-XX.html pour les articles de la rubrique n° XX.

La première partie peut être utilisée indépendamment pour se contenter d’avoir un plusieurs squelettes particuliers à tel ou tel type de mots-clés.


Un supplément (février 2009) sur comment étendre la recherche sur vos nouvelles pages groupes de mots-clés.

Première phase : créer des squelettes de mot-clé par groupe de mots

Très simple à utiliser. Il suffit de copier votre fichier mot.html en mots.html. C’est ce fichier mots.html qui vous servira à créer les fichiers mots-10.html (pour les mots du groupe de mots-clés n° 10), mots-XX.html etc. [et les fichiers groupes et groupe-XX.html de la — facultative — deuxième phase] lorsque vous désirez un traitement différent pour des mots-clés d’un groupe donné. En effet, je veux bien mélanger mes mots-clés choux et carottes du groupe légumes, mais n’est pas envie que les mots-clés limaces et vers blancs du groupe parasites viennent les bouffer.

Quant au malheureux fichier mot.html, vous y substituez tout le contenu par cette boucle on ne peut plus simple [1] :

La version depuis 1.9x

<BOUCLE_mot_principal(MOTS){id_mot}{doublons}>
	[(#CHEMIN{mots-#ID_GROUPE.html}|?{' ',''})
	<INCLURE{fond=mots-#ID_GROUPE}{id_mot}{self=#SELF}>]
	[(#CHEMIN{mots-#ID_GROUPE.html}|?{'',' '})
	<INCLURE{fond=mots}{id_mot}{self=#SELF}>]
</BOUCLE_mot_principal>

La balise #CHEMIN est utilisée pour tester — avec le filtre |? — la présence du fichier à deux reprises. La première pour appeler le fichier spécifique au groupe, s’il est présent. La seconde pour faire appeler le fichier de base si la premier appel était négatif.

Le critère {self=#SELF} est nécessaire si on veut utiliser la balise #PAGINATION dans le squelette inclus.

La version Spip 1.8.2-1.8.3

Il s’agissait précédemment de la syntaxe depuis Spip 1.9. Pour la 1.8.2 et 1.8.3, il faut utiliser la syntaxe :

<BOUCLE_mot_principal(MOTS){id_mot}{doublons}>
	[(#DOSSIER_SQUELETTE{mots-#ID_GROUPE.html}|?{' ',''})
	<INCLURE{page.php3}{fond=mots-#ID_GROUPE}{id_mot}>]
	[(#DOSSIER_SQUELETTE{mots-#ID_GROUPE.html}|?{'',' '})
	<INCLURE{page.php3}{fond=mots}{id_mot}>]
</BOUCLE_mot_principal>

Phase seconde : créer des pages de groupes de mots et pouvoir les différencier

Après avoir si facilement créé une page mot spécifique à (éventuellement) chaque groupe de mots, vous voulez aller plus loin et créer une page pour vos groupes.

1re partie : la préparation

Il suffit de reprendre la première phase ; soit créer un fichier groupe.html un peu similaire à notre mot.html modifié précédemment. Ici {id_groupe=#ENV{groupe}} va récupérer l’id du groupe dans l’url qui sera de la forme http://monsite/spip.php?page=groupe[&groupe=(#ID_GROUPE)]

La version depuis 1.9x

<BOUCLE_groupe_principal(GROUPES_MOTS){id_groupe=#ENV{groupe}}{doublons}>
	[(#CHEMIN{groupes-#ID_GROUPE.html}|?{' ',''})
	<INCLURE{fond=groupes-#ID_GROUPE}{id_groupe}{self=#SELF}>]
	[(#CHEMIN{groupes-#ID_GROUPE.html}|?{'',' '})
	<INCLURE{fond=groupes}{id_groupe}{self=#SELF}>]
</BOUCLE_groupe_principal>

Ici encore, vérification de la présence d’un fichier groupes-XX.html sinon utilisation de groupes.html. Ajout optionnel aussi du {self=#SELF} pour la pagination.

L’inévitable version Spip 1.8.2-1.8.3

Il s’agissait, précédemment, encore de la syntaxe depuis Spip 1.9. Donc, pour la 1.8.2 et 1.8.3, il faut utiliser la syntaxe :

<BOUCLE_groupe_principal(GROUPES_MOTS){id_groupe=#ENV{groupe}} {doublons}>
	[(#DOSSIER_SQUELETTES{groupe-#ID_GROUPE.html}|?{' ',''})
	<INCLURE{page.php3}{fond=groupe-#ID_GROUPE}{id_mot}>]
	[(#DOSSIER_SQUELETTES{groupe-#ID_GROUPE.html}|?{'',' '})
	<INCLURE{page.php3}{fond=groupe}{id_mot}>]
</BOUCLE_mot_principal>

2e partie : créer la page « groupe de mots »

Un fichier groupes.html sert à créer les fichiers groupes-10.html, groupes-XX.html etc. lorsque vous désirez un traitement différent pour un groupe donné de mots-clés. Il s’agit de partir de notre fichier mot.html de départ (de la dist/ par exemple) que vous avez copié sous le nom mots.html.

Lui-même est modifié en lui ajoutant une boucle BOUCLE_groupe_principal. Donc, vous faites une copie de votre fichier de base en groupes.html et ainsi vous modifiez :

<BOUCLE_mot_principal(MOTS){id_mot}{doublons}>

en

<BOUCLE_mot_principal(GROUPES_MOTS){id_groupe}{doublons}>

puis, un « Fil d’Ariane » (chemin hiérarchique utilisé dans les squelettes de la dist) — simplifié — à échanger :

[(#REM) Fil d'Ariane page groupes_mots ]
<div id="hierarchie">
	<a href="#URL_SITE_SPIP/"><:accueil_site:></a>
	&gt;<:mots_clefs:>[ &gt; (#TITRE|couper{80})]
</div>

Enfin, vous modifiez la boucle BOUCLE_articles [2] en BOUCLE_mots_groupe (puisque vous ne listez plus les articles attachés à un mot-clé mais les mots-clés d’un groupe donné :

[(#REM) ex Articles lies au mot-cle, devenu Mots lies au groupe ]
<B_mots_groupe>
<div class="contre-encart">
	<div class="liste-articles">
	#ANCRE_PAGINATION
	<h2 class="invisible"><:articles:></h2>
	<BOUCLE_mots_groupe(MOTS){id_groupe}{par titre}{pagination 20}>
		<div class="titre">
		<a href="#URL_MOT">#TITRE</a>
		[((#DESCRIPTIF))]
		</div>
	</BOUCLE_mots_groupe>
	[<p class="pagination">(#PAGINATION)</p>]
	</div>
</div>

Il s’agit ici d’un copié-collé par rapport au squelette 1.9.1 de la dist ; vous devez donc modifier/supprimer les "class" de l’exemple en fonction de votre squelette.

3e partie : accéder à votre page de « groupe de mots »

Maintenant qu’il y a les données, vous devez afficher le chemin d’accès. Changez le « Fil d’Ariane » dans les fichiers mots.html et mots-XX.html :

[(#REM) Fil d'Ariane ]
<div id="hierarchie">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a>
&gt;<:mots_clefs:>
<BOUCLE_ariane(GROUPES_MOTS){id_groupe}>&gt; 
	<a href="[(#URL_PAGE{groupe})][&groupe=(#ID_GROUPE)]">
	[(#TITRE|couper{80})]</a>
</BOUCLE_ariane>
[ &gt; (#TITRE|couper{80})]
</div>

Il ne vous reste plus qu’à affiner le squelette et c’est tout bon.

Ainsi, autant pour les squelettes mots.html et groupe.html que mots-XX.html et groupes-XX.html vous pouvez modifier le « menu de navigation mots-cles » [ici de la dist] pour avoir directement la page d’un groupe plutôt que la page du 1er mot du groupe. :

[(#REM) Menu de navigation mots-cles : les autres groupes avec un lien sur la page du groupe ]
<B_groupes_freres>
<div class="divers">
<h2 class="menu-titre">groupes de mots-cl&eacute;s</h2>
<ul>
	<BOUCLE_groupes_freres(GROUPES_MOTS){par titre}{doublons}>
	<li>[(#EXPOSE{<strong>,<a href="[(#URL_PAGE{groupe})][&groupe=
 (#ID_GROUPE)]">})] [(#TITRE)] [(#EXPOSE{</strong>,</a>})]</li>
	</BOUCLE_groupes_freres>
</ul>
</div>
</B_groupes_freres>

Il s’agit ici aussi d’un copié-collé par rapport au squelette 1.9.1 de la dist ; vous devez donc... J’y ai rajouté la possibilité d’exposer le groupe dans lequel on se trouve (valable pour la page mot comme pour la page groupe).

En 1.8.2/1.8.3 il faut bien sur utiliser la syntaxe page.php3?fond= à la place de spip.php?page=.


Supplément recherche Spip (par denisb)

En Spip 1.8 comme en 2.0, les pages des groupes de mots-clés donnent satisfaction et sont recensées par les moteurs de recherche si elles sont significatives. Pourtant, la recherche par le moteur interne de Spip ne les fait pas apparaitre !

Deux petites manœuvres à faire : premièrement, permettre l’affichage des réultats des recherches en modifiant recherche.html. Rien n’apparait encore car il faut aussi modifier le pipeline ’rechercher_liste_des_champs’ dans le fichier /ecrire/inc/rechercher.php (remerciements à DenisB).

Étape 1 : rajout dans la page recherche.html (ici, d’après le squelettes-dist de la 2.0.3)

 [(#REM) Groupes trouves ]
 <B_groupes>
   <div class="menu">
   #ANCRE_PAGINATION
   <h2><:info_dans_groupe:> (#GRAND_TOTAL)</h2>
   <ul>
 <BOUCLE_groupes(GROUPES_MOTS) {recherche} {par points} {inverse}
 {pagination 5}>
   <li><a href="[(#URL_PAGE{groupe}|parametre_url{groupe,#ID_GROUPE})]"[ title="(#TITRE|attribut_html|couper{80})"]>[(#TEXTE|couper{80})]</a></li>
 </BOUCLE_groupes>
   </ul>
   [<p class="pagination">(#PAGINATION)</p>]
   </div>
 </B_groupes>

href="[(#URL_PAGE{groupe}|parametre_url{groupe,#ID_GROUPE})]"
et href="[(#URL_PAGE{groupe})][&groupe=(#ID_GROUPE)]"
utilisé plus haut, sont équivalents. L’écriture avec « parametre_url » étant plus universelle.

Étape 2 : dans mes_options.php :

 function rechercher_dans_groupes($tables) {
   $tables['groupes_mot']['titre'] = 8;
   $tables['groupes_mot']['texte'] = 8;
   $tables['groupes_mot']['descriptif'] = 8;
   return $tables;
 }

 $GLOBALS['spip_pipeline']['rechercher_liste_des_champs'] .=
 '|rechercher_dans_groupes';

Ensuite, vous videz le cache et supprimez tmp/charger_pipelines.php.

Cette étape est équivalente à rajouter le code ci-après dans le pipeline 'rechercher_liste_des_champs' (dans ecrire/inc/rechercher.php) mais sans avoir à modifier le core [3].

			'groupes_mot' => array(
    		    'titre' => 8, 'texte' => 8, 'descriptif' => 8
        	),

Il ne vous reste plus qu’à pondérer — de 1 à 8, du plus faible au plus fort — les champs à votre convenance. Ici « 8 » est saisi par défaut pour l’exemple et vous pouvez vous inspirer des tableaux de ecrire/inc/rechercher.php.

Notes

[1Merci à Pierre Andrews de l’aide pour retrouver le chemin dans les fichiers où je m’égarais de par la malédiction de sainte Axe.

[2Ici, /dist de la 1.9.1. Vous pouvez supprimer les données sur la pagination si vous le désirez.

[3Voir aussi : Prendre en compte un nouveau champ dans les recherches de Mathieu Marcillaud.

La contribution offre donc l’analogie article/article-XX et rubrique/rubrique-XX — hormis l’utilisation du pluriel — avec les graphies mots/mots-XX et groupes/groupes-XX.


Quelques exemples pour mieux expliciter cet article

  • d’abord des groupes différenciés :
    • groupe 40 (http://hortical.com/spip.php?page=g...) où les mots sont d’abord regroupés par descriptifs (grâce au filtre « unique ») puis classés par titre avec pour chacun un certain nombre d’articles correspondants pris au hasard pour rappel.
    • groupe 19 (http://hortical.com/spip.php?page=g...) liste des articles avec exposition des articles ayant le seul et unique mot du groupe. Ici, une plante est nectarifère ou non (même si la réalité est plus complexe).
    • groupe 27 (http://hortical.com/spip.php?page=g...) banale liste d’articles liés à chaque mot, sans pagination.
  • ensuite des pages mots différentes selon le groupe les contenants :

À vos boucles.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom