amro Posted July 15, 2013 Share Posted July 15, 2013 (edited) bonjour les amis, svp aidez moi cette fois c'est tres urgent.j'ai reussi a transformer prestashop en une solution multi-vendeurs donc j ai ajouter un formulaire d'ajout de produit dans la page my-account et ça fonctionne tres bien.mon problème ce que je veux ce formulaire s'affiche sous l'onglet my-account comme adresses et non sous la page principale.je simplifie par des images. voila mon formulaire et moi je veux que ça soit comme svp ne m'ignorez pas Edited July 18, 2013 by amro (see edit history) Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 15, 2013 Share Posted July 15, 2013 En bref, tu ne veux pas avoir la colonne de droite pour cette page précise? Martin Link to comment Share on other sites More sharing options...
Bondaty and Co Posted July 15, 2013 Share Posted July 15, 2013 Avez vous essayé d'intégrer votre formulaire dans my-account.tpl ? Link to comment Share on other sites More sharing options...
amro Posted July 15, 2013 Author Share Posted July 15, 2013 @ En bref, tu ne veux pas avoir la colonne de droite pour cette page précise? Martin oui mais seulement dans la partie my-account pas tout le site Link to comment Share on other sites More sharing options...
Bondaty and Co Posted July 15, 2013 Share Posted July 15, 2013 dans votre my-account.css ajouter:* #my-account #left_column {display:none} et ajustez le css Link to comment Share on other sites More sharing options...
amro Posted July 15, 2013 Author Share Posted July 15, 2013 Avez vous essayé d'intégrer votre formulaire dans my-account.tpl ? oui mais ça a affecté la page my-account quand j integre mon code la page my-account n'affichera que le formulaire alors que j ai crée un lien dans cette page qui mène au formulaire Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 15, 2013 Share Posted July 15, 2013 Rebonjour, À voir ton URL de page, tu as créer un Controller de formulaire pour pouvoir arriver à tes fins...je devine que tu l'as rediriger à partir de SEO & URL...Bref tu n'as pas utiliser de module pour arriver à tes fins? Seulement de l'override (Surcharge) et création simple sous le fichier controller? Tu dois bien Charger un TPL quelque part non? Quel est-il? @muche il a fait une page à part, il a réussi à l'afficher donc je crois pas que ce soit le problème. Martin Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 15, 2013 Share Posted July 15, 2013 @muche en réglant en CSS les infos seront tout de même dans la page, c'est pas l'optimal pour des données qui seront complétements inutiles. La solution devrait être au chargement ou à l'affichage. Link to comment Share on other sites More sharing options...
amro Posted July 15, 2013 Author Share Posted July 15, 2013 voila j ai crée un nouveau controlleur et voila le code class FormulaireControllerCore extends FrontController { public $php_self = 'formulaire.php'; public $ssl = true; public function postProcess() { //On vérifie le bouton submit du formulaire if(Tools::isSubmit('bouton')) { // On va commencer en premier par récupérer l'id customer avec la variable cookie // et vérifier que la personnes est bien loggée global $cookie; if(!isset($cookie->id_customer)) { $message='Aucun client loggé'; } else { $errors=array(); $customer=$cookie->id_customer; //On récupère les valeurs du formulaire $titre=Tools::getValue('titre');$prix=Tools::getValue('prix');$desc=Tools::getValue('desc'); $photo=$_FILES['photo'];$resume=Tools::getValue('resume');$ref=Tools::getValue('ref');$categorie=Tools::getValue('categorie_choisie'); //On va vérifier les champs obligatoires if($titre==''||$resume==''||$photo['name']==''||$ref==''||$categorie=='') { if($titre==''){array_push($errors,'Please be sure to put a product name<br />');} if($resume==''){array_push($errors,'Please be sure to put a product resume<br />');} if($prix==''){array_push($errors,'Please be sure to put a price<br />');} if($photo['name']==''){array_push($errors,'You must put a photo please<br />');} if($ref==''){array_push($errors,'Please be sure to put a ref<br />');} if($categorie==''){array_push($errors,'Please be sure to select a category<br />');} } else { $sql='insert into '._DB_PREFIX_.'product (`id_product`, `id_supplier`, `id_manufacturer`, `id_category_default`, `id_shop_default`, `id_tax_rules_group`, `on_sale`, `online_only`, `ean13`, `upc`, `ecotax`, `quantity`, `minimal_quantity`, `price`, `wholesale_price`, `unity`, `unit_price_ratio`, `additional_shipping_cost`, `reference`, `supplier_reference`, `location`, `width`, `height`, `depth`, `weight`, `out_of_stock`, `quantity_discount`, `customizable`, `uploadable_files`, `text_fields`, `active`, `redirect_type`, `id_product_redirected`, `available_for_order`, `available_date`, `condition`, `show_price`, `indexed`, `visibility`, `cache_is_pack`, `cache_has_attachments`, `is_virtual`, `cache_default_attribute`, `date_add`, `date_upd`, `advanced_stock_management`) VALUES ("","'.$customer.'","","'.$categorie.'",1,"","","","","","","","","'.$prix.'","'.$prix.'","","","","'.$ref.'","","","","","","","","","","","",1,"","",1,"","new",1,1,"both","","","","",NOW(),"","")'; $result=Db::getInstance()->ExecuteS($sql); $ID=Db::getInstance()->Insert_ID(); $sql='insert into '._DB_PREFIX_.'product_lang (`id_product`, `id_shop`, `id_lang`, `description`, `description_short`, `link_rewrite`, `meta_description`, `meta_keywords`, `meta_title`, `name`, `available_now`, `available_later`, `id_customer`) VALUES ("'.$ID.'",1,1,"'.$desc.'","'.$resume.'","","","","","'.$titre.'","En stock","","'.$customer.'")'; $result1=Db::getInstance()->ExecuteS($sql); $sql='insert into '._DB_PREFIX_.'category_product (id_category,id_product,position) VALUES ('.$categorie.', '.$ID.',0)'; $result2=Db::getInstance()->ExecuteS($sql); $sql='insert into '._DB_PREFIX_.'category_product (id_category,id_product,position) VALUES (55, '.$ID.',0)'; $result5=Db::getInstance()->ExecuteS($sql); $sql='insert into '._DB_PREFIX_.'product_shop (`id_product`, `id_shop`, `id_category_default`, `id_tax_rules_group`, `on_sale`, `online_only`, `ecotax`, `minimal_quantity`, `price`, `wholesale_price`, `unity`, `unit_price_ratio`, `additional_shipping_cost`, `customizable`, `uploadable_files`, `text_fields`, `active`, `redirect_type`, `id_product_redirected`, `available_for_order`, `available_date`, `condition`, `show_price`, `indexed`, `visibility`, `cache_default_attribute`, `advanced_stock_management`, `date_add`, `date_upd`) VALUES ("'.$ID.'",1,"'.$categorie.'","",1,"","",1,"'.$prix.'","'.$prix.'","","","","","","",1,"","",1,"","new",1,1,"both","","",NOW(),"")'; $result3=Db::getInstance()->ExecuteS($sql); $sql='insert into '._DB_PREFIX_.'product_supplier (`id_product_supplier`, `id_product`, `id_product_attribute`, `id_supplier`, `product_supplier_reference`, `product_supplier_price_te`, `id_currency`) VALUES ("","'.$ID.'","","'.$customer.'","","","")'; $result6=Db::getInstance()->ExecuteS($sql); //On utilise la méthode upload_image pour uploader l'image sur le serveur Formulaire::upload_image($photo,$titre,$customer); $message='Votre demande a bien été envoyée'; } } //On envoie le message si il existe: if(isset($message))self::$smarty->assign('message',$message); if(isset($errors))self::$smarty->assign('erreurs',$errors); header("Location: index.php?controller=my-account"); exit(); } } public function process() { parent::process(); $this->postProcess(); //Ici on devrait mettre toutes les action à faire, traitements et variables smarty à envoyer au formulaire à son chargement. //Dans notre cas, on a rien à envoyer, on doit simplement afficher le formulaire //Le traitement du formulaire d'effectue dans la fonction au-dessus (preProcess) } public function displayContent() { global $cookie; parent::displayContent(); $mes_categories=Category::getHomeCategories($cookie->id_lang); self::$smarty->assign('mes_categories',$mes_categories); self::$smarty->display(_PS_THEME_DIR_.'formulaire.tpl'); } } je dois intégrer ce code dans le controlleur myaccount mais ou exactement? Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 15, 2013 Share Posted July 15, 2013 D'Accord, mais la page formulaire.rpl, qu'avez-vous fait? Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 15, 2013 Share Posted July 15, 2013 (edited) D'une manière ou d'une autre, après une bonne étude des façon possible : Je crois que finalement Muche a raison sur ce point. Prestashop fonctionne parfois en hiding par CSS.Votre thème semble fonctionner lui aussi comme ça Donc j'irais avec sa façon, ciblée la division ou l'élément et le mettre ne display none. dans votre my-account.css ajouter:* #my-account #left_column {display:none} et ajustez le css Changer la façon de fonctionner avec le header et le footer serait trop long, de plus il vous faudrait surchargé le FrontController.php, ce qui n'Est pas amusant et le travial serait plus long. Edited July 15, 2013 by Martin Uker K (see edit history) 1 Link to comment Share on other sites More sharing options...
Bondaty and Co Posted July 15, 2013 Share Posted July 15, 2013 Avez essayé d'intégrer le contenu de votre controller dans MyAccountController et le formulaire dans My-account.tpl Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 Avez essayé d'intégrer le contenu de votre controller dans MyAccountController et le formulaire dans My-account.tpl je voulais savoir dans quel partie de MyAccountController??? je mets mon code dans une nouvelle fonction??? Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 voila le code formulaire.tpl {capture name=path}Ajouter un produit{/capture} {include file="$tpl_dir./breadcrumb.tpl"} <script src="/prestashop/themes/default/js/jquery.js"></script> <link href="/prestashop/themes/default/css/contactform.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="/prestashop/themes/default/js/jquery.validate.js"></script> <script type="text/javascript" src="/prestashop/themes/default/js/additional-methods.js"></script> <script type="text/javascript" src="/prestashop/themes/default/js/jquery2.js"></script> <script type="text/javascript" src="/prestashop/themes/default/tiny_mce/tiny_mce.js"></script> <script type="text/javascript"> tinyMCE.init({ mode : "exact", elements : "desc", theme : "advanced", plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave,visualblocks", theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,formatselect,fontselect,fontsizeselect", theme_advanced_buttons2 : "cut,copy,paste,pasteword,|,bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,image,code,|,preview,|,forecolor,backcolor", theme_advanced_buttons3 : "tablecontrols,|,hr,|,sub,sup,|,emotions,advhr,|,ltr,rtl,", theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,visualblocks", }); </script> {if $erreurs} {foreach from=$erreurs item=erreur key=k} <span style="color:#903">{$erreur}</span> {/foreach} {/if} {if $message}<p class="confirmation">{$message}</p>{/if} <br /> <div class="form-div"> <form action="{$request_uri}" method="post" enctype="multipart/form-data" class="std" id="myForm" name="myForm"> <div class="cfg-contactform" id="cfg-contactform-21"> <div class="cfg-contactform-content"> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-1-label" for="titre" ><span class="cfg-label-value">Nom du produit:</span><span class="cfg-required">*</span></label> <div class="cfg-element-set" id="cfg-element-21-1-set" > <div class="cfg-element-content"> <input type="text" name="titre" value="{$smarty.post.titre}" class="cfg-type-text cfg-form-value" style="width:230px;" id="cfg-element-21-1" /> </div> </div> <div class="cfg-clear"></div> </div> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-2-label" for="ref" ><span class="cfg-label-value">Réference:</span><span class="cfg-required">*</span></label> <div class="cfg-element-set" id="cfg-element-21-2-set" > <div class="cfg-element-content"> <input type="text" name="ref" value="{$smarty.post.ref}" class="cfg-type-text cfg-form-value" style="width:230px;" id="cfg-element-21-2" /> </div> </div> <div class="cfg-clear"></div> </div> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-3-label" for="categorie_choisie" ><span class="cfg-label-value">Catégorie:</span><span class="cfg-required">*</span></label> <div class="cfg-element-set" id="cfg-element-21-3-set" > <div class="cfg-element-content"> <select name="categorie_choisie" class="cfg-type-select cfg-form-value " id="cfg-element-21-3" > {foreach from=$mes_categories item=category} <option value="{$category.id_category}">{$category.name}</option> {/foreach} </select> </div> </div> <div class="cfg-clear"></div> </div> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-4-label" for="contenu" ><span class="cfg-label-value">Résumé: </span><span class="cfg-required">*</span></label> <div class="cfg-element-set" id="cfg-element-21-4-set" > <div class="cfg-element-content"> <textarea name="resume" id="cfg-element-21-4" style="width:230px; height:200px;" class="cfg-type-textarea cfg-form-value ">{$smarty.post.resume}</textarea> </div> </div> <div class="cfg-clear"></div> </div> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-5-label" for="desc" ><span class="cfg-label-value">Description de votre produit:</span></label><br/><br/> <div class="cfg-element-set" id="cfg-element-21-5-set" > <div class="cfg-element-content"> <textarea name="desc" id="cfg-element-21-5" style="width:500px; height:200px;" class="cfg-type-textarea cfg-form-value " >{$smarty.post.desc}</textarea></div> </div> <div class="cfg-clear"></div> </div> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-6-label" for="prix" ><span class="cfg-label-value">Prix:</span><span class="cfg-required">*</span></label> <div class="cfg-element-set" id="cfg-element-21-6-set" > <div class="cfg-element-content"> <input type="text" name="prix" value="{$smarty.post.prix}" class="cfg-type-text cfg-form-value" style="width:230px;" id="cfg-element-21-6" /> </div> </div> <div class="cfg-clear"></div> </div> <div class="cfg-element-container"> <label class="cfg-label" id="cfg-element-21-7-label" for="photo" ><span class="cfg-label-value">ajouter une photo du produit:</span><span class="cfg-required">*</span></label> <div class="cfg-element-set" id="cfg-element-21-7-set" > <div class="cfg-element-content"> <input type="file" name="photo" id="cfg-element-21-7" style="width:220px; height:auto" class="cfg-type-text cfg-form-value" accept="image/*"/> </div></div> <div class="cfg-clear"></div> </div> <p class="cart_navigation required submit"> <input type="submit" name="bouton" value="ajouter" class="exclusive" style="width:120px; font-size:12px" /></p> </div><!-- cfg-contactform-content --> </div><!-- cfg-contactform --> </form> </div> Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 D'une manière ou d'une autre, après une bonne étude des façon possible : Je crois que finalement Muche a raison sur ce point. Prestashop fonctionne parfois en hiding par CSS.Votre thème semble fonctionner lui aussi comme ça Donc j'irais avec sa façon, ciblée la division ou l'élément et le mettre ne display none. Changer la façon de fonctionner avec le header et le footer serait trop long, de plus il vous faudrait surchargé le FrontController.php, ce qui n'Est pas amusant et le travial serait plus long. je voulais suivre la meme technique prestashop comme toutes les pages de my-account (exp;adresse) Link to comment Share on other sites More sharing options...
Bondaty and Co Posted July 16, 2013 Share Posted July 16, 2013 Vous avez 3 solutions: Intégrer votre code dans le MyAccountController Faire un override du MyAccountController dans override/controllers/front/ Cela m'ennuie un peu de vous aiguiller la dessus alors que la 3e solution me parait la plus simple et efficace: Le plus simple et le plus propre et de créer un module ( le plus gros du travail est fait ) et de le greffer au HOOK_CUSTOMER_ACCOUNT ou d'en créer un autre Personnellement je suis pour le module pour plusieurs raisons: Il est indépendant, donc activable ou pas à la demande Il ne modifie pas la coeur Vous pouvez le hooker où vous voulez en modifiant juste 2 lignes dans votre code Pas de problème en cas de mise à jour de la solution (juste voir la compatibilité) Tous vos fichiers sont prêts, il vous manque juste quelques lignes à ajouter et modifier dans le php, ajouter un fichier config. Vous trouverez plein de tutos sur la création d'un module. A priori vous vous débrouillez bien donc en 2 - 3 heures votre module devrait être fonctionnel 1 Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 16, 2013 Share Posted July 16, 2013 Rebonjour, Je ne peux qu'approuvé le bon sens dans les paroles de Muche. La meilleure solution est réellement de faire un Module sous 1.5. La conception des modules est bien plus simple qu'avant et la gestion aussi, essayez et vous verrez. Martin Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 si je l'attache dans my-account il va afficher le formulaire dans la page my account non? et moi j ai fait juste un lien ajouter un produit dans my account qui amène au formulaire Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 Vous avez 3 solutions: Intégrer votre code dans le MyAccountController Faire un override du MyAccountController dans override/controllers/front/ Cela m'ennuie un peu de vous aiguiller la dessus alors que la 3e solution me parait la plus simple et efficace: Le plus simple et le plus propre et de créer un module ( le plus gros du travail est fait ) et de le greffer au HOOK_CUSTOMER_ACCOUNT ou d'en créer un autre Personnellement je suis pour le module pour plusieurs raisons: Il est indépendant, donc activable ou pas à la demande Il ne modifie pas la coeur Vous pouvez le hooker où vous voulez en modifiant juste 2 lignes dans votre code Pas de problème en cas de mise à jour de la solution (juste voir la compatibilité) Tous vos fichiers sont prêts, il vous manque juste quelques lignes à ajouter et modifier dans le php, ajouter un fichier config. Vous trouverez plein de tutos sur la création d'un module. A priori vous vous débrouillez bien donc en 2 - 3 heures votre module devrait être fonctionnel je pense que la première solution est la meilleure dans mon cas et suivant les exigences que j'ai donc stp muche tu peux me donner un exemple ou je met mon code exactement dans le controlleur ai essayé d'integrer mon code ma ça a affecté l affichage dans my-account.tpl au lieu d afficher les liens de gestion du compte la page affiche directement le formulaire d'ajout Link to comment Share on other sites More sharing options...
Martin Uker K Posted July 16, 2013 Share Posted July 16, 2013 Ne prends pas la 1ère solution, tu vas jouer dans le coeur de Prestashop et tes changements seront oubliés (écrasés) si tu tentes de faire une mise à jour. J'ai fait l'erreur une fois, on se dit "je vais m'en souvenir", c'est plus du troubles que j'ai eu la mise à jour que je me souviens que de mes modifications. De plus cela peut créer un effet papillon et affecter d'autres modules si ton codes est mal conçu. La deuxième est une bonne méthode, quoiqu'on ne sais jamais quand les fonctions disparaisse ou quand les algorithmes changent. Ton code peut nécessiter révision après une mise à jour. De plus ta surcharge pourrait entrer en conflit avec la surcharge d'un autre module ou d'une autre de TES surcharges. [Couplage plus fort] Le module est plus stable, il se peut que tu ailles à faire une modification ou deux plus tard, mais c'est plus rare. Ton codes est plus isolé de Prestashop et répond à sa responsabilité de la manière que tu le définis sans avoir à se soucier des autres modules / mise à jour. [Modularité] Fais confiance à Muche quand il te dit que c'est pas trop long, il a raison, en moins de 4 heures ton modules sera fonctionnel. Martin Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 d'accord je vais essayer de créer un module j'ai déjà créer 3 pour ce projet j aurais surement besoin de vous a propos l attachement des hooks.merci pour tout Link to comment Share on other sites More sharing options...
amro Posted July 16, 2013 Author Share Posted July 16, 2013 j'ai beacoup des pages à integrer :'( je vais faire pour chaque une un module!!!svp juste donnez moi l emplacement ou je met mon code dans myaccountcontroller.php il s'agit deja de la modification du coeur Link to comment Share on other sites More sharing options...
amro Posted July 17, 2013 Author Share Posted July 17, 2013 si vous avez remarqué il y a des liens dans la page adresse qui confirme que la page s'affiche sous le rep index-myaccount-adress c'est ce qu'il manque pour que ça soit index-my-account-formulaire Link to comment Share on other sites More sharing options...
amro Posted July 18, 2013 Author Share Posted July 18, 2013 merciiiiiiiiiiii ça marche avec les modules 1 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