Cette contrib a pour objet de rendre possible la visualisation et la mise à jours de nouveaux champs ajoutés dans plusieurs tables de SPIP grâce aux champs EXTRA. Elle s’applique au tables suivantes :
spip_articles
spip_rubriques
spip_breves
spip_auteurs
spip_syndic
spip_mot
Son objectif est simple :
utiliser le système de gestion des champs EXTRA pour gérer ces champs.
Son principe l’est tout autant :
s’il existe dans une de ces tables, un champs du même nom qu’un de ses “champs EXTRA” [1] , ces deux homonymes contiendront la même valeur et leur mise à jour sera synchronisée dans l’interface privée.
Par exemple, si nous créons un nouveau champs appelé ’plus’ pour la table spip_breves et qu’il existe dans le champs extra un pseudo champs également appelé ’plus’, le contenu des homonymes sera synchronisé. Ce qui permettra de mettra à jour tout nouveau champ par l’interface administrateur.

Avantages
Combiner l’ensemble des possibilités de gestion et d’affichage “des champs EXTRA” avec les possibilités de gestion des boucles qu’offre le nouveau compilo de SPIP.
[2]
Compatibilité ascendante : on peut continuer à utiliser comme avant “les champs EXTRA”. On peut également utiliser normalement les nouveaux champs dans ces tables comme avant.
On peut activer le lien entre homonymes et le désactiver sans autre conséquence que celle d’annuler leur synchronisme.
Modifications simples et rapides
Cette contrib demande des modifications au coeur de SPIP. Mais ces modifications sont simples et minimes. Seul le fichier ecrire/inc_extra.php3 doit être modifier par :
l’ajout d’une fonction
l’incorporation dans deux autres fonctions contenues dans ce fichier, d’une ligne qui appellent notre nouvelle fonction.
Une seule exception : la table spip_mot. Cette table ne faisant pas appel à une des fonctions appelant la notre, une petite modification au fichier ecrire/mots_edit.php3 serait requise.
Procédures
Télécharger le fichier inc_extra.php3.txt
Déposer ce fichier dans le dossier /ecrire/ de votre site SPIP
Renommer le fichier inc_extra.php3 présent dans ce fichier pour le conserver intact : exemple inc_extra_save.php3 [3]
Renommer le nouveau fichier inc_extra.php3.txt en inc_extra.php3
Voilà ! Vous pourriez déjà utiliser les champs homonymes. Seul les nouveau champs de la table spip_mots ne seraient pas mise à jour automatiquement pour le moment.
Si vous le voulez, passez par dessus l’étape me modification du fichiers suivant (Vous pourrez toujours le faire plus tard).
Modification du fichier ecrire/mots_edit.php3
Aucun fichier permettant de gérer les mots-clés ne faisant appel à la fonction extra_affichage() et puisque c’est elle qui appelle notre fonction extra_homonyme() pour la mise à jour du champs spip_mots.plus, nous devons modifier légèrement le fichier ecrire/mots_edit.php3 pour qu’il appelle directement cette fonction. Mais cela n’est pas une obligation si on ne désire pas utiliser de nouveau champ avec les mots-clés.
ouvrir dans un éditeur de texte le fichier mots_edit.php3 contenu dans le dossier /ecrire/
enregistrer ce fichier sous un autre nom pour conserver la version originale
ouvrir à nouveau dans un éditeur de texte le fichier mots_edit.php3
sélectionner et couper le code suivant contenu près de la ligne 72 ( pour SPIP 1.8.1 )
coller le code après ce qui était à l’origine la ligne 94 ( ligne 82 après la coupure )
coller le code préalablement coupé.
ajouter l’appel de la fonction extra_homonyme() en donnant comme paramètres la variable $extra, le type de table sur laquelle on travaille (sans le préfixe spip_), soit ’mots’ et l’action qu’on désire exécuter, soit ’update’ :
Nous avons simplement déplacé la fonction de redirection contenu dans ce fichier après l’interrogation de la base de donnés pour permettre de recharger le champ EXTRA qui sera utilisé dans notre fonction appelé par la ligne
L’explication de la fonction extra_homonyme() se trouve un peu plus bas.
Nous en avons terminé des modifications permettant d’utiliser notre nouvelle fonction. Il ne nous reste qu’à créer de nouveaux champs et de créer leur homonyme en champ EXTRA au besoin.
Comment ça marche
Voici la fonction permettant de lier nos homonymes afin de les synchroniser en lecture et en mise à jour.
Pour comprendre ce que fait notre fonction, il faut comprendre comment sont conservées les combinaisons clé/valeur dans le champs EXTRA d’une table.
Si nous parlons de “pseudo champs EXTRA”, c’est qu’en réalité, il n’y a qu’un champ EXTRA par table. L’ensemble des “pseudo champs EXTRA” sont en fait un ensemble de clé/valeur stockés dans le champ EXTRA grâce à la sérialisation (fonction PHP serialize() )et récupérés pour être utilisés par son inverse : la « déssérialisation » (fonction PHP unserialize() ).
Sur NEXEN.NET on peut lire :
“serialize retourne une chaîne contenant une représentation linéaire de value , pour stockage.C’est une technique pratique pour stocker ou passer des valeurs de PHP entre scripts, sans perdre ni leur structure, ni leur type.
Pour récupérer une variable linéarisée, et retrouver une variable, utilisez unserialize. ”
Notre fonction reçoit donc une chaîne de caractères contenant l’ensemble des clés/valeurs EXTRA. Elle « déssérialise » le tout dans un tableau nous permettant de comparer le nom des champs (clés) avec le nom des champs présents dans le « type » de table à qui appartient ce champ EXTRA.
Pour synchroniser en valeur les champs homonymes, la fonction comparera les clés du champ EXTRA avec le nom des champs de la table. Si ce sont des homonymes, elle remplacera la valeur liée à cette clé, par la valeur contenue dans le champ du même nom. Une fois la comparaison terminée, nous sérialisons à nouveau le tout pour retourner EXTRA. L’alimentation de toutes les pages affichant les champs EXTRA dans l’interface privée contient maintenant pour tous les champs homonymes, la même valeur de façon sérialisée dans le champ EXTRA ou dans le champ du même nom.
Lors de la validation des pages permettant la modification des articles, rubriques, brèves, auteurs, sites référencés ou mots clés, le même processus de comparaison s’effectue. Toutes les paires d’homonymes seront mises à jour avec les mêmes valeurs (update).
Si une clé du champ EXTRA n’a pas d’homonyme, elle sera alimentée par sa propre valeur et ne mettra à jours que cette valeur. Si un champs de la table n’a pas d’homonyme, il ne sera tout simplement pas accessible dans l’interface privée.
Cette fonction sera appelée par deux autres fonctions déjà utilisées pour gérer les champs EXTRA.
Pour l’alimentation des champs on appellera la fonction à l’intérieur de la fonction extra_saisie() dans le fichier ecrire/inc_extra.php3
Pour la mise à jour des champs on appellera la fonction à l’intérieur de la fonction extra_affichage() dans le fichier ecrire/inc_extra.php3
Comment permettre l’utilisation des blocs multi avec les champs extra
Pour permettre l’utilisation des blocs multi avec les champs extra :
on appellera la fonction extraire_multi() à l’intérieur de la fonction extra_affichage() dans le fichier ecrire/inc_extra.php3
on appellera la fonction extraire_multi() à l’intérieur de la fonction extra_saisie() dans le fichier ecrire/inc_extra.php3
Ces dernières modifications, incluse dans le fichier inc_extra.php3 ci-joint sont facultatives. Mais si vous les conservez, elles seront utilisables également avec les champs homonymes.
Un des avantages de ces changements est de pouvoir changer le libélé des champs dans l’interface privée, tout comme les autres champs standards.
Comment tester les champs homonymes
Téléchargez et décompressez à la racine du site le fichier zip suivant :

