SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 252 visiteurs en ce moment

Accueil > Interactivité, échanges > Formulaires > Pétitions > Ajouter un champ dans la table spip_signatures

Ajouter un champ dans la table spip_signatures

29 janvier 2008 – par Cyril Marion, nyatto, yannf – commentaires

1 vote

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 :

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 :

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.

Dernière modification de cette page le 29 janvier 2008

Retour en haut de la page

Vos commentaires

  • Le 28 septembre 2008 à 02:03, par Mat38 En réponse à : Ajouter un champ dans la table spip_signatures

    Bonjour et merci pour cette contrib’.

    Pourriez-vous préciser avec quelle version de spip l’ajout de champ selon cette méthode doit fonctionner ? En effet, le fichier « formulaire_signature.php » que j’utilise (1.9.1 ou 1.9.2) ne ressemble pas à ce qui est indiqué dans la contrib’. Le champ que j’ajoute n’est jamais inscrit dans la base lorsque je valide mon formulaire.

    Merci d’avance.

    Répondre à ce message

  • Le 10 mai 2008 à 13:39, par christophe En réponse à : Ajouter un champ dans la table spip_signatures

    bonjour,

    contribution intéressante, mais j’avoue avoir eu beaucoup de difficultés pour l’utiliser : surtout par incompétence (nul n’est parfait), mais aussi parce qu’il y a beaucoup d’infos pas explicite (la première partie sur la modification de la base — cela a déjà été signalé dans les précédents commentaires, mais j’ai eu beau chercher ici ou là comme il a été proposé en réponse, pas moyen de trouver une contribution simple à mettre en œuvre pour que Spip fasse lui-même la modification de la table signatures), et aussi parce que cette contrib semble valable pour une version 1.9.2 (à propos : ce n’est indiqué nulle part) et qu’avec la version de développement il y a beaucoup de modifications qui rendent la mise en œuvre décrite difficile ou différente.

    Cela dit, j’ai essayé, mais ça ne marche qu’à moitié avec une version de développement récente. Je vous propose de donner ici ce que j’ai fait, si ça peut être utile et aussi pour avoir de l’aide pour terminer complètement :
    -  étape 1 : Le texte semble indiquer que l’ajout à mes_fonctions de

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

    va créer le champ profession, or il n’en est rien. J’ai laissé tomber l’ajout de la table en activant le plugin : trop compliqué pour moi. Du coup, j’ai ajouté le champ profession à la main avec phpmyadmin. S’il était possible d’avoir des infos plus explicites sur comment faire pour ajouter à ce plugin une mise à jour « automatique » de la base lors de son activation, on serait pas loin du nirvana ;-) ;

    2e étape : ok, ça marche.

    3e étape, point 1 : il m’a semblé que c’était incomplet. J’ai ajouté ici ou là le paramètre profession, car, ça ne marchait pas toujours. J’ai essayé en ajoutant là où ça me semblait nécessaire (qui a dit que je naviguais à vue ??) :
    -  ajout ligne 242 du fichier formulaire_signature.php le paramètre $profession

    if (!signature_a_confirmer($id_article, $url_page, $nom, $mail, $profession, $site, $url_site, $message, $lang, $passw))

    -  ligne 245, même chose :

    $id_signature = sql_insertq('spip_signatures', array(
                    'id_article' => $id_article,
                    'date_time' => 'NOW()',
                    'statut' => $passw,
                    'ad_email' => $mail,
                    'profession' => $profession,
                    'url_site' => $url_site));


    -  ligne 253, même chose :

            if (!$id_signature) return _T('form_pet_probleme_technique');
            include_spip('inc/modifier');
            revision_signature($id_signature, array(
                                    'nom_email' => $nom,
                                    'ad_email' => $mail,
                                    'profession' => $profession,
                                    'message' => $message,
                                    'nom_site' => $site,
                                    'url_site' => $url_site
                                    ));


    -  ligne 267, même chose :
    function signature_a_confirmer($id_article, $url_page, $nom, $mail, $profession, $site, $url, $msg, $lang, $passw)

    -  ligne 280, même chose :

            $r = _T('form_pet_mail_confirmation',
                     array('titre' => $titre,
                           'nom_email' => $nom,
                           'profession' => $profession,
                           'nom_site' => $site,
                           'url_site' => $url,
                           'url' => $url_page,
                           'message' => $msg));

    Encore une fois, n’étant pas très compétent en php, je n’ai pas compris ce qui est vraiment nécessaire ou pas (à un moment de mes tests, la saisie « profession » n’était pas enregistrée dans la base, après ces ajouts, elle l’est) : l’avis sur ces ajouts (ou pas) de quelqu’un de plus compétent sera utile.

    -  3e étape point 2 : la version dev ne comporte plus les lignes « $messagesx... » et je n’ai pas trouver ce qu’il fallait modifier pour que l’info profession soit ajoutée dans le mail (elle n’est jamais envoyée pour le moment).

    -  3e étape point 3 : là aussi le fichier modifier.php a été modifié — le comble de l’ironie ? — et si je modifie la fonction revision_signature de la manière indiquée, à la signature de la pétition, j’obtiens une erreur php « Fatal error : Call to undefined function controler_md5() in ..../inc/modifier.php on line 103 ». Un probleme de sécurité ? Enfin, bref, là non plus, je ne comprends pas ce qu’il faut modifier. Un conseil serait le bienvenu...

    -  dernière étape : ça roule.

    voilà, j’espère que c’est clair et peut-être utile. S’il est possible d’avoir quelques conseils sur ce qu’il faut modifier ou pas avec la version développement de la part des auteurs de cette contribution, ce serait chouette ! :)

    merci d’avance

    Répondre à ce message

  • Le 29 janvier 2008 à 20:40, par cedric En réponse à : concerne la premiere étape du tutoriel

    Accepterais tu de développer la premiere étape, ce qu’il faut rajouter dans le fichier mes_fonctions.php ?

    Je suis plutot novice et je ne comprends pas s’il faut mettre ces trois lignes :

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

    Ou bien s’il faut en choisir une ? Par ailleurs, faut il modifier le fichier serial.php ou pas ?

    Merci pour ton éclaircissement

    et merci pour ce tutoriel fort intéressant car tres concret !

    • Le 29 janvier 2008 à 23:41, par hydromel En réponse à : concerne la premiere étape du tutoriel

      salut, si il faut mettre les 3 lignes, et non pas besoin de modifier serial.php

    • Le 30 janvier 2008 à 12:02, par Cyril Marion En réponse à : concerne la premiere étape du tutoriel

      Hello,

      La 1re étape concerne juste la partie ou on ajoute le champ à la table, et on l’a pas trop développée parce qu’il y a déjà plein de contribs sur le sujet (faire une recherche sur « nouvelle table spip » par exemple).

      Sinon, oui il faut bien mettre les 3 lignes. Et justement regardes comment c’est fait dans serial.php d’origine ; le fait de mettre ces instructions dans les fonctions (du site ou du plugin) évite de modifier serial.php.

      A+

      Cyril

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Le plugin FreeRadio 1.0

    25 mai 2011 – 29 commentaires

    Le plugin SPIP FreeRadio est un lecteur de flux audio gratuit à intégrer dans le corps des articles. Il permet de se mettre « à l’écoute » de WebRadios ou de sons à partir de leurs URL. FreeRadio est écrit en actionscript. Facile à intégrer, il est (...)

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

Ça spipe par là