Jump to content

[RESOLU] Ajouter une page sous my-account


Recommended Posts

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 130715051145614905.png

et moi je veux que ça soit comme

130715051422303453.png

 

svp ne m'ignorez pas

Edited by amro (see edit history)
Link to comment
Share on other sites

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

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

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

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 by Martin Uker K (see edit history)
  • Like 1
Link to comment
Share on other sites

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

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

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

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

  • Like 1
Link to comment
Share on other sites

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

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

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

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

130717021315494359.png

Link to comment
Share on other sites

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...