Tuto NewsletTux 2 : ajouter des champs au formulaire normal
Sommaire
Pré requis, objectif
Objectif
Ce tutorial va permettre d'ajouter un champ (ou, plus généralement, X champs) à votre formulaire d'inscription afin de vous permettre d'avoir de plus amples informations sur vos abonnés.
Certains changements pourront se voir dans la liste des abonnés (le nom).
Pré requis
- Un script NewsletTux installé. Nous nous baserons ici sur la version 2.1.4.
- le script configuré pour afficher un formulaire normal (PAS de simplifié ou de surcharge)
- Il faut avoir sous la main le fichier form-newslettux.php (s'il est inclus dans ma_newsletter.php, il n'y a pas besoin de ce dernier)
- un accès à PHPMyAdmin si besoin
- il faut des connaissances en HTML sur les formulaires ainsi que des notions sur le traitement de formulaire en PHP
- Environ 20 minutes devant soi.
Vous pouvez lire ce tutorial comme une suite de copier/coller, mais avoir les connaissances est un plus.
Les modifications
Etape 1 : les préparatifs
Il faut tout d'abord avoir à l'idée 2 choses :
- Quelles sont les données que vous voulez recueillir ?
- N'est-ce pas un frein à l'inscription du visiteur ?
En effet, si vous imposez un formulaire de 25 champs, je pense que ça aura un impact significatif sur le quota d'inscriptions mensuelles (ou alors personne ne les remplira) ...
Dans cet exposé, nous allons demander au visiteur quelques données. Vous pouvez adapter ce principe à plus de données ...
Nous demanderons ainsi :
- Son nom,
- Son code postal.
- sa couleur d'yeux
- sa taille
Ces données, relatives aux abonnés, seront stockées dans la table ntux2_users (si "ntux2_" est le préfixe de vos tables).
Etape 2 : Identification des données
Cas n°1 : les données que vous demandez ont un champ déjà prévu dans la base (ex. le nom)
Dans ce cas, rendez-vous à l'étape 4.
Cas n°2 : il y a des données qui n'ont pas de champ prévu (ex. : code postal)
Typiquement, à part le nom, aucune donnée supplémentaire n'est prévue. Vous allez donc manuellement créer le champ qui accueillera ces données.
il faut un seul champ par type de données. Donc si vous demandez couleur des yeux, taille et code postal, il va vous falloir créer 3 champs.
Attention en nommant vos champs :
- N'utilisez que les lettres, le trait d'union (-) ou l'underscore (_)
- Certains noms sont réservés (les commandes SQL) : create, table, order, delete, select, insert, date, etc. (si vous prenez un nom français, hormis date vous avez de fortes chances de ne pas tomber sur un mot réservé)
- Je l'ai sous-entendu, mais évidemment pas de caractères spéciaux : pas de ponctuation, accent, espace, etc.
ensuite, il faut typer vos champs. C'est à dire dire si c'est un texte ou un nombre, et la taille maxi de ce nombre. Je ne vais pas rentrer dans les détails (la doc MySLQ est là pour ça) mais typiquement, il existe :
- VARCHAR pour les textes allant jusqu'à 255 caractères
- INT, SMALLINT pour les nombres entiers
- FLOAT pour les décimaux
Pour nos variables :
- Nom : le champ est déjà dans la base, nous n'allons pas le recréer.
- code postal : c'est un texte (sinon le code postal 06000 sera traité comme 6000) de maxi 5 chiffres : VARCHAR(5) - on l'appellera champ_code_postal
- couleur d'yeux : un texte (yeux noirs, bleus, verts) d'au plus 10 caractères (soyons larges) : VARCHAR(10) - on l'appellera champ_couleur_yeux
- taille : on peut le stocker en tant que texte, par exemple. (sinon c'est FLOAT si vous la voulez en mètres ou SMALLINT en centimètres) - on l'appellera champ_taille
Etape 3 : création des champs supplémentaires
pour chacun de nos champs, on va exécuter une requête de création. Voici ce que vous devez copier/coller dans PHPMyAdmin (adaptez le nom des champs et le préfixe de la table)
ALTER TABLE `ntux2_users` ADD `champ_code_postal` VARCHAR(5) NOT NULL; ALTER TABLE `ntux2_users` ADD `champ_couleur_yeux` VARCHAR(10) NOT NULL; ALTER TABLE `ntux2_users` ADD `champ_taille` VARCHAR(5) NOT NULL;
Les champs supplémentaires sont créés !
Etape 4 : ajout dans le formulaire de NewsletTux
On va maintenant ajouter ces champs supplémentaires dans le formulaire d'inscription.
Ouvrez form-newslettux.php et localisez env. ligne 586 : else // DEF_REG_FORM == 'normal' : c'est à partir de là que nous allons modifier.
Ligne 734, on a // display all newsletters with formats : nous allons rajouter nos champs juste en dessous.
Ce bloc commence par un <fieldset> (ligne 735) et finit par un </fieldset> (ligne 773). Ligne 774, rajoutez ce code :
echo ' <fieldset><legend>Données annexes</legend>'.CR; echo ' <p><label for="user_name">Votre nom :</label>'; echo '<input type="text" id="user_name" name="user_name" tabindex="'.$tabindex.'"'.DOC.'</p>'.CR; $tabindex++; echo ' <p><label for="champ_code_postal">Votre Code Postal :</label>'; echo '<input type="text" id="champ_code_postal" name="champ_code_postal" tabindex="'.$tabindex.'"'.DOC.'</p>'.CR; $tabindex++; echo ' <p><label for="champ_couleur_yeux">Couleur de vos yeux :</label>'; echo '<input type="text" id="champ_couleur_yeux" name="champ_couleur_yeux" tabindex="'.$tabindex.'"'.DOC.'</p>'.CR; $tabindex++; echo ' <p><label for="champ_taille">Votre taille :</label>'; echo '<input type="text" id="champ_taille" name="champ_taille" tabindex="'.$tabindex.'"'.DOC.'</p>'.CR; $tabindex++; echo ' </fieldset>'.CR;
Vous comprendez qu'il y a une ligne HTML par nouveau champ. A vous d'en ajouter selon ce que vous désirez demander.
Par simplicité, j'ai nommé les champs de la même manière que les champs SQL. Ce n'est pas obligatoire, mais je ne souhaite pas faire un tuto trop compliqué :)
ATTENTION : Si vous souhaitez afficher un texte avec une apostrophe ("Votre couleur d'yeux" par exemple) vous devez précéder l'apostrophe par un anti slash : Votre couleur d\'yeux.
Etape 5 : récupération des champs et traitement.
Nous allons maintenant nous rendre ligne 591 pour récupérer les valeurs : juste après
$email = (IsEmail($email)) ? $email : '';
rajoutez :
$user_name = (isset($_POST['user_name'])) ? Rec($_POST['user_name']) : ''; $champ_code_postal = (isset($_POST['champ_code_postal'])) ? Rec($_POST['champ_code_postal']) : ''; $champ_couleur_yeux = (isset($_POST['champ_couleur_yeux'])) ? Rec($_POST['champ_couleur_yeux']) : ''; $champ_taille = (isset($_POST['champ_taille'])) ? Rec($_POST['champ_taille']) : '';
Nos valeurs sont ainsi récupérées. Il ne reste qu'à les enregistrer dans la base.
Nous allons maintenant nous rendre environ ligne 680. Ce code :
// add new user $new_subscriber_id = AddSubscriber($email); $useradd = true;
devient :
// add new user $otherfields = array(); $otherfields['champ_code_postal'] = $champ_code_postal; $otherfields['champ_couleur_yeux'] = $champ_couleur_yeux; $otherfields['champ_taille'] = $champ_taille; $new_subscriber_id = AddSubscriber($email, $user_name, $otherfields); $useradd = true;
Vous devez créer le tableau $otherfields avec vos champs ajoutés. La seule exception est pour le nom, qui est compté à part. Si vous ne désirez ajouter que le nom (donc vous n'êtes pas intéressé par savoir la taille, le code postal ou la couleur des yeux) alors mettez ce code :
// add new user $otherfields = array(); $new_subscriber_id = AddSubscriber($email, $user_name, $otherfields); $useradd = true;
(un tableau vide plus exactement).
Au passage, vous devez corriger dans lib/function_users.php ligne 405 :
$otherfields_names .= $field_name.'|@@'; $otherfields_values .= "'".DBInsert($field_value)."'";
par :
$otherfields_names .= $field_name.'|@@'; $otherfields_values .= "'".DBInsert($field_value)."'|@@";
Et c'est fini ...
Conséquences
Ce tutorial ne permet pas de différencier valeurs obligatoires et facultatives. Tous les champs supplémentaires sont facultatifs. Pour les rendre obligatoires, j'aurais du doubler le nombre de lignes de ce tuto et rentrer plus dans les détails. :)
Vous avez compris, au travers des 5 étapes, comment ajouter des données. Il faut savoir que seul le nom sera visible dans le listing des abonnés (à moins que vous ne vouliez manuellement modifier le fichier admin/subscribers.php pour faire une colonne de plus. Mais cela implique encore plus de travail).
Pour utiliser ces données avec le module de personnalisation des newsletters, vous devrez nommer les champs --ntux2_{nom_de_votre_champ}--, par exemple --ntux2_champ_couleur_yeux--
Prévoir les mises à jour
En cas de mise à jour du script, si vous avez choisi des noms de champs français, il y a de faibles chances qu'ils posent souci. Le profil de l'utilisateur est rarement mis à jour dans les évolutions de NewsletTux. Par contre, sauvegardez vos lignes rajoutées dans form_newslettux.php en cas de mise à jour de celui-ci.

