Melusine Posted March 18, 2014 Share Posted March 18, 2014 Bonjour Je souhaiterais récupérer les produits de 2 catégories différentes (dans 2 blocs séparé) et les afficher dans le module "Editorial" (module que j'ai modifié pour ma page d'accueil). Sauf que je ne vois pas comment récupérer les infos des produits (titre, description, image et bouton commander). Je suis pas très doué avec Prestashop (surtout pour le dev).. Merci d'avance Link to comment Share on other sites More sharing options...
math_php Posted March 20, 2014 Share Posted March 20, 2014 Bonjour, En partant du principe que tu connais les id des deux catégories que tu veux manipuler, renseigne les dans le code : $id_category1 = ; $id_category2 = ; $category1 = new Category((int)$id_category1, (int)Context::getContext()->language->id); $products1 = $category1->getProducts((int)Context::getContext()->language->id, 1, 999); $category2 = new Category((int)$id_category2, (int)Context::getContext()->language->id); $products2= $category2->getProducts((int)Context::getContext()->language->id, 1, 999); Dans $product1 et 2 tu auras les produits. Cordialement 1 Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 Bonjour math_php Merci pour ta réponse. Mais comment je l'insère dans mon template ? Dans editorial.php j'ai cette fonction (d'après ce que je comprend, c'est elle qui envoi les infos vers le tpl) public function getContent(){ $this->_html = ''; $this->postProcess(); $helper = $this->initForm(); $id_shop = (int)$this->context->shop->id; $editorial = EditorialClass::getByIdShop($id_shop); if(!$editorial) $this->createExampleEditorial($id_shop); //if editorial ddo not exist for this shop => create a new example one foreach($this->fields_form[0]['form']['input'] as $input) //fill all form fields if($input['name'] != 'body_homepage_logo') $helper->fields_value[$input['name']] = $editorial->{$input['name']}; $file = dirname(__FILE__).'/homepage_logo_'.(int)$id_shop.'.jpg'; $helper->fields_value['body_homepage_logo']['image'] = (file_exists($file) ? '<img src="'.$this->_path.'homepage_logo_'.(int)$id_shop.'.jpg">' : ''); if($helper->fields_value['body_homepage_logo'] && file_exists($file)) $helper->fields_value['body_homepage_logo']['size'] = filesize($file) / 1000; $this->_html .= $helper->generateForm($this->fields_form); $id_category1 = 3; $category1 = new Category((int)$id_category1, (int)Context::getContext()->language->id); $products1 = $category1->getProducts((int)Context::getContext()->language->id, 1, 999); $smarty->assign('produits', $products1); $smarty->assign('test', 'Toto'); return $this->_html; } Et dans editorial.tpl j'ai fait : {$produits|@print_r} / {$test} Mais ça ne me renvoi rien. Merci d'avance pour ton aide. Bonne journée Link to comment Share on other sites More sharing options...
math_php Posted March 20, 2014 Share Posted March 20, 2014 avant $smarty->assign('produits', $products1); mets var_dump($products1) $smarty->assign('produits', $products1); Comme ça tu verras ce que le php trouve comme produits Active smarty_debug pour voir tout ce qui est transmis à ton template Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 Il n'y a pas mes variables dans le debug... Ou alors je me suis trompée de fonction ? Sinon, c'est possible d'en créée une autre juste pour mes produits ? Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 Pour tester le code j'ai créée une page statique. J'ai juste mis : $category1 = new Category((int)3, (int)Context::getContext()->language->id); $smarty->assign('category', $category1); $products1 = $category1->getProducts((int)Context::getContext()->language->id, 1, 999); $smarty->assign('produits', $products1); et $products1 : {$products1->name|@print_r} $category : {$category|@print_r} La variable $category renvoi bien le tableau correspondant à la catégorie que je souhaite mais $products1 est null. Il doit y avoir un soucis du coup avec $products1 = $category1->getProducts((int)Context::getContext()->language->id, 1, 999); mais je ne comprend pas pourquoi. Dans editorial.php j'ai aussi mis $smarty->assign('category', $category1); mais "$category : {$category|@print_r}" renvoi null sur le tpl... Link to comment Share on other sites More sharing options...
SleT Posted March 20, 2014 Share Posted March 20, 2014 C'est le bon ID catégorie, la bonne langue? Ta catégorie a bien des produits à l’intérieur? Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 Oui pour tout. Link to comment Share on other sites More sharing options...
math_php Posted March 20, 2014 Share Posted March 20, 2014 Melusine, gargl tu es en version 1.4. ? Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 Non 1.5.6.2. (dsl oubli) Link to comment Share on other sites More sharing options...
math_php Posted March 20, 2014 Share Posted March 20, 2014 (edited) Ton code ressemble à du 1.4 Et quand tu fais $smarty->assign('test', 'Toto'); tu récupères ton Toto dans le Tpl ? Rajoute la ligne après getContent global $smarty; En 1.5 c'est $this->smarty->assign('test', 'Toto'); Edited March 20, 2014 by math_php (see edit history) Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 En 1.5 c'est $this->context->smarty->assign('test', 'Toto'); test : {$test} me renvoi tjrs rien.. Link to comment Share on other sites More sharing options...
math_php Posted March 20, 2014 Share Posted March 20, 2014 (edited) getContent c'est pour afficher dans le BO c'est ce que tu veux faire ? Si oui le Bo ne se sert pas de smarty Si tu veux afficher sur la vitrine ça serait plutot un hookLeftColumn. Réinstalle le module si tu modifies les colonnes d'affichage public function hookLeftColumn( $params ){ $this->smarty->assign('test','Toto'); return $this->display(__FILE__, $this->getTplPath('mon.tpl')); } Edited March 20, 2014 by math_php (see edit history) Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 (edited) Si tu veux afficher sur la vitrine ça serait plutot un hookLeftColumn. *Idiote* Effectivement dans hookDisplayHome ça fonctionne nettement mieux... Du coup dans mon .php j'ai fait : global $smarty; $categorie_pizza = new Category((int)3, (int)Context::getContext()->language->id); // 3 = id categ pizza $pizzas = $categorie_pizza->getProducts((int)Context::getContext()->language->id, 1, 999); $smarty->assign('pizzas', $pizzas); $categorie_formule = new Category((int)7, (int)Context::getContext()->language->id); // 7 = id categ formule $formules = $categorie_formule->getProducts((int)Context::getContext()->language->id, 1, 999); $smarty->assign('formules', $formules); Et dans le .tpl {foreach from=$pizzas item=pizza} {$pizza.name}<br/> {/foreach} {foreach from=$formules item=formule} {$formule.name}<br/> {/foreach} Dernière petite question. A partir de mon tableau de produits, comment je peut récupérer l'image (j'ai vu qu'il y a un id_image) et faire un bouton "commander". Merci pour ton aide ! Edited March 20, 2014 by Melusine (see edit history) Link to comment Share on other sites More sharing options...
math_php Posted March 20, 2014 Share Posted March 20, 2014 Mais non t'en fais pas, je suis débutant sur un autre forum et je me fais laminer sur des questions 'évidentes' de programmation objet Par contre donne moi pizza à moi Pour les images produits <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')|escape:'html'}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /> Regarde dans product-list.tpl tu devrais y trouver ce qui sert pour l'affichage des produits d'une catégorie. Bon dev Link to comment Share on other sites More sharing options...
Melusine Posted March 20, 2014 Author Share Posted March 20, 2014 Merci beaucoup pour ton aide. Je regarde ça demain pour les images, faut que je bosse sur un autre projet ^^ Bonne journée Link to comment Share on other sites More sharing options...
Melusine Posted March 21, 2014 Author Share Posted March 21, 2014 Merci beaucoup math_php pour ton aide ! Et voilà le code final : <div id="nos-pizza-home" class="bloc-haut-home w460 mr16 displayib"> <ul class="carousel-home"> {foreach from=$pizzas item=pizza} <li> <img src="{$link->getImageLink($pizza.link_rewrite, $pizza.id_image, 'produit_home')|escape:'html'}" alt="{$pizza.legend|escape:'htmlall':'UTF-8'}" /> <div class="bloc-inte"> <h1>Nos pizzas</h1> <h2>{$pizza.name}</h2> <div class="ingredients">{$pizza.description_short}</div> {if ($pizza.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $pizza.available_for_order && !isset($restricted_country_mode) && $pizza.minimal_quantity <= 1 && $pizza.customizable != 2 && !$PS_CATALOG_MODE} {if ($pizza.allow_oosp || $pizza.quantity > 0)} {if isset($static_token)} <a class="btn-cmd ajax_add_to_cart_button" rel="ajax_id_product_{$pizza.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$pizza.id_product|intval}&token={$static_token}", false)|escape:'html'}" title="{l s='Add to cart'}"><span class="ico displayib"></span>Commander</a> {else} <a class="btn-cmd ajax_add_to_cart_button" rel="ajax_id_product_{$pizza.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$pizza.id_product|intval}", false)|escape:'html'}" title="{l s='Add to cart'}"><span class="ico displayib"></span>Commander</a> {/if} {else} <span class="btn-cmd"><span class="ico displayib"></span>Commander</span> {/if} {/if} </div> </li> {/foreach} </ul> </div> Désolée pour la pizza, ça va être compliqué ;-) Bonne journée 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