Geoff95 Posted June 11, 2011 Share Posted June 11, 2011 Bonjour,J'ai créé un script qui me permet de cartographier mes vendeurs, ainsi qu'un rayon de vente (vendeurs à domicile). Pour cette carte j'ai besoin, d'un rayon de vente, ainsi que 2 checkbox (un qui permet demande l'accord pour afficher les informations personnelles (nom, prénom, ville, mail) et une autre qui est active seulement si la première est coché, qui permet de donner son accord pour afficher son numéro de portable sur la carte)Je fais tout ça lors de l'inscription, donc le formulaire est créé sans problème, je récupère sans soucis non plus les informations entrées, ma carte fonctionne très bien.Maintenant, il faut que je puisse éditer les informations entrées lors de l'inscription (donc le rayon, et les 2 checkbox), donc pour ça je passe par le formulaire "identity.php), idem, j'arrive très bien à transmettre les données pour les enregistrer.Sauf que (bah, oui, ça serait trop facile sinon, et je serais par conséquent pas là ^^) je voudrais lorsque j'affiche la page "identity.php" récupérer les informations déjà entrées (c'est à dire que si les 2checkbox sont coché lors de l'inscription, lorsque j'édit et que j'arrive sur la page identity.php, les deux checkbox sont cochés et idem que le rayon soit déjà sélectionné dans le select) un peu comme le reste des informations (nom prénom, mail etc...) du formulaire de base.Voilà le .tpl du formulaire: Cartograhpie des Ambassadrices Rayon de vente estimé (autour de votre ville) - 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 *(valeurs en Km) Afficher mes informations sur la Carte* <input type="checkbox" name="diffuse" id="diffuse" value="1" {if $smarty.post.diffuse == 1} checked="checked"{/if} /> *Affiche les informations suivantes: Nom, Prénom, Ville et Adresse Email. Cela permet à une Ambassadrice, Manager ou Leader de vous contacter plus facilement (non obligatoire, mais recommandé). Afficher mon Numéro de Portable* <input type="checkbox" name="diffusetel" id="diffusetel" value="1" {if $smarty.post.diffusetel == 1} checked="checked"{/if} checked/> *Affiche le Numéro de Portable sur la Carte (Permet d'être contacter plus facilement par les autres Ambassadrices. {literal} [removed] function toggleSubmit() { document.getElementById('diffusetel').disabled = !document.getElementById('diffuse').checked; } document.getElementById('diffuse').onclick = toggleSubmit; toggleSubmit(); // Déclenchement au premier affichage [removed] {/literal} <input type="submit" class="button" name="submitIdentity" value="{l s='Save'}" /> Ensuite, je voudrais ajouter une requête lorsque j'édite la ville (donc là je suis dans le formulaire address.php) qui, dans un premier lieu, va chercher la ville déjà enregistrée dans la base de donnée correspondant à ce customer (en l’occurrence ici, mon vendeur).Pour enfin, lorsque je valide le formulaire address.php, comparer si le champs 'city'est différent de la ville précédemment récupérée dans la base de données (qui me permet ensuite de lancer mon script, pour mettre à jour ma carte).Pour les requêtes, j'ai aucun soucis, je sais contacter ma BDD et tout, mais, j'ignore comment récupérer l'id customer (afin de pouvoir récupérer la ville correspondant à cet id dans la table ps_address) et à quel moment je dois faire ma comparaison.Des personnes sauraient m'aider? (au moins dans un premier temps, pour la première partie de mon problème)Geoffrey. Link to comment Share on other sites More sharing options...
Geoff95 Posted June 13, 2011 Author Share Posted June 13, 2011 Salut,Personne saurais me renseigner la dessus? Au moins, sur la récupération des informations dans la BDD pour le formulaire de la page identity.php qui permet d'afficher les informations déjà saisies par l'utilisateur? Link to comment Share on other sites More sharing options...
Geoff95 Posted June 19, 2011 Author Share Posted June 19, 2011 Salut,Vraiment personne pour m'aider? Quelqu'un de la Team PrestaShop? :sC'est assez important et urgent :/Geoffrey. Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 22, 2011 Share Posted June 22, 2011 Si j'ai bien compris, tu as rajouté des champs dans le formulaire d'inscription et la partie Mon Compte, tu arrives à enregistrer les données rentrées par l'utilisateur dans la base de donnée et tu souhaiterait les afficher pré-remplis lorsque l'utilisateur se connecte à la partie Mon Compte ?Si j'ai bien un compris, un simple Db::getInstance()->ExecuteS (ou getRow) suivi d'un assign au template devrait régler ton problème.En fait je comprends comment si tu arrives à enregistrer les données, tu n'arrives pas à les ré afficher derrière. Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 Re,Merci pour ta réponse, pourrais-tu me confirmer la syntaxe: Db::getInstance()->ExecuteS($smarty->assign('diffuse', $customer->diffuse)); Le soucis, c'est que quand je suis sur la page "indentity.php" donc (Mes données personnels), j'ai bien le formulaire que j'ai rajouté, sauf qu'il est vierge (donc dans le select c'est la première valeur qui apparaît soit "--' au lieu de "25" (valeur qui apparaît dans la BDD), idem pour les checkbox, les deux sont coché (valeur = 1 dans la BDD) or, il sont décoché sur le formulaire de la page).Si je modifie les valeurs de se formulaire et que j'enregistre, il me sauvegarde bien dans la BDD les nouvelles valeurs, le problème c'est seulement l'affichage des valeurs actuellement enregistrées dans la bdd sur la page du formulaire.Merci,Geoffrey. Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 22, 2011 Share Posted June 22, 2011 Houlà non pas du tout. Db::getInstance()->ExecuteS sert à faire des Select SQL et Smarty a assigné des valeurs dans le template, tu ne peux pas les imbriqués comme cela. Par curiosité peux tu me montrer comment tu enregistres les données en bdd, car tu n'as pas l'air de bien connaitre le fonctionnement de la class Db dans PrestaShop, donc je suis un peu curieux.Qu'as tu rajouter comme table et comme champs dans ta bdd ?As tu les rajouté les champs dans l'objet Customer ? Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 Re,Avec le smarty j'ai effectivement beaucoup de mal, voici comment j'ajoute à la BDD:(fichier classes/Customers.php) $fields['rayon'] = (int)Tools::getValue('rayon'); $fields['diffuse'] = (int)Tools::getValue('diffuse'); $fields['diffusetel'] = (int)Tools::getValue('diffusetel'); J'ai mit les champs "rayon" "diffuse" "diffusetel" dans la table ps_customers.Pour l'edition des informations, donc sur la page identity.php, je n'ai rien eu besoin de touché simplement à rajouter le formulaire dans le fichier identity.tpl (donc je suppose qu'il utilise la page Customer.php pour enregistrer les données).Merci,Geoffrey. Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 22, 2011 Share Posted June 22, 2011 Ah alors, c'est très simple, je vais te proposer de modifier légèrement ton code. $fields['rayon'] = (int)Tools::getValue('rayon'); $fields['diffuse'] = (int)Tools::getValue('diffuse'); $fields['diffusetel'] = (int)Tools::getValue('diffusetel'); Par $fields['rayon'] = (int)$this->rayon; $fields['diffuse'] = (int)$this->diffuse; $fields['diffusetel'] = (int)$this->diffusetel; Ensuite il suffit de rajouter les champs rayon, diffuse et diffusetel à l'objet Customer (parmi les variables déclarés au début de l'objet). public $rayon; public $diffuse; public $diffusetel; Une fois ces variables chargés, le code $customer = new Customer((int)(self::$cookie->id_customer)); récupérera automatiquement les informations en base de données, et il sera possible d'y accéder en php de la manière suivante : $customer->rayon Pour ce qui est de smarty, dans le controller de Identity, on recopie directement les valeurs de l'objet dans POST comme tu peux le voir ici $_POST = array_map('stripslashes', $customer->getFields()); Tu peux donc accéder à la valeur dans smarty à l'aide du code suivant : {$smarty.post.rayon} Voilà, je pense tu devrais réussir à faire ce que tu veux Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 Re,Merci, pour les variables suivante, je les avait bien, j'avais oublié de le préciser dans mon précédent post public $rayon; public $diffuse; public $diffusetel; Le code suivant, apparaît déjà au début du fichier identity.php n'est-ce pas? $customer = new Customer((int)(self::$cookie->id_customer)); J'ai donc rajouté à la suite: $rayon = $customer->rayon; ensuite à la fin j'ai rajouté: 'rayon' => $rayon ce qui donne (je sais pas si j'ai bien fait de l'insérer ici): $smarty->assign(array( 'need_identification_number' => $need_identification_number, 'years' => Tools::dateYears(), 'sl_year' => $birthday[0], 'months' => Tools::dateMonths(), 'sl_month' => $birthday[1], 'days' => Tools::dateDays(), 'sl_day' => $birthday[2], 'errors' => $errors, 'rayon' => $rayon)); donc avec ton code, je récupère bien les checkbox, par contre le rayon reste sur la valeur "--" dans le tpl j'ai pour le select le code suivant: Rayon de vente estimé (autour de votre ville) - 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 *(valeurs en Km) Je ne suis pas du tout sûr de ce que j'ai fait, et visiblement, j'ai raison, puisque ça ne fonctionne qu'à moitiéMerci de l'aide que tu m'apportes, désolé si j'ai du mal ^^'Geoffrey. Link to comment Share on other sites More sharing options...
coeos.pro Posted June 22, 2011 Share Posted June 22, 2011 Bonjour, c'est normal que tu ai "-" à chaque fois tu ne précises pas lequel doit être sélectionné... 90 ensuite tu es en smarty et je vois que value est 1000* le nombre qui est à coté donc pourquoi ne pas utiliser une boucle ? {foreach from=$liste_rayons item=id_rayon} {$id_rayon} {/foreach} Et maintenant les 2 ensembles: {foreach $liste_rayons item=id_rayon} {$id_rayon} {/foreach} J'espère que je ne me suis pas trompé ---------------EDIT : si tu es en smarty 3, utilise la boucle for: {for $id_rayon=5 to 150 step 5} {$id_rayon} {/for} Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 22, 2011 Share Posted June 22, 2011 Relis bien mes réponses, tu n'as rien besoin d'assigner à Smarty.As tu bien remplacer le code que je t'ai demandé ? $fields['rayon'] = (int)Tools::getValue('rayon'); $fields['diffuse'] = (int)Tools::getValue('diffuse'); $fields['diffusetel'] = (int)Tools::getValue('diffusetel'); Par $fields['rayon'] = (int)$this->rayon; $fields['diffuse'] = (int)$this->diffuse; $fields['diffusetel'] = (int)$this->diffusetel; Je ne t'ai jamais demandé de rajouter ces lignes là : $rayon = $customer->rayon; 'rayon' => $rayon Et oui ce code est déjà present (comme précisé dans mon message) $customer = new Customer((int)(self::$cookie->id_customer)); Relis ce que j'ai fait et applique chaque étape. Mon message est très clair, tu devrais pouvoir t'en sortir.Mais il est important que tu lises toute ma réponse et que tu l'appliques complètement (et non en partie). Sinon cela marchera à moitié (comme tu l'as dit ) Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 Re,Bin j'avais compris ça au début, j'avais remplacé uniquement le code: $fields['rayon'] = (int)Tools::getValue('rayon'); $fields['diffuse'] = (int)Tools::getValue('diffuse'); $fields['diffusetel'] = (int)Tools::getValue('diffusetel'); Et comme ça ne fonctionnait pas, je me suis dit que j'avais mal compris et que j'avais oublié quelque chose, donc j'ai rajouté les bout de codes.Pour le .tpl, avec le code {foreach $liste_rayons item=id_rayon} {$id_rayon} {/foreach} Il y a 2 petites erreurs: {foreach $liste_rayons item=id_rayon} devient {foreach from=$liste_rayons item=id_rayon} Et {$id_rayon} devient {$id_rayon} Par contre, la liste est vide, donc je pense qu'il faut définir les valeurs de "$liste_rayons", dans le smarty3 on définie les valeurs en donnant le début, la fin et les étapes, mais ici, je la définie comment?Merci de ta patience (et il en faut parfois avec mes problèmes ^^')Geoffrey. Link to comment Share on other sites More sharing options...
coeos.pro Posted June 22, 2011 Share Posted June 22, 2011 oui j'ai oublié de le dire mais il faut créer une liste avant en smarty2, d’où l'avantage du smarty 3 (boucle for : {for $id_rayon=5 to 150 step 5})un peu de lecture : http://www.smarty.net/docs/en/language.function.for.tpl Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 Re,Merci, donc j'arrive à afficher la liste et à afficher la valeur enregistrée j'ai modifié le code de coeos.pro de la manière suivante: - {foreach from=$liste_rayons item=id_rayon} {$id_rayon} {/foreach} sans l'ajout du "*1000" dans le if, il n'affiche pas la valeur enregistrée.Merci à vous deux, vous m'avez bien aidé.Je vais encore abuser de votre temps si ça ne vous dérange pas ^^Je voudrais que lorsqu'un client modifie la ville de son adresse (donc dans la page address.php) il m'exécute un script php.Sauf que j'ignore comment effectuer la comparaison.Il me faudrait un truc du genre if ($oldcity != $city){ //$oldcity = ville lors de l'ouverture de la page address.php et $city ville présente dans le champs city lors de la validation) mon code } Ce que je pensais faire c'est lors de l'ouverture, récupérer la valeur dans la colonne "city", de l'enregistrer dans la variable $oldcity mais j'ignore comment récupérer cette valeur?ça peut être?: $oldcity = $address->city; Et ensuite, à quel endroit placer ma condition dans le fichier address.php?En tout cas, merci beaucoup pour l'aide que vous m'avez apportez jusqu'ici. Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 J'ai peut être parlé trop vite, en fait, lorsque j'édit mes informations depuis identity.php les valeurs des checkbox s'actualisent bien dans la base de données, par contre, maintenant, via la page "authentication.php, les valeurs des checkbox ne s'enregistrent plus dans la base de données.Voici mon code dans le tpl: Afficher mes informations sur la Carte* <input type="checkbox" name="diffuse" id="diffuse" value="1" {if $smarty.post.diffuse == 1} checked="checked"{/if} /> *Affiche les informations suivantes: Nom, Prénom, Ville et Adresse Email. Cela permet à une Ambassadrice, Manager ou Leader de vous contacter plus facilement (non obligatoire, mais recommandé). Afficher mon Numéro de Portable* <input type="checkbox" name="diffusetel" id="diffusetel" value="1" {if $smarty.post.diffusetel == 1} checked="checked"{/if} /> *Affiche le Numéro de Portable sur la Carte (Permet d'être contacter plus facilement par les autres Ambassadrices). {literal} [removed] function toggleSubmit() { document.getElementById('diffusetel').disabled = !document.getElementById('diffuse').checked; } document.getElementById('diffuse').onclick = toggleSubmit; toggleSubmit(); // Déclenchement au premier affichage [removed] {/literal} Une idée?Geoffrey. Link to comment Share on other sites More sharing options...
coeos.pro Posted June 22, 2011 Share Posted June 22, 2011 Il manque un ' vers la fin : document.getElementById('diffuse).onclick = toggleSubmit; En smarty 3 {literal} devient inutile A CONDITION de laisser un espace autour des accolades ute javascript ou le css)Je viens de passer le code à lamoulinette et ça marche Link to comment Share on other sites More sharing options...
Geoff95 Posted June 22, 2011 Author Share Posted June 22, 2011 le ' y est bien, j'ai dû faire une bêtise en collant le code, ou alors le forum me l'a gobé en validant.Je suis en smarty 2.6, donc le soucis ne vient pas de là, de plus j'avais supprimé la partie javascript pour faire des essais, j'ai même essayé en recopiant tout le fieldset du formulaire de la page "identity.php" pensant que c'était mon formulaire qui avec un erreur, puisque celui de identity.php fonctionne, mais ça change absolument rien, il ne veut absolument pas m'enregistrer les valeurs des checkbox. Link to comment Share on other sites More sharing options...
coeos.pro Posted June 22, 2011 Share Posted June 22, 2011 Change {if $smarty.post.diffusetel = = 1} par {if $smarty.post.diffusetel = = 'on'}pour un checbox il ne faut pas mettre de value c'est 'on' si coché et 'off' si non coché Link to comment Share on other sites More sharing options...
Fabien Serny Posted June 23, 2011 Share Posted June 23, 2011 Si je suis puis me permettre, je suis plus pour cette forme (enfin ça n'engage que moi ^^) : {if $smarty.post.diffusetel eq 'on'} Et je suis aussi pour laissé les balises smarty {literal} pour garder une rétrocompatibilité Smarty 2 Link to comment Share on other sites More sharing options...
Geoff95 Posted June 23, 2011 Author Share Posted June 23, 2011 Salut,Merci des réponses, j'ai essayé 4 manières différentes selon vos codes: <input type="checkbox" name="diffuse" id="diffuse" value="1" {if isset($smarty.post.diffuse) AND $smarty.post.diffuse == 'on'} checked="checked"{/if} /> <input type="checkbox" name="diffuse" id="diffuse" {if isset($smarty.post.diffuse) AND $smarty.post.diffuse == 'on'} checked="checked"{/if} /> <input type="checkbox" name="diffuse" id="diffuse" value="1" {if isset($smarty.post.diffuse) AND $smarty.post.diffuse eq 'on'} checked="checked"{/if} /> <input type="checkbox" name="diffuse" id="diffuse" {if isset($smarty.post.diffuse) AND $smarty.post.diffuse eq 'on'} checked="checked"{/if} /> Et aucune ne fonctionne. Je ne comprends vraiment pas. Mais, le fait d'avoir mit "== 1" au lieu de " == 'on' " ça devrait rien changer, puisque cette syntaxe fonctionne pour le formulaire sur la page identity.php et puis ça fonctionnait avant que je change: $fields['rayon'] = (int)Tools::getValue('rayon'); $fields['diffuse'] = (int)Tools::getValue('diffuse'); $fields['diffusetel'] = (int)Tools::getValue('diffusetel'); Par: $fields['rayon'] = (int)$this->rayon; $fields['diffuse'] = (int)$this->diffuse; $fields['diffusetel'] = (int)$this->diffusetel; Donc je vois pas du tout d'où ça peut provenir. Par curiosité, j'ai repris le tpl d'origine et incorporé le fieldset pour voir si ce n'était pas un soucis du formulaire qui viendrait avant (un guillemet, une accolade oublié etc...) mais le résultat est le même. Je pense que le soucis provient plus de Customer.php que de authentication.tplEdit:J'ai essayé de remettre pour les checkbox: $fields['diffuse'] = (int)Tools::getValue('diffuse'); $fields['diffusetel'] = (int)Tools::getValue('diffusetel'); Là, il m'enregistre bien ce qu'il faut, cependant, on revient au même soucis du début pour les checkbox, à savoir que lors de l'affichage de "identity.php" les checkbox ne sont pas sur la bonne configuration (celle enregistrée dans la BDD)Merci,Geoffrey. Link to comment Share on other sites More sharing options...
Geoff95 Posted June 23, 2011 Author Share Posted June 23, 2011 Re,Bon et bien, j'ai résolu mon problème en ajoutant les lignes suivantes dans le fichier "authentication.php": if (Tools::isSubmit('diffuse')) { $customer->diffuse = (int)Tools::getValue('diffuse');; } if (Tools::isSubmit('diffusetel')) { $customer->diffusetel = (int)Tools::getValue('diffusetel');; } Juste avant: $customer->birthday = (empty($_POST['years']) ? '' : intval($_POST['years']).'-'.intval($_POST['months']).'-'.intval($_POST['days'])); Merci de votre aide en tout cas.Vous auriez une idée pour ça sinon?http://www.prestashop.com/forums/viewreply/473476/(Ma question avant que je reviennes sur le formulaire)MerciGeoffrey. Link to comment Share on other sites More sharing options...
Geoff95 Posted June 26, 2011 Author Share Posted June 26, 2011 Salut, Personne pour ce soucis:Je voudrais que lorsqu'un client modifie la ville de son adresse (donc dans la page address.php) il m'exécute un script php.Sauf que j'ignore comment effectuer la comparaison.Il me faudrait un truc du genre if ($oldcity != $city){ //$oldcity = ville lors de l'ouverture de la page address.php et $city ville présente dans le champs city lors de la validation) mon code } Ce que je pensais faire c'est lors de l'ouverture, récupérer la valeur dans la colonne "city", de l'enregistrer dans la variable $oldcity mais j'ignore comment récupérer cette valeur?ça peut être?: $oldcity = $address->city; Et ensuite, à quel endroit placer ma condition dans le fichier address.php?Ou alors, peut être y a-t-il directement un moyen de savoir avec smarty si le champs a été modifié?Geoffrey. Link to comment Share on other sites More sharing options...
Geoff95 Posted September 6, 2011 Author Share Posted September 6, 2011 Salut, Je viens de m'apercevoir d'un soucis, c'est que dans le BO quand je veux éditer un utilisateur (donc on se retrouve dans le fichier AdminCustomers.php) il me met une erreur "le champs rayon est requis" donc j'ai décidé de rajouter le champs et les checkbox, pour les checksbox tout c'est bien passer, mais pour le select, je n'arrive pas à afficher la liste Pour rappel, voici le code du tpl: <select id="rayon" name="rayon"> <option value="">-</option> {foreach from=$liste_rayons item=id_rayon} <option value="{$id_rayon}000" {if $smarty.post.rayon == $id_rayon *1000}selected="selected"{/if}>{$id_rayon}</option> {/foreach} </select> Et voici maintenant le code PHP du AdminCustormers.php que j'ai mit: echo '<label>Rayon de vente estimé</label> <div class="margin-form"> <select id="rayon" name="rayon"> <option value="">-</option>'; foreach ($liste_rayons as $id_rayon) echo '<option value="'.$id_rayon.' 000" '.($rayon == $id_rayon ? 'selected="selected"' : '').'>'.$id_rayon.'</option>'; echo '</select> </div>'; Voyez-vous ce qui ne va pas? Merci d'avance pour l'aide. Geoffrey. 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