PHP-Astux.info

Adoptez un Tux!

Tuto NewsletTux 2 : ajouter des champs au formulaire normal

Sommaire

  1. Principe d'action
  2. Les modifications
  3. Conséquences
  4. Prévoir les mises à jour

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

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 :

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 :

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 :

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 :

Pour nos variables :

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.