Jump to content

Récupérer produits d'une catégorie


Recommended Posts

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

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

  • Like 1
Link to comment
Share on other sites

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

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

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

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 :lol:

 

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 by math_php (see edit history)
Link to comment
Share on other sites

Si tu veux afficher sur la vitrine ça serait plutot un hookLeftColumn.

 

*Idiote* :huh:

 

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 by Melusine (see edit history)
Link to comment
Share on other sites

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

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

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