Leo-Sur Posted February 5, 2022 Share Posted February 5, 2022 Bonjour ! Je suis sous la version 1.7.8.3, J'aimerais afficher une fiche produit sur la page d'accueil, j'ai créé un module mais je ne récupère pas toutes les infos dans product : $product = new Product($id_product, false, $lang_id) Je n'obtiens qu'une partie des informations, j'ai vu dans productController que c'était pas le même Product qui sortait mais un ProductLazyArray. Comment faire pour obtenir la même chose dans un module ? Merci pour votre aide ! Link to comment Share on other sites More sharing options...
Mediacom87 Posted February 5, 2022 Share Posted February 5, 2022 Et avec true à la place de false ? Link to comment Share on other sites More sharing options...
Leo-Sur Posted February 5, 2022 Author Share Posted February 5, 2022 Merci pour votre aide, non malheureusement je n'ai pas plus d'informations en passant false a true. Je récupère pas mal d'informations qui me permettent de reconstruire une fiche produit mais il me faut quand même remplacer les . par des ->, est-ce normal ? en reprenant le code du product.tpl que je passe de tableau a objet ? Il me manque des informations par exemple le regular_price, l'id_customisation, ... afin de permettre l'affichage des différents types de produits. Link to comment Share on other sites More sharing options...
Mediacom87 Posted February 5, 2022 Share Posted February 5, 2022 Si vous avez un code exemple avec toutes les données, reproduisez le. Link to comment Share on other sites More sharing options...
Leo-Sur Posted February 5, 2022 Author Share Posted February 5, 2022 (edited) public function hookDisplayHome($params) { $lang_id = (int) Configuration::get('PS_LANG_DEFAULT'); // récupération de l'id Produit depuis le BO $id_product = Configuration::get('MYMODULE_CONFIG'); // récupération produit $product = new Product($id_product, true, $lang_id); // prix TTC $price = $product->getPricesDrop($id_product); // $flags = discount::get(); // Hook displayProductExtraContent // $extraContentFinder = new ProductExtraContentFinder(); // image de couverture $image = Product::getCover($id_product); $cover_url = $this->context->link->getImageLink($product->link_rewrite, $image['id_image'], ImageType::getFormatedName('large')); $other_img = $product->getImages($id_product); $product_img = []; foreach ($other_img as $img) { array_push($product_img, $this->context->link->getImageLink($product->link_rewrite, $img['id_image'], ImageType::getFormatedName('large'))); } $features = $product->getFrontFeatures($lang_id); $attachments = Attachment::getAttachments($lang_id, $id_product); if (Validate::isLoadedObject($product)) { $this->context->smarty->assign([ 'my_module_name' => Configuration::get('MYMODULE_NAME'), 'product' => $product, 'cover_url' => $cover_url, 'product_img' => $product_img, 'features' => $features, 'attachments' => $attachments, 'price' => $price, ]); } return $this->display(__FILE__, 'mymodule.tpl'); } partie monmodule.php au dessus, ou j'ai du "trafiqué" pour récupérer certaines données, comme le prix TTC que je récupère dans getPricesDrop, et la partie product-prices.tpl avec en commentaire les parties que je ne peux ajouter car je n'arrive pas a récupérer des variables, ou que je dois recréer au sein du module car elles nécessitent des -> au lieu de . dans le code. {if $product->show_price} <div class="product-prices js-product-prices"> {block name='product_discount'} {if $product->specificPrice} <div class="product-discount"> {hook h='displayProductPriceBlock' product=$product type="old_price"} <span class="regular-price">{$price.0.price_without_reduction}€</span> </div> {/if} {/block} {block name='product_price'} <div class="product-price h5 {if $product->specificPrice}has-discount{/if}"> <div class="current-price"> <span class='current-price-value' content="{$product->price}"> {capture name='custom_price'}{hook h='displayProductPriceBlock' product=$product type='custom_price' hook_origin='product_sheet'}{/capture} {if '' !== $smarty.capture.custom_price} {$smarty.capture.custom_price nofilter} {else} {$price.0.price}€ {/if} </span> {if $product->specificPrice} {if $product->specificPrice.reduction_type === 'percentage'} <span class="discount discount-percentage">{l s='Save %percentage%' d='Shop.Theme.Catalog' sprintf=['%percentage%' => ($product->specificPrice.reduction * 100)]}% </span> {else} <span class="discount discount-amount"> {l s='Save %amount%' d='Shop.Theme.Catalog' sprintf=['%amount%' => $price.0.reduction]}€ </span> {/if} {/if} </div> {* {block name='product_unit_price'} {if $product->unit_price} <p class="product-unit-price sub">{l s='(%unit_price%)' d='Shop.Theme.Catalog' sprintf=['%unit_price%' => $product->unit_price]}</p> {/if} {/block} *} </div> {/block} {* {block name='product_without_taxes'} {if $priceDisplay == 2} <p class="product-without-taxes">{l s='%price% tax excl.' d='Shop.Theme.Catalog' sprintf=['%price%' => $product.price_tax_exc]}</p> {/if} {/block} *} {* {block name='product_pack_price'} {if $displayPackPrice} <p class="product-pack-price"><span>{l s='Instead of %price%' d='Shop.Theme.Catalog' sprintf=['%price%' => $noPackPrice]}</span></p> {/if} {/block} *} {block name='product_ecotax'} {if $product->ecotax > 0} <p class="price-ecotax">{l s='Including %amount% for ecotax' d='Shop.Theme.Catalog' sprintf=['%amount%' => $product->ecotax]} {if $product->specificPrice} {l s='(not impacted by the discount)' d='Shop.Theme.Catalog'} {/if} </p> {/if} {/block} {hook h='displayProductPriceBlock' product=$product type="weight" hook_origin='product_sheet'} <div class="tax-shipping-delivery-label"> {* {if !$configuration.taxes_enabled} {l s='No tax' d='Shop.Theme.Catalog'} {elseif $configuration.display_taxes_label} {$product.labels.tax_long} {/if} *} {hook h='displayProductPriceBlock' product=$product type="price"} {hook h='displayProductPriceBlock' product=$product type="after_price"} {if $product->is_virtual == 0} {* {if $product->additional_delivery_times == 1} {if $product.delivery_information} <span class="delivery-information">{$product.delivery_information}</span> {/if} {elseif $product->additional_delivery_times == 2} *} {if $product->quantity > 0} <span class="delivery-information">{$product->delivery_in_stock}</span> {* Out of stock message should not be displayed if customer can't order the product. *} {elseif $product->quantity <= 0 } <span class="delivery-information">{$product->delivery_out_stock}</span> {/if} {* {/if} *} {/if} </div> </div> {/if} Edited February 6, 2022 by Leo-Sur (see edit history) Link to comment Share on other sites More sharing options...
fbenoist.com Posted February 7, 2022 Share Posted February 7, 2022 Sur PrestaShop 1.7, pour obtenir un ProductLazyArray, il faut utiliser les classes ProductAssembler et ProductPresenter. // Select product id $id_product = 1; $context = Context::getContext(); $assembler = new ProductAssembler($context); $presenterFactory = new ProductPresenterFactory($context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = $presenterFactory->getPresenter(); $productData = $presenter->present( $presentationSettings, $assembler->assembleProduct(['id_product' => (int)$id_product]), $context->language ); // Send ProductLazyArray to Smarty $this->context->smarty->assign('product', $productData); 1 Link to comment Share on other sites More sharing options...
Leo-Sur Posted February 7, 2022 Author Share Posted February 7, 2022 (edited) fbenoist.com, Merci beaucoup !!! J'ai pas mal cherché je suis passé sur ces classes sans y parvenir! Encore Merci beaucoup ! Edited February 7, 2022 by Leo-Sur (see edit history) Link to comment Share on other sites More sharing options...
Leo-Sur Posted February 19, 2022 Author Share Posted February 19, 2022 (edited) Je reviens avec une question qui concerne toujours la même chose. J'arrive bien à afficher mon produit sur la page d'accueil avec toutes les informations que je veux, mais j'aimerais afficher les déclinaisons de mon produit aussi, chose que je ne parviens à faire car il me manque la variable $groups qui apparait dans product.tpl, et qui vient du controller productController.php. voici le tableau que je dois récupérer, si vous avez une idée je suis preneur ! Merci pour votre aide array:1 [▼ 5 => array:6 [▼ "group_name" => "Contenant" "name" => "Diamètre" "group_type" => "select" "default" => 26 "attributes" => array:2 [▼ 26 => array:4 [▼ "name" => "2 pouces" "html_color_code" => "" "texture" => "" "selected" => true ] 27 => array:4 [▼ "name" => "6 pouces" "html_color_code" => "" "texture" => "" "selected" => false ] ] "attributes_quantity" => array:2 [▼ 26 => 10 27 => 10 ] ] ] Edited February 19, 2022 by Leo-Sur (see edit history) Link to comment Share on other sites More sharing options...
Leo-Sur Posted February 19, 2022 Author Share Posted February 19, 2022 C'est bon, j'ai simplement récupéré la fonction qui était placé dans le controller! 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