Carnet Wiki

Compatibilité avec le plugin Corbeille

Ces notes font suite au développement du plugin Vu !. Peut-être mes découvertes pourront-elles faire gagner du temps à d’autres ? :)

Il s’agit ici de rendre compatible avec le plugin Corbeille un quelconque objet éditorial supplémentaire (non-natif de SPIP). On suppose pour la suite que cet objet que vous tentez de rajouter est fourni dans un plugin (avec toute l’organisation des fichiers qui en découle).

Concrètement, l’objectif est permettre à la corbeille de les voir et d’en gérer la suppression (et éventuellement la restauration). Non pas que soit compliqué (bien au contraire, tout est prévu dans le code), mais dans la mesure où personne ne se revendique développeur du-dit plugin, les informations furent ardues à trouver...

Trois étapes vont être nécessaires :

  • déclarer votre objet à la corbeille ;
  • ajouter la noisette d’affichage ;
  • ajouter les chaines de langues ;
  • ajouter les styles et logos.

Déclarer l’objet

La corbeille demande à être présentée à votre objet, elle a besoin de connaître :

  • son petit nom à la forme plurielle (par exemple livres),
  • sa table de référence dans la base éventuellement pour éviter les conflits (probablement spip_livres),
  • et les tables qui lui sont liées, afin de pouvoir ensuite supprimer un élément avec toutes ces liaisons (on peut imaginer une table spip_mots_livres pour ses mots-clés)... proprement quoi !
  • et le statut qui est celui d’un élément-objet destiné à la corbeille (pourquoi pas poubelle ?).

Cela se passe dans votre fichier ’prefixeplugin_options.php’. Voici ce que cela donnerait pour l’objet livre du plugin Bibliotheque (préfixe bibli), dans le fichier ’bibli_options.php’ :

/* Plugin Corbeille (compatibilite)  */
	// Declarer le nouvel objet
	global $corbeille_params;
	$corbeille_params["livres"] = array (
			"statut" => "poubelle",
			"table" => "spip_livres",
			"tableliee"  => array("spip_mots_livres"),
	);

Le contenu : la noisette

Indispensable, c’est grâce à elle qu’on affiche la liste des éléments supprimés de l’objet choisi. Les noisettes des objets éditoriaux natifs (articles, brèves, forums, sites...) sont fournies avec le plugin. Ceci nous arrange bien car ce sont de parfaits modèles, où il ne suffit plus que de remplacer le nom les boucles par les vôtres, ainsi que les balises et tout ce qui est contextuel (à vous de voir selon votre nouvel objet).

Votre noisette devra porter le nom ’corbeille_objet-s.html’ ; et se situer dans le répertoire ’prive/listes’ de votre plugin.

Voici ce que cela donnerait pour l’objet livre, dans le fichier ’prive/listes/corbeille_livres.html’ :

<B_livres_a_la_corbeille>
[<h2>(#GRAND_TOTAL|corbeille_affiche_un_ou_plusieurs{bibli:corbeille_livres_un,bibli:corbeille_livres_tous})</h2>]
[<p class='pagination'>(#PAGINATION)</p>]
<ul class='liste_items livres checkables'>
<BOUCLE_livres_a_la_corbeille(LIVRES){statut}{pagination 5}{!par date}{recherche ?}>
<li class='item'>
<label for='livre-#ID_LIVRE'><:corbeille:selectionner:></label><input type='checkbox' name='elements[]' value='#ID_LIVRE'[ (#ID_LIVRE|in_any{#ENV{elements}}|oui)checked='checked']/>
<h3>[##ID_LIVRE - (#TITRE|sinon{<:info_sans_titre:>})]</h3>
<small>[(#DATE|affdate)]</small>
<p class='actions'>[<a href='#URL_ECRIRE{livres_tous,id_livre=#ID_LIVRE}'><:corbeille:voir:></a>]</p>
</li>
</BOUCLE_livres_a_la_corbeille>
</ul>
[<p class='pagination'>(#PAGINATION)</p>]
</B_livres_a_la_corbeille>

Les chaines de langues

Vous l’aurez surement remarqué dans la noisette ci-dessus figure tout un tas de chaînes de langues. La quasi-totalité sont génériques donc inutile d’y toucher ; deux seulement sont spécifiques à votre objet. Elles permettent d’afficher soit la chaîne « 1 objet dans la corbeille », soit « x objets dans la corbeille » selon la situation.

Dans cette noisette, on les trouve à la ligne 2, sous la forme « prefixeplugin:corbeille_objet-s_un » et « prefixeplugin:corbeille_objet-s_tous ».

Nous aurons donc dans le fichier de langue française du plugin Bibliotheque (’lang/bibli_fr.php’), les chaînes suivantes :

// Compatibilite plugin Corbeille
	'corbeille_livres_tous' => "@nb@ livres dans la corbeille",
	'corbeille_livres_un' => "1 livre dans la corbeille",

Les styles et logos

De la même façon que les noisettes, de nombreux modèles existent pour les objets natifs. De plus, la plupart des styles sont - comme les chaînes de langue - génériques. Si bien qu’il nous suffit d’aller copier une ligne de la feuille de style du plugin Corbeille pour la coller dans celle de notre plugin et d’en modifier deux ou trois choses pour qu’apparaisse comme les autres notre objet dans la corbeille.

Alors, dans la feuille de style du plugin Corbeille (’prive/style_prive_plugin_corbeille.html’), les styles spécifiques aux types d’objets sont concentrés sur les lignes qui débutent par #liste-objet-s.

Voici la ligne que l’on ajouterait dans le fichier ’prive/style_prive_plugin_bibli.html’ de notre plugin Bibliothèque :

[(#REM) 
	Styles destines au plugin Corbeille
]
#liste-livres .formulaire_editer_corbeille h2 { padding: 5px; padding-left: 90px; background: url("[(#CHEMIN{img_pack/livre-24.gif})]") no-repeat center left; }

On note que les styles appliqués au nouvel objet ne sont pas touchés pour garder la cohérence. Par contre le chemin de recherche du logo change afin de dénicher celui que vous aurez pris soin de déposer dans le répertoire ’img_pack’ de votre plugin. Il aura naturellement une taille de 24x24 pixels.

Conclusion ?

Eh bien je crois que c’est tout... en tout cas cela à suffit ici. Pour un exemple supplémentaire, je vous invite à regarder dans le code du plugin Vu !... et semblerait-il aussi dans le plugin Jeux.

Voilà ! J’ai fait ma part du boulot, à vous maintenant !

archi02 - Mise à jour :26 janvier 2018 à 11h05min