Jump to content

Personnaliser le formulaire d'inscription


Recommended Posts

Bonjour,
Je rencontre actuellement un problème lors de la réalisation de mon site sous prestashop 1.5.3.1.
Je souhaite donner la possibilité aux gens qui s'inscrivent de le faire selon deux profils possibles avec chacun les informations nécessaires dont j'ai besoin.
Pour cela j'ai modifié le fichier authentication.tpl de la manière suivante :

 

<form action="{$link->getPageLink('authentication', true)}" method="post" id="account-creation_form" class="std">
	{$HOOK_CREATE_ACCOUNT_TOP}
	<fieldset class="account_creation">
		<h3>{l s='Your personal information'}</h3>
		<p class="radio required">
					<span>Vous êtes un :</span>
					<input type="radio" name="id_group" id="id_group3" value="3" {if isset($smarty.post.id_group) && $smarty.post.id_group == '2'}checked="checked"{/if} />
					<label for="id_group2">Client</label>
					<input type="radio" name="id_group" id="id_group4" value="4" {if isset($smarty.post.id_group) && $smarty.post.id_group == '1'}checked="checked"{/if} />
					<label for="id_group1">Photographe</label>
		</p>
		<div class="commun">
		<p class="radio required">
			<span>{l s='Title'}</span>
			{foreach from=$genders key=k item=gender}
				<input type="radio" name="id_gender" id="id_gender{$gender->id}" value="{$gender->id}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender->id}checked="checked"{/if} />
				<label for="id_gender{$gender->id}" class="top">{$gender->name}</label>
			{/foreach}
		</p>
		<p class="required text">
			<label for="customer_firstname">{l s='First name'} <sup>*</sup></label>
			<input onkeyup="$('#firstname').val(this.value);" type="text" class="text" id="customer_firstname" name="customer_firstname" value="{if isset($smarty.post.customer_firstname)}{$smarty.post.customer_firstname}{/if}" />
		</p>
		<p class="required text">
			<label for="customer_lastname">{l s='Last name'} <sup>*</sup></label>
			<input onkeyup="$('#lastname').val(this.value);" type="text" class="text" id="customer_lastname" name="customer_lastname" value="{if isset($smarty.post.customer_lastname)}{$smarty.post.customer_lastname}{/if}" />
		</p>
		<p class="required text">
			<label for="email">{l s='E-mail'} <sup>*</sup></label>
			<input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" />
		</p>
		<p class="required password">
			<label for="passwd">{l s='Password'} <sup>*</sup></label>
			<input type="password" class="text" name="passwd" id="passwd" />
			<span class="form_info">{l s='(5 characters min.)'}</span>
		</p>
		</div>
		<div class="photographe">
		<p class="required select">
			<span>{l s='Date of Birth'}<sup> *</sup></span>
			<select id="days" name="days">
				<option value="">-</option>
				{foreach from=$days item=day}
					<option value="{$day}" {if ($sl_day == $day)} selected="selected"{/if}>{$day}  </option>
				{/foreach}
			</select>
			{*
				{l s='January'}
				{l s='February'}
				{l s='March'}
				{l s='April'}
				{l s='May'}
				{l s='June'}
				{l s='July'}
				{l s='August'}
				{l s='September'}
				{l s='October'}
				{l s='November'}
				{l s='December'}
			*}
			<select id="months" name="months">
				<option value="">-</option>
				{foreach from=$months key=k item=month}
					<option value="{$k}" {if ($sl_month == $k)} selected="selected"{/if}>{l s=$month} </option>
				{/foreach}
			</select>
			<select id="years" name="years">
				<option value="">-</option>
				{foreach from=$years item=year}
					<option value="{$year}" {if ($sl_year == $year)} selected="selected"{/if}>{$year}  </option>
				{/foreach}
			</select>
		</p>
		<p class="required photographe_description">
		<label for="photographe_description">Description de vous <sup>*</sup></label>
			<input type="password" class="text" name="photographe_description" id="photographe_description" maxlength="500" />
			<span class="form_info">{l s='(500 characters max.)'}</span>
		</p>
		<p class="required photographe_picture>
		<label for="photographe_picture"> Photo de vous <sup>*</sup></label>
			<input type="file" class="file" name="photographe_picture" id="photographe_picture"/>
		</p>
		</div>
		<div class="client">
		<p class="select">
			<span>{l s='Date of Birth'}</span>
			<select id="days" name="days">
				<option value="">-</option>
				{foreach from=$days item=day}
					<option value="{$day}" {if ($sl_day == $day)} selected="selected"{/if}>{$day}  </option>
				{/foreach}
			</select>
			{*
				{l s='January'}
				{l s='February'}
				{l s='March'}
				{l s='April'}
				{l s='May'}
				{l s='June'}
				{l s='July'}
				{l s='August'}
				{l s='September'}
				{l s='October'}
				{l s='November'}
				{l s='December'}
			*}
			<select id="months" name="months">
				<option value="">-</option>
				{foreach from=$months key=k item=month}
					<option value="{$k}" {if ($sl_month == $k)} selected="selected"{/if}>{l s=$month} </option>
				{/foreach}
			</select>
			<select id="years" name="years">
				<option value="">-</option>
				{foreach from=$years item=year}
					<option value="{$year}" {if ($sl_year == $year)} selected="selected"{/if}>{$year}  </option>
				{/foreach}
			</select>
		</p>
		</div>
		{if $newsletter}
		<p class="checkbox" >
			<input type="checkbox" name="newsletter" id="newsletter" value="1" {if isset($smarty.post.newsletter) AND $smarty.post.newsletter == 1} checked="checked"{/if} />
			<label for="newsletter">{l s='Sign up for our newsletter'}</label>
		</p>

