sunwares Posted May 11, 2010 Share Posted May 11, 2010 Désolé pour les modos, j'ai posté le message initial dans le forum anglais Bonjour,Voici mon dilemne:Je souhaite véritablement personnaliser le formulaire d’inscription des clients.Je peux ajouter un champ cependant je souhaite implémenter une liste déroulante sur leur adresse en fonction de leur choix précédent (listes liées): – Pays – Région – Département – VilleA priori tout se passe dans adress.tpl et authentification.tpl————————- idSelectedCountry = {if isset($smarty.post.id_region)}{$smarty.post.id_region|intval}{else}false{/if}; countries = new Array(); {foreach from=$countries item='country'} {if isset($country.states)} countries[{$country.id_country|intval}] = new Array(); {foreach from=$country.states item='state' name='states'} countries[{$country.id_country|intval}]['{$state.id_state|intval}'] = '{$state.name}'; {/foreach} {/if} {/foreach} $(function(){ldelim} $('.id_state option[value={if isset($smarty.post.id_state)}{$smarty.post.id_state}{else}{$address->id_state|escape:'htmlall':'UTF-8'}{/if}]').attr('selected', 'selected'); {rdelim}); //]]> [removed] —————————Cependant ce code reste obscur pour moi, où sont gérées les tables ?Je pars sur des tables – country (pour les pays) – region (liée par id_country) – département qui sera liée par id_regionet villes liée par id_departementComment modifier ce code pour faire appel à mes tables ?Merci !!!!Yann. Link to comment Share on other sites More sharing options...
ould.abeidy Posted May 11, 2010 Share Posted May 11, 2010 Bonjour,personnellement je suis entraine de faire de modification sur le module fabricant pour l'adapter et intégrer de select liées pour faire un module de recherche personnaliser car je pas trouver ce module pour l'acheter j'avoue il me reste beaucoup de chose a faire vu que j'ai de difficulté avec smarty aussi bon courage. Link to comment Share on other sites More sharing options...
sunwares Posted May 11, 2010 Author Share Posted May 11, 2010 Héhé merci, on y croit Link to comment Share on other sites More sharing options...
ould.abeidy Posted May 11, 2010 Share Posted May 11, 2010 Bonjour,si tu avance dans ton recherche sa m'arrange si tu me tien au coran regarde le capture salut. Link to comment Share on other sites More sharing options...
sunwares Posted May 11, 2010 Author Share Posted May 11, 2010 Oui si on trouve la solution, je la mets en ligne. Ca aidera pas mal de monde j'imagine. Link to comment Share on other sites More sharing options...
sunwares Posted May 11, 2010 Author Share Posted May 11, 2010 Personne n'a personnalisé son formulaire client? Bon ben je continue de chercher de mon côté en tout cas. Link to comment Share on other sites More sharing options...
ShowYou Posted May 13, 2010 Share Posted May 13, 2010 Bonsoir sunwares, J'y travaille et je me bidouille pour trouver une solution pour créer un autre formulaire plus court.Je m'explique : il faut créer un compte pour accéder au prix et je voudrai que le formulaire soit court (Titre, Nom, Prénom, email, mot de passe, date de naissance).Quand le visiteur passe une commande, il faudrait que l'autre partie du formulaire de départ s'affiche (reprise du nom et prénom puis adresse, cp...).J'ai réussi à créer un authentication_short.tpl et un authentication_short.php (ok c'est encore un peu en bidouillage) mais j'ai un souci avec la class adress.phpJe continue à faire des tests.... Link to comment Share on other sites More sharing options...
sunwares Posted May 14, 2010 Author Share Posted May 14, 2010 Bonjour Monvidedressing,j'avais trouvé des infos sympas pour ajouter des champs obligatoires (ou pas) dans un formulaire.Il y a pas mal de fichiers à modifier, je te poste ça ci dessous:/themes/prestashop/authentification.tpl – this adds the actual fields in the registration form/classes/Address.php – this makes the addresses management, it tells the form how to handle the submitted info/admin/tabs/AdminAddresses.php – this allows the back office to retrieve and edit the submitted info/themes/prestashop/addresses.tplVoici le cheminement pour l'ajout d'un champ obligatoire (en anglais):1. /themes/prestashop/authentification.tplThis is an example of a custom textfield added. You need to add this between two paragraphs as needed, in the account-creation_form form. {l s=‘C.I.F.’} <input type=“text” class=“text” id=“cif” name=“cif” value=”{if isset($smarty.post.cif)}{$smarty.post.cif}{/if}” /> 2. /classes/Address.phpIn this file there are several places in witch code needs to be added:In class “Address extends ObjectModel” you need to add : /** @var string C.I.F. (optional) */ public $cif; In “protected $fieldsSize = array” you need to add: ‘cif’=>32 In “protected “$fieldsValidate” you need to add: ‘cif’ => ‘isGenericName’ In “public function getFields() { parent::validateFields(); if (isset($this->id))”you need to add: $fields[‘cif’] = pSQL($this->cif); 3. /admin/tabs/AdminAddresses.phpYou need to add in the code that makes the form for the BackOffice address management, in my case line 238, after the Company text field: ’.$this->l(‘C.I.F.’).’ <input type=“text” size=“33” name=“cif” value=”’.htmlentities($this->getFieldValue($obj, ‘cif’), ENT_COMPAT, ‘UTF-8’).’” > ’.$this->l(‘Invalid characters:’).’ <>;=#{} 4. /addresses.tplJust after : “ {if $address.company}{$address.company}{/if} “ on line 21 ( i guess ) you must add :{if $address.cif}{$address.cif}{/if} {if $address.recom}{$address.recom}{/if} En espérant que cela t'aide.De mon côté, je n'arrive toujours pas à créer de listes liées dans le formulaire d'inscription.Yann. Link to comment Share on other sites More sharing options...
ShowYou Posted May 14, 2010 Share Posted May 14, 2010 Bonjour Yann, D'abord, j'aimerai que tu m'expliques exactement ce que tu souhaites.Tu veux ajouter un champ, lequel ?Lié à quel autre champs ? Liaison en cascade ?Ensuite, mille merci pour tes informations. Je les avais déjà puisque j'ai déjà fait quelques modifications. Ajouter ou enlever un champs, j'avais les infos.Le but étant de supprimer l'obligation de fournir l'adresse lors d'une simple inscription, je me demande si en mettant {if logged} ça ne résoudrait pas mon problème. Je vais faire des tests. Link to comment Share on other sites More sharing options...
sunwares Posted May 14, 2010 Author Share Posted May 14, 2010 En fait je souhaite créer un formulaire d'enregistrement avec les éléments suivants:- Région- Département- VilleCes 3 listes étant liées en cascade via 3 tables distinctes.Et partant de ce principe, ajouter 2 autres champs liés:- Modèle- Marque (voiture).J'ai tenté de m'appuyer sur le script qui gère les pays et états dans address.tpl et authentification.tpl mais je n'arrive pas à l'adapter à mes tables. En fait, je ne vois pas où il est fait appel aux tables dans ce script. idSelectedCountry = {if isset($smarty.post.id_region)}{$smarty.post.id_region|intval}{else}false{/if}; countries = new Array(); {foreach from=$countries item='country'} {if isset($country.states)} countries[{$country.id_country|intval}] = new Array(); {foreach from=$country.states item='state' name='states'} countries[{$country.id_country|intval}]['{$state.id_state|intval}'] = '{$state.name}'; {/foreach} {/if} {/foreach} $(function(){ldelim} $('.id_state option[value={if isset($smarty.post.id_state)}{$smarty.post.id_state}{else}{$address->id_state|escape:'htmlall':'UTF-8'}{/if}]').attr('selected', 'selected'); {rdelim}); //]]> J'ai aussi remarqué que dans le répertoire des classes, il y avait 2 fichiers:- country.php et state.php qui vraisemblablement jouent un rôle dans le script de liste liées.exemple de state.php: <?php /** * State class, State.php * States management * @category classes * * @author PrestaShop * @copyright PrestaShop * @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0 * @version 1.2 * */ class State extends ObjectModel { /** @var integer Country id which state belongs */ public $id_country; /** @var integer Zone id which state belongs */ public $id_zone; /** @var string 2 letters iso code */ public $iso_code; /** @var string Name */ public $name; /** @var interger Tax behavior */ public $tax_behavior; /** @var boolean Status for delivery */ public $active = true; protected $fieldsRequired = array('id_country', 'id_zone', 'iso_code', 'name', 'tax_behavior'); protected $fieldsSize = array('iso_code' => 4, 'name' => 32); protected $fieldsValidate = array('id_country' => 'isUnsignedId', 'id_zone' => 'isUnsignedId', 'iso_code' => 'isStateIsoCode', 'name' => 'isGenericName', 'tax_behavior' => 'isUnsignedInt', 'active' => 'isBool'); protected $table = 'state'; protected $identifier = 'id_state'; public function getFields() { parent::validateFields(); $fields['id_country'] = intval($this->id_country); $fields['id_zone'] = intval($this->id_zone); $fields['iso_code'] = pSQL(strtoupper($this->iso_code)); $fields['name'] = pSQL($this->name); $fields['tax_behavior'] = intval($this->tax_behavior); $fields['active'] = intval($this->active); return $fields; } public static function getStates($id_lang, $active = false) { return Db::getInstance()->ExecuteS(' SELECT `id_state`, `id_country`, `id_zone`, `iso_code`, `name`, `tax_behavior`, `active` FROM `'._DB_PREFIX_.'state` '.($active ? 'WHERE active = 1' : '').' ORDER BY `name` ASC'); } /** * Get a state name with its ID * * @param integer $id_state Country ID * @return string State name */ static public function getNameById($id_state) { $result = Db::getInstance()->getRow(' SELECT `name` FROM `'._DB_PREFIX_.'state` WHERE `id_state` = '.intval($id_state).''); return $result['name']; } /** * Get a state id with its name * * @param string $id_state Country ID * @return integer state id */ static public function getIdByName($state) { $result = Db::getInstance()->getRow(' SELECT `id_state` FROM `'._DB_PREFIX_.'state` WHERE `name` LIKE \''.pSQL($state).'\''); return (intval($result['id_state'])); } } ?> Merci à toi pour ton aide Link to comment Share on other sites More sharing options...
ShowYou Posted May 14, 2010 Share Posted May 14, 2010 Re,Attention je ne suis pas une informaticienne.. je donne des idées ou des pistes ou des suggestions....... je fais ce que je peux pour aider mon prochain.Ce qui me vient à l'esprit à froid :D'abord, les pays sont tous enregistrés pour les proposer en choix. Il va donc falloir commencer par là. Il faudrait peut-être aller dans les listes Etat, Pays et Zone pour assurer la partie cascade.Ensuite, les voitures, est-ce un produit de ta boutique ? si non, il faudrait peut-être créer une table dans la BDD...Je t'ai aidé là ???? ;-) Link to comment Share on other sites More sharing options...
sunwares Posted May 14, 2010 Author Share Posted May 14, 2010 Et bien en fait j'ai déjà modifié les tables associées aux listes. C'est effectivement la bonne méthode pour ce problème. là ou je bloque c'est sur la partie 'code'.Merci Link to comment Share on other sites More sharing options...
ShowYou Posted May 14, 2010 Share Posted May 14, 2010 Je fais ce que je peux mais ne serait pas à ce niveau :Class State...... dessous les différents champs de cette table (j'ai vérifié ça correspond!)Peut-être partir d'un double state.php, l'adapter pour les voitures et appeler le script dans le formulaire...... Link to comment Share on other sites More sharing options...
sunwares Posted May 15, 2010 Author Share Posted May 15, 2010 Après beaucoup de tests de modification, j'ai remarqué que ce bout de code dans country.php gère l'apparition du choix des 'states': $states = Db::getInstance()->ExecuteS(' SELECT s.* FROM `'._DB_PREFIX_.'state` s '); Quand je modifie FROM `'._DB_PREFIX_.'state` s en FROM `'._DB_PREFIX_.'region` s (le nom de ma table), ça ne marche pas.Quelqu'un peut m'aider à décoder ?notemment :SELECT s.*ça correpond à quoi?et pourquoi y'a un s après le nom de la table dans:FROM `'._DB_PREFIX_.'state` sMerci à tout les dev ! Link to comment Share on other sites More sharing options...
Marc Posted October 7, 2011 Share Posted October 7, 2011 Bonjour Souvent des clients s'inscrivent sans bien regarder les cases, et ne choisissent pas leur pays en laissant le pays par défaut Donc je souhaite ne pas proposer aux clients un pays par defaut dans la liste pendant l'inscription, afin de leur obliger à choisir leur pays. Je voudrais donc afficher " ------------- " au lieu de " France " dans la liste des pays à choisir. Quelqu'un pour m'aider ? Merci par avance ! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now