SPIP - Contrib

SPIP - Contrib

[ar] [en] [es] [fr] [it]

91 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Administration > Base de données > Champs homonymes > Archives Champs homonymes > Gestion des nouveaux champs dans les tables SPIP par les champs extra : (...)
[29 commentaires]

Gestion des nouveaux champs dans les tables SPIP par les champs extra : champs homonymes

lundi 14 novembre 2005, par Iago

0 vote

Comment basculer les champs Extra en champs supplémentaires dans la base par les « champs homonymes ».

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 :

Zip - 5.6 ko
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.

Notes

[1] Pour les besoins de l’exercices nous parlerons des “champs EXTRA” bien qu’en réalité, il n’y ait qu’un champs EXTRA possible par table avec plusieurs pseudos champs.
Voir Les champs extra sur Spip-Contrib

[2] Voir sur SPIKINI NouveauCompilo

[3] Il est préférable de toujours conserver une copie des fichiers originaux du coeur de SPIP avant de les modifier. On pourra ainsi facilement annuler l’opération en cas de problème.

[4] Seul un administrateur identifié pourra créer ou supprimer des champs par ce fichier.

Retour en haut de la page

29 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3

  • Répondre à ce message

    11 août 2008 11:34 , par zerocool

    un plugin qui permet d’ajouter d’autres types d’article (ecrire un article, ecrire un article2, ecrire un article3...) que l’on peut personnaliser grâce au plugin champ homonyme serait vraiment excellent comme ca on pourrait definir quel champ afficher suivant le type d’article qu’on veut ecrire comme le plugin CCK pour drupal

  • Répondre à ce message

    1er avril 2007 11:25 , par Jean-Marc

    J’ai mis en place les champs homonymes et j’utilise les balises multi pour le multilinguisme. Dans l’administration tout se passe bien mais sur le site public je me retrouve lors de l’affichage des champs avec les balise ... que se soit en affichant #PLUS ou [(#EXTRA|extraplus)] .

    Pour le champs #TITRE le site public ne m’affiche que le texte de la langue courante.

    Quelqu’un a t-il une idée pourquoi cela ne s’applique pas au nouveaux champs ?

  • Répondre à ce message

    31 mars 2007 00:49 , par Jean-Marc

    J’ai mis en place de nouveaux champs sous spip pour un site multilingue utilisant la balise multi. Sur le site public les nouveaux champs sont affichés en entier sans faire la sélection en fonction de la langue. Je me retrouve alors avec par exemple texte en français sur le site public.

    Est-il possible de gerer l’affichage des langues pour les champs supplémentaires ? Les champs sont créés dans la BD et déclarés dans le fichier mes_fonctions.php3.

  • Répondre à ce message

    16 novembre 2006 01:45 , par Iago

    Je m’intéroge lorsque tu dis

    j’ai du bidouiller une procédure pour initialiser le champ extra à partir des nouveaux champs

    car avec la dernière version du plugin pour 1.9.1, la mise à jour des champs extra par les champs homonymes est possible. As-tu télécharger la version pour 1.9 ou pour 1.9.1 ?

  • Répondre à ce message

    15 novembre 2006 12:05 , par speedy

    Salut iago,

    Aprés redémarrage du serveur, les champs sont apparus. Mystère. J’ai bien les champs dans le formulaire de saisie, et ils sont bien liés avec les champs de la base, du moins dans le sens formulaire vers base de données. Dans le sens inverse (j’ai déjà des données dans la base par importation) j’ai du bidouiller une procédure pour initialiser le champ extra à partir des nouveaux champs, pour que les données apparaissent dans le formulaire. Maintenant je vais voir pour déplacer les champs de saisie afin qu’ils apparaissent au début et non à la fin.

    Merci quand même pour ta proposition d’aide

  • Répondre à ce message

    13 novembre 2006 15:42 , par Iago

    Que ce soit pour utiliser avec les champs homonymes ou non, il n’y a pas de différence dans la déclarations des champs extras.

    Je t’invite, si tu le désires, à communiquer avec moi directement si tu désires de l’aide sur leur déclaration. Je pourrais mieux t’aider !

    iago@iago.ca

    Voir en ligne : Mon Site Spip : Plugin Champs homonymes

  • Répondre à ce message

    12 novembre 2006 17:11 , par speedy

    J’avais lu cet article. Mais je ne comprends pas comment tu déclares tes champs extra, il me semblait que la déclaration dans mes_options.php était suffisante. C’est d’ailleurs je que j’ai fait. Je ne vois pas ce qui manque.

  • Répondre à ce message

    12 novembre 2006 15:55 , par Iago

    La plugin n’influence en rien l’utilisation des champs extras.

    Ton problème est dans la déclaration de tes champs extras. La procédure est celle de base. Tu peux consulter différents articles sur le sujet comme celui-ci : http://www.spip-contrib.net/Les-champs-extra.

  • Répondre à ce message

    12 novembre 2006 14:33 , par speedy

    bonjour,

    J’ai un petit souci. J’ai installé le plugin pour SPIP 1.9.1 et activé dans interface privée J’ai modifié le fichier "mes_options_homonymes.php" avec un champ "adresse". J’ai ajouté un champ dans la table article avec le même nom. Mais je n’ai pas de champ nouveau dans l’interface de rédaction de l’article. J’ai bien sûr vidé le cache de Spip et du navigateur, relancé la page, etc....

    Qu’ai-je oublié ?

    PS : j’ai les plugins : FCKeditor et Agenda actifs.

  • Répondre à ce message

    13 octobre 2006 15:48 , par Iago

    Je me disais aussi... ;-)

Pages 1 | 2 | 3

Répondre à cet article

Retour en haut de la page

Ça discute par ici