Introduction
Cette contribution va vous permettre de vous familiariser avec les champs extra des auteurs et/ou visiteurs, et aussi de pouvoir les gérer plus facilement : L’administrateur ne sera plus obligé de les remplir soi-même, puisque le visiteur aura la possibilité de les saisir pendant son inscription.
Pourquoi ?
Le constat est simple, j’ai eu besoin pour mon site sous SPIP de limiter l’accès visiteur aux membres de notre association (un club sportif).
Comme nous sommes beaucoup d’adhérents, il n’est pas possible de créer en début d’année associative les accès des membres après leur inscription au club.
C’est pourquoi j’ai eu besoin que les membres puissent s’inscrire avec leurs données personnelles pour que je puisse les vérifier à posteriori.
Ce que nous allons réaliser
Pour ne pas que vous vous engagiez sur une pente trop glissante, voici ce que nous allons réaliser :
Prendre un SPIP 1.7 (DISTRIB ou CVS)
Créer quatre champs extras au niveau des ’auteurs’.
Ajouter un nouveau fichier à votre installation
Modifier légèrement un fichier source de SPIP : inc-formulaire.php3 (le fichier complet et modifié est fourni)
Ca ne vous fait pas peur ? Tant mieux !
Parce que j’explique d’abord tout ce que j’ai fait, mais à la fin, j’ai mis un .ZIP récapitulatif à décompresser directement dans votre installation de SPIP, et ca se fera tout seul, elle est pas belle la vie ?
Les champs utilisés
Ce dont j’ai besoin pour reconnaître mes adhérents, c’est une adresse postale et/ou un numéro de téléphone.
C’est pourquoi nous allons créer les champs ’auteurs’ suivants :
Adresse
Code postal
Ville
Téléphone
Les champs extra se définissent dans le fichier ecrire/mes_options.php3 dont voici un exemple :
<?
$GLOBALS['champs_extra'] = Array (
'auteurs' => Array (
"adresse" => "ligne|propre|Adresse",
"cp" => "ligne|propre|Code Postal",
"ville" => "ligne|propre|Ville",
"tel" => "ligne|propre|Téléphone"
)
);
$GLOBALS['champs_extra_proposes'] = Array (
'auteurs' => Array (
// Définition des champs extra utilisés pendant l'inscription
'inscription' => 'adresse|cp|ville'
)
);
?>Nous pouvons remarquer que j’ai créé une nouvelle entité inscription dans le tableau $GLOBALS[’champs_extra_proposes’] et qui contient la liste des champs extras qui seront demandés à l’inscription des ’auteurs’.
Cette entrée spécifique n’est pas indispensable : En son absence, l’inscription va demander tous les champs extras disponibles pour les auteurs.
Modification du formulaire proprement dit
Il n’y a qu’une fonction à ajouter (formulaire_inscription_etendue), celle qui affiche et enregistre le formulaire d’inscription. Nous la mettrons dans un nouveau fichier dans le répertoire de base de spip. Elle a été très largement inspirée de l’originale : formulaire_inscription de la distribution de SPIP :
Vous remarquerez que j’utilise une nouvelle chaine
(_T(’local:inscription_champs_supplementaires’))
dans la table « local » des langues de SPIP.
Cette chaine est définie dans le fichier de langue local_fr.php3 qui est fourni dans l’archive. Pour en comprendre le principe, voir la gestion des langues dans SPIP.
Inclure ce fichier de langue dans votre distribution permet simplement d’ajouter un message entre les deux boites de saisie nom/email et vos boites de saisies personnalisées.
Si vous n’avez pas besoin de ce message, ignorez simplement ce fichier (local_fr.php3) !
Par exemple avec cette ligne :
'inscription_champs_supplementaires' => 'Veuillez également saisir vos coordonnées personnelles :<br>', dans le fichier ecrire/lang/local_fr.php3, on obtient l’affichage suivant pendant l’inscription :

