Insérer un formulaire via un pipeline

Dans le cadre d’un développement de plugin, avec des points de gestion spécifiques pour le back-office, vous pouvez être amené à intégrer un (petit) formulaire à droite ou à gauche du bloc principal (le bloc #contenu).

Voici quelques explications et astuces pour arriver à vos fins.

Prérequis à cette présentation : avoir créé un formulaire dans le répertoire /formulaires
Nous prendrons ici le cas d’un formulaire nommé "tralala".

la solution la plus simple

Insérer l’appel du formulaire depuis un des répertoires suivants :

/prive/objets/infos
/prive/squelettes/navigation
...pour un insertion à gauche

/prive/squelettes/extra
...pour une insertion à droite [1]

Exemple :
vous voulez l’insérer à gauche dans la page ?exec=monobjet

Créer un fichier nommé monobjet.html dans /prive/objets/infos et y insérer la balise
#FORMULAIRE_TRALALA.

et voilà.

Passer par un pipeline

Vous serez obligé de passer par un pipeline dans le cas où vous voulez surcharger une page du cœur de SPIP ou d’un autre plugin. C’est la seule solution pérenne car sinon, à la prochaine mise à jour de SPIP ou du plugin surchargé, vous aurez (éventuellement) des surprises.

L’exemple qui suit traite de la page /ecrire/ ?exec=rubrique. On veut rajouter un formulaire dans le bloc à gauche de la rubrique 3.
Mais la gestion de cette page est dans le cœur de SPIP et de plus la colonne de gauche contient déjà des blocs d’informations. Donc 2 raisons de passer par un pipeline.

On va utiliser affiche_gauche .
On aurait utilisé son pendant affiche_droite pour...bah...vous m’avez compris.

voici le code

  1. function prefixeplugin_affiche_gauche($flux) {
  2.     if ($flux['args']['exec'] == 'rubrique'){
  3.         if ($flux['args']['id_rubrique'] == '3'){
  4.             $args = $flux['args'];
  5.             $contexte = balise_FORMULAIRE__contexte('tralala', $args);
  6.             $flux['data'] .= "<div class='ajax'>" .
  7.                             $boite_mdp = recuperer_fond('formulaires/tralala', $contexte) .
  8.                             "</div>";
  9.         }
  10.     }
  11.     return $flux;
  12. }

Télécharger

Explications
if ($flux['args']['exec'] == 'rubrique')
signifie que l’on ne veut agir que sur les pages ecrire/ ?exec=rubrique.

  • if ($flux[’args’][’id_rubrique’] == ’3’) signifie que plus précisément, on veut voir s’afficher notre formulaire dans la rubrique 3
  • $contexte = balise_FORMULAIRE__contexte(’tralala’, $args) ici on calcule le contexte à envoyer dans le squelette d’un formulaire

Tout est prêt. On insère dans le flux le formulaire grâce à la fonction récupérer_fond avec en premier paramètre le chemin et le nom du formulaire et en deuxième paramètre le contexte calculé.