- Jeux de fichier test pour Spip 1.8.2
- Un jeux de fichier permettant de créer, supprimer, tester une série de champs homonymes dans les différentes tables possibles.
Il contient une série de fichiers permettant de tester facilement si tout fonctionne bien.
Il contient :
mes_fonctions.php3.txt
ecrire/mes_options.php3.txt
homonymes_test.php3 et homonymes_test.html
homonymes_plus.php3 et homonymes_plus.html
Une fois décompressé à la racine de votre site,
si vous n’avez pas déjà de fichiers mes_fonctions.php3 et ecrire/mes_options.php3, renommez simplement les fichiers en supprimant l’extension .txt
si vous avez déjà des fichiers mes_fonctions.php3 et ecrire/mes_options.php3, copiez et coller leur contenu respectif dans vos fichiers mes_fonctions.php3 et ecrire/mes_options.php3 à la suite ces fichier de leur contenu.
Accédez dans un fureteur sur votre site.
Allez dans l’interface privée pour entrer de l’information dans le nouveau champs extra pour - un article - une rubrique - une brève - un auteur - un site référencé - un mot clé
Allez dans l’interface publique de votre site.
Ajoutez à votre adresse homonymes_plus.php3.
Si vous n’êtes pas déjà identifié comme administrateur, vous aurez un espace pour le faire. [4]
Vous serez invité à créer une série de nouveaux champs nommés "plus" dans les tables
- spip_articles
- spip_rubriques
- spip_breves
- spip_auteurs
- spip_syndic
- spip_mot
La création des champs sera confirmée.
Cliquez alors sur Mettre à jour pour mettre à jour les nouveaux champs avec leur champs EXTRAS Homonymes.
Cliquez sur TESTER pour vérifier la mise à jour des nouveaux champs.
La liste des items ayant un champ homonyme ’plus’ sera affichée.
Pour supprimer les nouveaux champs ’plus’, cliquez sur Page de suppression des nouveaux champs.
Sélectionnez le bouton radio Supprimer les nouveaux champs ’plus’ et cliquez sur Valider.
Recommencez au besoin autant de fois que vous le voulez.
Si vous avez d’autre champs extra, vous constaterz qu’il continueront à fonctionner comme avant. On peut très bien utiliser les champs extras avec ou sans un champs homonymes dans une table de la base de données.
Si vous aviez des champs extra que vous désirez synchroniser avec un nouveau champs que vous avez préalablement crée, la fonction de Mise a jour du fichier test les auras synchronisé en même temps que les champs ’plus’.
Comment désinstaller les champs homonymes
Pour conclure le test :
videz dans l’interface privée les champs extras ’plus’ dans lesquels vous avez entré des données.
supprimer ce qui vous avez ajouté dans les fichiers mes_fonctions.php3 et mes_options.php3.
Si vous ne voulez pas conserver la gestions des champs homonymes, remplacez simplement les fichier inc_extras.php3 et mot_edits.php3 par leur version originale que vous aurez pris le soin de conserver.
À venir
Plusieurs exemples d’avantages à l’utilisation des champs homonymes.






