redhouane Posted February 21, 2013 Share Posted February 21, 2013 (edited) Bonsoir, Je débute avec prestashop et donc avec smarty et ses variables bzaroides que j'arrive à peine à comprendre. Mon problème est simple à expliquer à priori, je veux exploiter la condition d'un produit d'occasion {if $product->condition == 'used'} pour afficher un header customisé que j'ai réalisé spécialement pour les produits d'occasion. J'ai essayé de faire cette condition comme dans cet exemple au niveau du header.tpl : {if $product->condition == 'used'} <div id="header2"> <div class="container_9 clearfix"> <div style="float:left;"> <a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}"> <img class="logo" src="{$img_dir}logo2.png" alt="{$shop_name|escape:'htmlall':'UTF-8'}"/> </a> </div> {else} <div id="header"> <div class="container_9 clearfix"> <div style="float:left;"> <a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}"> <img class="logo" src="{$img_dir}logo.png" alt="{$shop_name|escape:'htmlall':'UTF-8'}"/> </a> </div> {/if} Le site ne veut même pas démarrer après avoir écrit ce code, ça sent la grosse bêtise de débutant à mon avis.... ^ ^" ps: cette condition marche au niveau de product.tpl pour afficher tout ce que je veux sur ce même tpl Merci d'avoir lu Edited March 2, 2013 by redhouane (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted February 21, 2013 Share Posted February 21, 2013 Ca fonctionne dans product.tpl car à ce niveau $product est défini en smarty, mais il ne l'est pas encore dans header.tpl, d'où le "plantage". Il faut donc le définir dans FrontController.php (environ ligne 310) pour pouvoir l'utiliser dans header.tpl 1 Link to comment Share on other sites More sharing options...
redhouane Posted February 22, 2013 Author Share Posted February 22, 2013 Merci Coeos.pro ^^ je vais essayer ça et je vous rends la réponse ! Link to comment Share on other sites More sharing options...
redhouane Posted February 22, 2013 Author Share Posted February 22, 2013 dsl pour le double post rapide, mais je ne trouve pas le fichier FrontController.php ou du moins le bon ! le chemin : /override/classes/controller/FrontController.php et ça contient ça seulement : <?php class FrontController extends FrontControllerCore { } Merci Link to comment Share on other sites More sharing options...
coeos.pro Posted February 22, 2013 Share Posted February 22, 2013 oh mon dieu il est vide (non je plaisante c'est normal et c'est tant mieux c'est l'override) le fichier est à l'adresse /classes/controller/FrontController.php, copie la fonction init dans le fichier override correspondant (celui qui est vide) pour avoir: <?php class FrontController extends FrontControllerCore { public function init() { /* * Globals are DEPRECATED as of version 1.5. * Use the Context to access objects instead. * Example: $this->context->cart */ global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency; [b]// suite du contenu de la fonction init ...[/b] } } fait les changements dont tu as besoin et normalement ça devrait être bon. Tu sais un peu programmer en php et smarty ? Link to comment Share on other sites More sharing options...
redhouane Posted February 22, 2013 Author Share Posted February 22, 2013 Je ne comprends pas vraiment ce que vous voulez dire par copie la fonction init dans le fichier override correspondant (celui qui est vide) pour avoir: <?php class FrontController extends FrontControllerCore { public function init() { /* * Globals are DEPRECATED as of version 1.5. * Use the Context to access objects instead. * Example: $this->context->cart */ global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency; [b]// suite du contenu de la fonction init ...[/b] } } J'ai copié la fontion init dans le frontcontroller.php vide du dossier overide mais le site a planté, d'ailleurs je ne comprends même pas à quoi sert cette fonction ^^" Et pour répondre à la question concernant la programmation je dirai oui pour php mais pas en POO, du coup toute aide serai la bienvenue merciii Link to comment Share on other sites More sharing options...
coeos.pro Posted February 22, 2013 Share Posted February 22, 2013 il faut copier toute la fonction init, il y a environ 300 lignes, j'en ai mis que qq une pour l'exemple L'override sert à modifier le coeur de prestashop tout en ne perdant pas ces modifications lors de mises à jour de la boutique Link to comment Share on other sites More sharing options...
redhouane Posted February 22, 2013 Author Share Posted February 22, 2013 Oui mais est ce que ça résout le problème de mon header et de la variable $product ? ou faut'il rajouter du code ? Link to comment Share on other sites More sharing options...
coeos.pro Posted February 22, 2013 Share Posted February 22, 2013 ensuite il faut envoyer modifier cette fonction init pour pour avoir la valeur "condition" et l'envoyer à ton template smarty Link to comment Share on other sites More sharing options...
redhouane Posted February 22, 2013 Author Share Posted February 22, 2013 Merci pour ces réponses, je vais essayer de coder ça. Link to comment Share on other sites More sharing options...
redhouane Posted February 28, 2013 Author Share Posted February 28, 2013 Bonjour, j'ai trouvé la solution il y a quelques jours et j'ai oublié de la communiquer pour clore le sujet, donc voilà il faut rajouter la valeur de la condition du produit de la base de donnée, au niveau de Override/classes/Product.php public static function getCondition($id_product) { $sql = 'SELECT `condition` FROM `'._DB_PREFIX_.'product` WHERE `id_product` ='.$id_product; return Db::getInstance()->getValue($sql); } et la récupérer au niveau des controllers : Classes/Controller/FrontController.php $condition=''; [font=arial, sans-serif][size=3] if ($id_product = (int)Tools::getValue('id_product')) { $condition = Product::getCondition($id_product); } [font=arial, sans-serif][size=3] $this->context->smarty->assign(array( // Usefull for layout.tpl 'condition' => $condition, Link to comment Share on other sites More sharing options...
coeos.pro Posted February 28, 2013 Share Posted February 28, 2013 Tu peux éditer ton premier message en sélectionnant "éditeur complet" et mettre [RESOLU] dans le titre, ainsi ceux qui cherchent une solution à un problème identique regarderont ta solution avec attention 1 Link to comment Share on other sites More sharing options...
dashyfer Posted February 24, 2015 Share Posted February 24, 2015 Bonjour a vous Merci pour ce topic, je suis sur un probleme similaire a celui de redhouane Je veux creer un block module comme homefeatured mais au lieu d'afficher les produits phares par catégories, j'aimerais afficher les produits par leur état J'ai une idée du code à écrire mais je ne sais pas ou le mettre. En lisant ce topic, j'ai procédé de la manière suivante: J'ai crée deux fichier Product.php et FrontController.php que j'ai placé respectivement dans les dossiers /override/classes/Product.php /override/classes/controller/FrontController.php Tout en respectant les syntaxes de class avec les extends A ce niveau j'ai essayé mon module homeState qui est basé sur le même code que homeFeatured a l'exception de la récupération de la valeur dans la fonction install(), ou j'écris a la ligne 53 Configuration::updateValue ('HOME_FEATURED_CAT', Db::getInstance()->getValue($sql)); Mais ca ne fonctionne pas non plus, j'ai eu un bogg du système, et j'ai réinstaller ma boutique par la suite. Quelqu'un aurai une idée de ce qu'il faut faire? Pourquoi ce que j'ai fait n'a pas fonctionné? Merci. 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