[*La modif de backend.html et de exec/synchro.php *]
situation
Je gère un site « maman_poule » dans lequel je souhaite faire apparaître les productions de sites « poussins ».
Problème : les contenus des différentes rubriques de ces sites ne sont pas tous exempts de... scories (les productions des poussins en difficultés sont parfois surprenantes... dans leur diversité) et le nombre de rubriques y est volontairement restreint.
Dans ces conditions, décider de syndiquer c’est donc choisir entre tout-ou-rien et/ou bloquer-débloquer les liens un par un tous les soirs...
solution proposée : syndiquer les mot-clef
préparation :
- 1/ sur chaque site poussin, je crée si ce n’est déjà fait un dossier « squelettes » à la racine du site
- 2/ je recopie le « backend.html » du dossier « dist » dans mon dossier « squelettes »
- 3/ dans le dossier squelettes, je renomme backend.html en backend-mots.html
ensuite,
- 4/ j’édite backend-mots.html :
je remplace
BOUCLE_10recents(ARTICLES) {lang ?}{branche ?}{id_mot ?}{par date}{inverse}{0,10}{unique}
par
BOUCLE_10recents(ARTICLES) {lang ?}{id_mot ?}{par date}{inverse}{0,10}{unique}
ainsi que
BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{id_mot ?}{par date}{inverse}{age<3}{unique}
par
BOUCLE_tres_recents(ARTICLES){lang ?}{id_mot ?}{par date}{inverse}{age<3}{unique}
-
- Quelques explications...
- Dans la version d’origine, le critère branche retourne l’ensemble des articles de la rubrique ET de ses sous-rubriques. Comme il n’est pas possible d’appeler directement une branche en faisant par exemple branche=42 on passe la valeur de branche via l’environnement lors de l’appel de la fonction.
- Dans la version modifiée, s’agissant de mots-clefs et plus de rubriques, on pourrait écrire l’ID du mot clef qui nous intéresse « en dur » mais ça ne serait guère souple. Il est bien plus facile d’utiliser là encore le « ? », c’est à dire de faire une boucle générique puis, lors de l’appel de celle-ci, d’indiquer la valeur à mettre dans notre variable d’environnement.
- Quelques explications...
- 5/ enfin, je sauvegarde le tout et l’uploade en ftp sur le site poussins
- 6/ Là, je note le numéro d’id (xxx) du mot que je veux syndiquer (www.le_site_poussin.net/spip.php ?motxxx)
- 7/ puis, dans le site « maman_poule », je syndique le site poussin avec un lien vers "spip.php ?page=backend-mots&id_mot=xxx
pour aller un chouillat plus loin
Nous allons rendre la sélection de ces nouveaux backend accessibles aux rédacteurs sans avoir à noter de n° d’id sur un bout de papier...
Maintenant que mon fichiers backend-mot.html est sur chaque site « poussin », il convient d’informer les rédacteurs de cette nouvelle possibilité. On va leur permettre de faire du copier/coller :
- 8/ J’édite donc maintenant le fichier ecrire/exec/synchro.php
je repère la ligne « fin_cadre_relief() ; »
et juste au-dessus je colle :
///
/// Syndication par mot-clef
/// Suivi par RSS des différents "thèmes" disponibles
///
debut_cadre_relief("site-24.gif", false, "", _T('ical_titre_rss'));
/// suivi RSS par mot clef
/// chez nous le groupe des mots-clefs syndiqué = groupe 8
/// à faire : remplacer le blabla par une chaine dans le fichier lang
echo "<p>"._L("Vous pouvez aussi limiter la syndication aux thèmes qui vous intéressent :")."</p>";
// la partie importante
$query = "SELECT * FROM spip_mots WHERE id_groupe=\"8\" ORDER BY titre";
$result = spip_query($query);
if (spip_num_rows($result) > 0) {
echo "<ul>";
while($row=spip_fetch_array($result)){
$id_mot=$row['id_mot'];
$titre_mot = typo($row['titre']);
$titre = htmlspecialchars($titre_mot);
echo "<li>", http_href( generer_url_public('backend-mots', "id_mot=$id_mot"),
http_img_pack( 'feed.png', 'RSS', ' border="0" ') .' '.
$titre_mot, $titre),
"</li>\n";
}
echo "</ul>";
}
fin_cadre_relief();
// fin du hack
enfin, je sauvegarde le tout et l’uploade en ftp sur les sites « poussins » et sur le site « maman_poule ». Désormais, le rédacteur de passsage pourra accèder à la liste de nos « mots-clefs syndiqués » :
Aller encore plus loin : la syndication par langue de rédaction
Revenons en arrière et reprenons notre fichier backend-mots.html ; on y découvre que les boucles peuvent réagir à deux critères : non seulement le critère « id_mot » (qui nous a servi pour la syndication par mot-clef) mais aussi le critère « lang ».
Nous tenons ici la possibilité de créer facilement une autre forme de syndication reposant, celle-ci sur la langue de rédaction des articles.
je repère donc la ligne « fin_cadre_relief() ;// fin du hack »
et juste en dessous, je colle :
///
/// Syndication selon la langue de rédaction des articles
///
debut_cadre_relief("site-24.gif", false, "", _L('Syndication selon la langue des articles'));
echo "<p>"._L("Vous pouvez aussi limiter la syndication aux articles d'une certaine langue.")."</p>";
echo "<p>"._L("Actuellement dans ce site, il y a des articles rédigés en :")."</p>";
$query = "SELECT DISTINCT lang FROM spip_articles";
$result = spip_query($query);
if (spip_num_rows($result) > 0) {
echo "<ul>";
while($row=spip_fetch_array($result)){
$lang=$row['lang'];
echo "<li>", http_href( generer_url_public('backend-mots', "lang=$lang"),
http_img_pack( 'feed.png', 'RSS', ' border="0" ') .' '.
$lang, $lang),
"</li>\n";
}
echo "</ul>";
}
fin_cadre_relief();
// fin du hack
L’oeil averti relèvera la syntaxe de notre requête MySql dans laquelle le critère DISTINCT nous permet l’économie d’un tas de code. En effet, cette simple instruction permet, comme son nom l’indique, de ne ramener QUE les langues différentes.
[*La mise en Plugin*]
Considérations de départ
Bidouiller un fichier de ecrire/exec, comme nous venons de le faire ci-dessus, c’est bien. Le problème, c’est qu’en cas de mise à jour de la distrib spip, il faut se souvenir du (ou des) fichiers qu’on a modifié pour ne pas les écraser. La mise en « plugin » permet tout d’abord d’éviter ce genre problème. _ En outre, les plugins peuvent être à volonté activés / désactivés, ce qui évite bien des manip fastidieuses.
Alors... on y retourne !
Récupérer un modèle
Pour commencer, nous allons récupérer un modèle de plugin sur svn ://zone.spip.org/spip-zone/ (le « plugin_template »). C’est en éditant son contenu et en virant ce qui ne nous est pas utile qu’on va créer notre plugin connexion.
Editer plugin.xml
Ce fichier est fourni avec des indications assez claires sur sa structure. Pour l’essentiel, il suffit donc de mettre le nom du plugin, celui de l’auteur, la version et la description dans les balises du même nom.
Les éléments plus « sensibles » sont :
-
- la balise « options »
Le documentation indique que le fichier options (comme l’ancien mes_options.php) sera chargé a chaque hit. C’est donc bien à elle que nous devons nous atteler puisque, si nous voulons savoir quels sont les mots-clefs ’syndicables’, il faut recalculer.
La balise « options » prendra donc la forme suivante :<options> synchronisation_par_mots_clefs_options.php </options>
Bien sûr, comme indiqué dans la doc, nous inventons pour ce fichier un nom unique (surtout pas mes_options.php). C’est dans ce fichier « synchronisation_par_mots_clefs_options.php » que nous copierons tout simplement la totalité de notre fichier ecrire/exec/synchro.php modifié (tout simplement).
_ - La balise « fonctions » :
Comme nous n’en avons pas besoin, elle restera vide. On peut aussi la supprimer tout simplement.
_ - La balise « prefixe » :
Là encore la doc fournit des indications précises et claires : pas d’ambiguité dans le nom qui doit être unique et sera repris dans toutes nos fonctions. Ici on reste simple :<prefix> synchronisation_par_mots_clefs </prefix>
- La balise « pipeline » :
C’est le coeur du truc. C’est le pipeline, aussi appelé point d’entrée, qui nous permet d’altérer le fonctionnement standard de spip. La liste des pipelines déjà prévus dans spip peut être étudiée dans inc_version. Là, comme nous cherchons à altérer le fonctionnement d’un fichier de ecrire/exec en entier, nous allons retenir uniquement le pipeline « body_prive ».<pipeline> <nom>body_prive</nom> <action>body_prive</action> <inclure>synchronisation_par_mots_clefs_pipelines_admin.php</inclure> </pipeline>
La doc indique que l’on peut se dispenser de « inclure ». Nous allons néanmoins indiquer expressément le nom de ce fichier (et tout de suite après l’éditer).
- la balise « options »
Editer « template_pipelines_admin.php »
Avant d’aller plus loin, nous renommons ce fichier sous le nom que nous avons indiqué dans plugin.xml, c’est à dire « synchronisation_par_mots_clefs_pipelines_admin.php ».
En l’éditant, nous découvrons que plusieurs fonctions ont été prévues. La plupart ne nous servant à rien, nous les effaçons pour arriver au code suivant :
<?php
function synchronisation_par_mots_clefs_body_prive($flux){
return $flux;
}
?>
Editer « template_options.php »
Avant d’aller plus loin, nous renommons ce fichier sous le nom que nous avons indiqué dans plugin.xml, c’est à dire « synchronisation_par_mots_clefs_options.php ».
En l’éditant, nous découvrons... qu’il est vide !
Super !
On va y copier/coller la totalité du fichier ecrire/exec/synchro.php que nous avons modifié selon nos besoins dans la première partie de cet article.
Et ensuite ?
et ensuite,... c’est fini (ou presque). Nous pouvons effacer les fichiers templates qui ne servent à rien dans notre cas (template_fonctions, template_pipelines_cron, template_pipelines_typo et template_pipelines_public).
Nous avons donc un plugin tout neuf composé de 4 fichiers :
-
- gpl_fr.txt : (pour la license)
- plugin.xml
- synchronisation_par_mots_clefs_pipelines_admin.php
- synchronisation_par_mots_clefs_options.php
Si ce n’est déjà fait, on crée un dossier « plugins » à la racine du spip. On y crée ensuite un sous-dossier « synchronisation_par_mots_clefs » (ou ce que vous voulez, a priori ça n’est pas critique). On y glisse nos quatre fichiers.
Rajouter le fichier "backend-mots.html
Pour que tout fonctionne comme prévu, il ne nous reste plus qu’à recopier le fichier ’backend-moots.html’ dans le répertoire de notre plugin, au même niveaux que nos quatres fichiers.
Pour faire fonctionner la chose
Dans l’interface privée, les bouton « Configuration » fait alors apparaître un « Gestion des plugins » qui nous permet d’activer notre plugin. On s’en rend compte aussitôt en allant sur la page « Suivre la vie du site » dont le fonctionnement est désormais modifié tant que le plugin est activé.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |