HeineFR Posted December 7, 2020 Share Posted December 7, 2020 Bonjour tout le monde, J'ai actuellement sur un prestashop 1.7.5.1 un module de glossaire qui marche parfaitement en créant des infobulles des définitions sur les termes de mes fiches produits avec un lien vers la page du terme du glossaire. Je souhaite modifier ce module pour que les pages des terme du glossaires ne soient pas aussi vides en listant en dessous les produits de mon catalogue qui contiennent le mot clé du glossaire. Ma question est donc : Pour pouvoir utiliser mon template de listing de produit avec la boucle {foreach from=$listing.products item="product"} comme pour une catégorie, comment initialiser une recherche et charger ma variable $listing.products ? Je suis preneur de toute piste me permettant d'avancer. Merci. Link to comment Share on other sites More sharing options...
HeineFR Posted December 8, 2020 Author Share Posted December 8, 2020 Résolu par moi même, je poste quand même ce que j'ai fait si cela peut aider quelqu'un ultérieurement. En me basant sur le module des produits également achetés j'ai : Rajouté l'appel de la fonction que j'ai crée dans la fonction Init du module : $products = $this->getProductsWithItem($item->name); $this->context->smarty->assign(array('products' => $products)); Rajouté la fonction qui effectue la recherche dans la description du produit pour récupérer les ID des produits et construire les variables du produit protected function getProductsWithItem($itemword) { $item_products = 'SELECT pl.id_product FROM ' . _DB_PREFIX_ . 'product_lang pl LEFT JOIN ' . _DB_PREFIX_ . 'product p ON (pl.id_product = p.id_product) WHERE p.active = 1 AND pl.description LIKE \'%'.$itemword.' %\' LIMIT 0, 15'; $products_found = Db::getInstance((bool) _PS_USE_SQL_SLAVE_)->executeS($item_products); if (0 < count($products_found)) { $showPrice = true; $assembler = new ProductAssembler($this->context); $presenterFactory = new ProductPresenterFactory($this->context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $this->context->link ), $this->context->link, new PriceFormatter(), new ProductColorsRetriever(), $this->context->getTranslator() ); $productsForTemplate = []; $presentationSettings->showPrices = $showPrice; if (is_array($products_found)) { foreach ($products_found as $productId) { $productsForTemplate[] = $presenter->present( $presentationSettings, $assembler->assembleProduct(['id_product' => $productId['id_product']]), $this->context->language ); } } return $productsForTemplate; } return false; } Rajouté dans mon template : {if isset($products) } <div id="products"> <div class="products row"> {foreach from=$products item="product"} {include file="catalog/_partials/miniatures/product.tpl" product=$product} {/foreach} </div> </div> {/if} 1 Link to comment Share on other sites More sharing options...
Mediacom87 Posted December 8, 2020 Share Posted December 8, 2020 (edited) Salut, j'ai pas testé mais si c'est en 1.7, un truc du style ne te retourne pas les produits ? use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery; public function getProductSearchQuery($searchString) { $query = new ProductSearchQuery(); $query ->setSortOrder(new SortOrder('product', 'position', 'desc')) ->setSearchString($searchString) return $query; } Edited December 8, 2020 by Mediacom87 (see edit history) 1 Link to comment Share on other sites More sharing options...
HeineFR Posted December 8, 2020 Author Share Posted December 8, 2020 Possible! Cela doit donc utiliser la fonction de recherche de PS ce qui doit être bien plus performant en qualité de résultat que ma bête requête , je testerait donc ça ! Merci. Link to comment Share on other sites More sharing options...
Mediacom87 Posted December 8, 2020 Share Posted December 8, 2020 Je regarde toujours le code de PrestaShop avant de réinventer la roue et surtout pour rester le plus possible compatible avec la solution. Link to comment Share on other sites More sharing options...
HeineFR Posted December 8, 2020 Author Share Posted December 8, 2020 C'est justement ce que j'essaye de faire et je suis parti du module de ventes croisées ou j'ai vu quelque chose que je pouvais adapter ! 🤣 Link to comment Share on other sites More sharing options...
HeineFR Posted December 8, 2020 Author Share Posted December 8, 2020 J'ai testé vite fait avant de quitter le bureau : Il a fallut que je fasse appel à setSortOrder et que je rajoute un petit ; de fin de ligne mais je n'ai aucun résultat de retourné 😕 il faut que je farfouille la classe ProductSearchQuery 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