A ce propos, pour ceux qui n’ont pas peur du PHP, vous pouvez personnaliser l’affichage du formulaire (20 dernières lignes de la fonction formulaire_inscription_etendue)
Relier le tout à SPIP
C’est le fichier spip_pass.php3 qui appelle la fonction qui gère le formulaire. Il doit doit maintenant appeler la nouvelle fonction.
Changer la fonction dans spip_pass.php3 permet de rester le plus simple possible avec les squelettes de SPIP. En effet, le nouveau formulaire est maintenant affiché sur le tag #LOGIN_PUBLIC, mais aussi à partir du lien "s’inscrire" sur le formulaire d’un forum modéré sur abonnement.
Remplacer donc
formulaire_inscription(($inscriptions_ecrire)? 'redac' : 'forum');par
formulaire_inscription_etendue(($inscriptions_ecrire)? 'redac' : 'forum');Résultat
Voici ce qu’est devenu la fenêtre d’inscription lorqu’on demande à s’inscrire sur le site :

Les quatre champs supplémentaires sont maintenant demandés.
Quand vous allez dans la partie privée du site, et que vous visualisez la fiche de l’utilisateur, vous avez maintenant ses champs supplémentaires qui sont remplis :

Voilà. Je l’ai installé sur mon site (SPIP 1.7 distrib fr) et ca a l’air de tourner sans bugs visibles. De toute façon je n’ai repris que des bouts de codes de la partie privée pour l’intégrer dans le formulaire d’inscription.
Télécharger la distribution
Voici l’archive qui contient tous les fichiers modifiés. Vous pouvez l’extraire directement à la racine de votre SPIP pour écraser les anciens fichiers.
A l’avenir...
Le seul fichier original de SPIP qui est modifié est spip_pass.php3. Regardez le source complet fourni dans l’archive, il contient des gros commentaires (entre des lignes de #) sur les deux lignes modifiées du fichier.
Donc si vous avez déjà un spip_pass de votre cru, vous pouvez aisément appliquer les modifications.
Bon courage !
18 Mai 2005 - Mise à jour SPIP 1.8
Nous savons tous que l’heure n’est plus aux champs extras. Toutefois, pour ceux qui ont un base actuelle avec, et qui n’ont pas spécialement envie de tout retranscrire, voici la nouvelle version des champs extra à l’inscription pour SPIP 1.8
Résultat
Le but de la manoeuvre est de pouvoir afficher (et traiter) une fenêtre d’inscription au site de cette forme :
Pré-requis
Cet exemple se base sur la définition des champs extras suivants (dans le fichier ecrire/mes_options.php3) :
$GLOBALS['champs_extra'] = Array (
'auteurs' => Array (
'adresse' => "ligne|propre|Adresse",
'cp' => "ligne|propre|Code Postal",
'ville' => "ligne|propre|Ville",
'tel' => "ligne|propre|Téléphone",
'section' => "ligne|propre|Section du NCR"
),
);
$GLOBALS['champs_extra_proposes'] = Array (
'auteurs' => Array (
// Définition des champs extra utilisés pendant l'inscription
'inscription' => 'adresse|cp|ville|tel|section'
)
);Comment faire
Les modifications concernent simplement deux fichiers du dossier formulaires. J’ai pris comme point de départ les fichiers fournis avec spip 1.8.1
Fichier formulaire_inscription.html :
Concernant l’affichage des champs extras, voici la modification à apporter à la ligne 23 :
<br />
<:local:inscription_champs_supplementaires:>
<br />
<br />
<?
include_ecrire("inc_extra.php3");
extra_saisie($extra, 'auteurs', 'inscription');
?>La chaine <:local:inscription_champs_supplementaires:> est à ajouter au fichier local_fr.php3. Pour cela, se reporter à la documentation sur les chaines personnalisées.
Voici le fichier complet modifié :
Fichier inc-formulaire_inscription.php3 :
Il suffit de remplacer en ligne 45 le code suivant
$id_auteur = spip_abstract_insert('spip_auteurs',
'(nom, email, login, statut)',
"('".addslashes($nom_inscription)."',
'".addslashes($mail_inscription)."', '$login', '$statut')");par le code
include_ecrire("inc_extra.php3");
$extras = extra_recup_saisie('auteurs');
$id_auteur = spip_abstract_insert('spip_auteurs',
'(nom, email, login, statut, extra)',
"('".addslashes($nom_inscription)."',
'".addslashes($mail_inscription)."', '$login', '$statut', '$extras')");Voici le fichier complet modifié :
Pour clore le débat
Par ailleurs, je pense que je vais tout doucement évoluer vers les nouvelles fonctionnalités de la version 1.8, à savoir les champs supplémentaires. Je ne manquerai pas de réviser ma contribution avec ce nouveau système !
A bientôt.




