Ajouter un champ dans la table spip_signatures

Attention ! Cette contribution modifie des fichiers du noyau de SPIP !

Même si elle a été testée par plusieurs utilisateurs nous ne pouvons garantir qu’il n’y aura pas d’effets secondaires dommageables sur votre SPIP. Conservez toujours les fichiers d’origine pour pouvoir revenir au noyau originel.

De plus, elle n’est compatible qu’avec une version précise de SPIP et sera perdue à la prochaine mise à jour : vous devrez donc recommencer.

Comment ajouter un champ dans une table SPIP ? Facile, il y a de nombreuses contribs sur le sujet... Mais comment modifier les formulaires SPIP associés ? C’tune autre paire de manches comme dirait l’autre...
En voici le détail, avec comme exemple l’ajout d’un champ « profession » dans la table spip_signatures...

Point de départ : créer le champ supplémentaire

Nous allons créer un champ supplémentaire qui contiendra la profession du signataire, dans la table spip_signatures. Pour cela, il faut ajouter dans mes_fonctions.php, ou dans un plugin, une ligne qui fera prendre en compte à SPIP le nouveau champ :

include ('ecrire/base/serial.php');
global $tables_principales;
$tables_principales['spip_signatures']['field']['profession'] = "text NOT NULL";

2e étape, vérifier que SPIP prend bien en compte le nouveau champ

Une fois le champ (la colonne) « profession » dument déclaré, le compilateur de SPIP est capable de gérer les boucles et filtres qui lui correspondent. Désormais, vous pouvez utiliser la balise #PROFESSION dans vos <BOUCLE_signatures(SIGNATURES)>

Vérification : Saisir à la main des valeurs dans la table spip_signatures (avec phpMyAdmin par exemple) et essayer de les afficher dans un squelette qui utilise une boucle signatures.

Exemple de boucle à mettre dans un squelette de test :

<B_signatures>
<table>
<tr>
<th>Nom</th>
<th>Profession</th>
</tr>
<BOUCLE_signatures(SIGNATURES){tout}>
<tr>
<td>#NOM_EMAIL</td>
<td>#PROFESSION</td>
</tr>
</BOUCLE_signatures>
</table>
</B_signatures>

qui doit donner un résultat équivalent à ceci :

Nom Profession
Darth Vador Maitre Sith
Yoda jedi
Darth Sidious Général

3e étape, adapter le formulaire SPIP

C’est là que ça se corse... car pour ne pas avoir à ré-écrire un formulaire complet, et surtout tout le process de vérification, authentification, etc. nous avons voulu ré-utiliser et adapter le #FORMULAIRE_SIGNATURE

Nous allons donc surcharger la balise #FORMULAIRE_SIGNATURE. Pour cela, il faut copier le fichier
ecrire/balise/formulaire_signature.php dans le dossier balise/ du plugin (créer ce dossier si il n’existe pas).

1. modifier la balise dynamique

En l’occurrence il s’agit de la fonction balise_FORMULAIRE_SIGNATURE_dyn(). Ajouter le _request correspondant en paramètre de l’appel de la fonction inc_controler_signature_dist (veiller à bien respecter l’ordre des paramètres) :

...
_request('profession'), 
...

Du coup, ajouter le paramètre entrant dans la fonction inc_controler_signature_dist() :

inc_controler_signature_dist( ..., $profession, ...)

2. message de confirmation

Pour pouvoir ré-afficher la variable dans le message de confirmation, la rajouter dans la variable $messagex :
$messagex = ... 'profession' => $profession ...

A noter que pour assurer la traduction des messages, pour pouvoir mettre notre message personnalisé, il faut créer un fichier local_fr.php dans notre plugin (ou dans squelettes/)

3. revision_signature

revision_signature ($id_signature, array(
	'nom_email' => $nom_email,
	'profession' => $profession,

Il faut aussi modifier la fonction revision_signature () elle-même, la manière propre est de copier le fichier /ecrire/inc/modifier.php dans le plugin (inc/modifier.php), la fonction sera surchargée.

On ajoute simplement notre champ dans le return de la fonction.

Dernière étape : adapter le squelette « signatures »

Il ne reste plus qu’à placer un répertoire /formulaires/ soit dans le dossier du plugin, soit dans le répertoire /squelettes/ de votre site, et d’y placer une copie modifiée du squelette signatures.html. On y insèrera le champ supplémentaire « profession » dans la balise <form>

de la manière suivante :

<fieldset>
	<legend>J'indique ma profession</legend>
	<p><label for="Profession">Votre profession :</label>
	<input type="text" class="forml" name="profession" id="profession" value="" size="20" /></p>
</fieldset>

qui donne à l’affichage quelque chose du genre :

J’indique ma profession


car la balise ne fait pas tout le boulot, le squelettes signatures.html en fait une petite partie lui aussi !

En espérant que cette contrib vous soit utile, n’hésitez pas à poster ici si vous avec des questions.

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