Jump to content
batounet

[Résolu]Création d'objet pour product.tpl

Recommended Posts

Bonjour à tous, et une très bonne année !!

Je suis entrain de créer mon propre module et je vais devoir afficher des produits sélectionnés via ID.

J'ai beau chercher un peu partout, je n'arrive pas à trouver la méthode qui me permettrais de récupérer les informations des produits que demande product.tpl à partir de l'ID.

Avez-vous des pistes à me suggérer ?

 

Merci d'avance :)

 

Edited by batounet (see edit history)

Share this post


Link to post
Share on other sites

Ce n'est pas n'est pas très claire.
 

$product = new Product($id_product,true,$id_lang);


Mais vu que j'ai pas compris le message je sais pas trop si c'est ça que tu souhaites.

Share this post


Link to post
Share on other sites

Salut okom3pom,

Merci pour ta réponse, c'était bien ça que je recherchais !

Je vais essayer d'être plus clair :

  • J'ai un module qui possède une requete SQL dans laquelle je récupère les id de certains produits.
  • Dans ce module je fais quelques filtres en plus sur ces id
  • Ensuite dans mon tpl, j'"includecatalog/_partials/miniatures/product.tpl afin d'y afficher mes produits.

new Product me permet bien d'avoir certaines informations du produits, mais visiblement il en manque.

J'ai des 'Undefined index' pour plusieurs attributs :
id_product_attribute, url, cover, has_discount, regular_price, discount_type, flags.

Je suppose donc que je dois utiliser une autre fonction ou une fonction supplémentaire pour récupérer ces attributs ?!

Share this post


Link to post
Share on other sites

En 1.7 on retourne un tableau et on utilise des presenters pas un objet

Une portion de code d'un modules sur les beta de la 1.7

    public function getTemplateVarProduct()
    {
		
        $product = $this->objectPresenter->present($this->product);
		
        $product['id_product'] = (int)$this->product->id;
		$product['out_of_stock'] = (int)$this->product->out_of_stock;
        $product['new'] = (int)$this->product->new;
		
        $product_full = Product::getProductProperties($this->context->language->id, $product, $this->context);		
		$assembler = new ProductAssembler($this->context);
		$presenterFactory = new ProductPresenterFactory($this->context);
		$presentationSettings = $presenterFactory->getPresentationSettings();
		
		$presenter = new ProductPresenter(
			new ImageRetriever($this->context->link),
			$this->context->link,
			new PriceFormatter(),
			new ProductColorsRetriever(),
			$this->context->getTranslator()
		);

		return $presenter->present(
			$presentationSettings,
			$assembler->assembleProduct($product_full),
			$this->context->language
		);
        
    }

 

Share this post


Link to post
Share on other sites

Génial !!

Merci, avec ta piste j'ai réussit à réutiliser le presenter de ps_featuredProduct pour l'adapter à mon code !

 

Encore milles merci :)

Share this post


Link to post
Share on other sites

Bonjour,

Je souhaite afficher des produits dans un hook et donc utiliser le même principe que pour ps_featuredproducts mais je sais pas trop comment m'y prendre.

J'ai donc utilisé la fonction getProducts mais je suis un peu dans le flou. Je l'utilise comment ?

Merci pour votre aide.

Edited by regatonseb (see edit history)

Share this post


Link to post
Share on other sites

C'est bon j'ai réussi à m'en servir de cette fonction avec un peu de concentration...

En revanche l'affichage fait que les produits s'affichent les uns en dessous des autres et ne respectent pas tout à fait ce qui est prévu pour les autres cas... Donc je vais voir pour faire un peu d'intégration, sinon ça fonctionne bien.

Pour donner plus de détails, je donne les IDs des fiches produit à afficher en paramètre de cette fonction et pour l'affichage j'assigne à smarty le contenu de la variable résultant de la fonction dans le hook que je veux.

ça donne un truc du genre :

$products = $this->getProducts($listeidproduct);
$this->context->smarty->assign("products",$products);

Dans le tpl du coup :

{foreach from=$products item="product"}
      {include file="catalog/_partials/miniatures/product.tpl" product=$product}
{/foreach}



Et bien sûr dès le début de votre code bien rajouter :

use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter;
use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever;
use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter;
use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever;

 

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More