On peut voir un div 'commun' ou s'affiche les textes nécessaires aux deux catégories et deux autres div qui s'affichent en fonction du bouton radio que l'utilisateur va cocher. Ceci est réalisé grâce à un script sur la page.

Tout ceci fonctionne. Néanmoins, je ne sais pas comment faire pour récupérer les informations dans ma base de données ps_customer. à savoir que je souhaite réutiliser la photo et la description du photographe dans ma page produit.

Pour ce qui est du client Rien ne change par rapport à une inscription classique.

N'hésitez pas à me poser des questions si vous n'avez pas compris quelque chose.

 

Merci d'avance aux personnes qui voudront bien m'aider

 

Link to comment
Share on other sites

Bonjour,

 

Si je comprends bien tu souhaites ajouter les champs suivants à tes clients si ce sont des photographes

photographe_picture

photographe_description

 

Est-ce que tu as déjà surchargé le modèle Customer et créé les champs dans la base de données pour prendre en compte tes nouveaux champs ?
Le fait que tu souhaites uploader une image va nécessiter également une surcharge du fichier AuthController.php pour gérer son envoi.

 

Link to comment
Share on other sites

Bonjour Hervé,

Tout d'abord merci de prendre le temps de m'aider. Mes connaissances en smarty ne sont pas très abouti es alors je risque de te demander de plus grandes informations.

Effectivement tu as bien résumé ce que je veux faire.

alors pour l'instant j'ai uniquement modifier mon fichier authentication.tpl. Je ne sais pas comment faire en sorte que les informations soient enregistrées dans la base de données.

Pour ce qui est de la photo je ne sait pas comment gèrer son envoi sachant que son but est uniquement de la faire réapparaître dans ma fiche produit. Peut on enregistrer uniquement l'adresse de la où elle sera stockée ?

 

Je reste à ta disposition si tu souhaites plus d'informations.

 

Merci

Link to comment
Share on other sites

Bonjour,
 

La première chose à faire est de créer tes nouveaux champs dans la table ps_customer.

( Avec les bon types de champs en fonction de ce que tu souhaites insérer // Je dirais Varchar pour photographe_picture et text pour photographe_description)

 

Il faut ensuite surcharger ton modèle customer en plaçant un fichier dans ce genre dans le dossier override/classes/Customer.php

<?php
class Customer extends CustomerCore {
    
    /** @var string Image du photographe */
    public $photographe_picture;
	
    /** @var Description du photographe */
    public $photographe_description;
    
    
    public function __construct($id = null, $id_lang = null, $id_shop = null) {

        //Validation des nouveaux champs
        self::$definition['fields']['photographe_description'] = array('type' => self::TYPE_STRING, 'validate' => 'isString');
        self::$definition['fields']['photographe_picture'] = array('type' => self::TYPE_STRING, 'validate' => 'isString','size' => 255);

        parent::__construct($id, $id_lang, $id_shop);
    }
}
?>

Normalement cela devrait déjà te permettre de renseigner tes champs spécifiques.

Oui pour l'image il faut stocker le nom de l'image dans la base de données, et de l'uploader dans un dossier spécifique ( ou demander un lien web directement )

Link to comment
Share on other sites

Les champs ont bien été créés dans la table ps_customer. Pas de souci de ce côté là.

J'ai bien modifié le fichier comme indiqué mais je souhaiterai avoir un peu plus d'informations sur cette modification. A quoi est-ce-que ça sert de surcharger le modèle customer? Est-ce pour faire comprendre à Prestashop qu'il y a de nouveaux champs à renseigner lors du traitement du formulaire?

Par la suite, comment faire en sorte que ces champs soient enregistrés lors de l'inscription de la personne? Comment limiter en longueur le champ de description du photographe?

 

Merci de votre aide.

Link to comment
Share on other sites

La surcharge du modèle client permets de rajouter tes 2 nouveaux paramètres à l'objet Customer et ainsi de pouvoir les récupérer et les manipuler dès lors que cet objet sera instancié.
 

N'hésitez pas à consulter la documentation si ce genre de notions ne vous sont pas familières : http://doc.prestashop.com/display/PS16/Developer+Guide car elles sont indispensables dans votre cas pour pouvoir traiter votre problématique.

 

Si vous souhaitez limitez la longueur de la description le fonctionnement est le même que pour la photo

En replaçant les xxx par le nombre de caractères maximum souhaités.

self::$definition['fields']['photographe_description'] = array('type' => self::TYPE_STRING, 'validate' => 'isString' ,'size'=> xxxx);
Link to comment
Share on other sites

C'est bon je me suis renseigné sur le principe de surcharge et son utilité pour pouvoir garder un core inchangé et ainsi faciliter les mises à jours.

Si j'ai bien compris, je vas devoir surcharger maintenant le authcontroller.php, non? Mais je ne sais pas vraiment comment m'y prendre.

 

Merci d'avance.

Link to comment
Share on other sites

En fait non je me trompais. Après un essai il s'avère que les information sont bien enregistrées dans la bdd.

Cependant pour ce qui est de la photo cela m'enregistre uniquement le nom de la photo et celle-ci n'est pas enregistrée sur mon serveur. Comment faire?

 

Merci d'avance.

Link to comment
Share on other sites

  • 7 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...