Dragsun Posted January 5, 2021 Share Posted January 5, 2021 Bonjour, J'essaies d'afficher tout les produits correspondants a une catégorie, a la place des produits complémentaires. Exemple, je suis sur la page des cahier et je souhaites afficher toute la catégorie stylo mais seulement les bleus. (Les produits ont déjà leurs catégorie) et j'utilises actuellement ce code : {foreach from=$subcategories item="subcategory"} {block name='category_miniature'} {include file='catalog/_partials/miniatures/subcategory.tpl' subcategory=$subcategory} {/block} {/foreach} mais a ce que j'ai compris, je n'ai pas la variable $subcategories d'initialisée. Ma question est donc la suivante sachant que je travailles sur ce dossier : templates\catalog\product.tpl Où dois-je rajouter, et surtout quel code, pour que je reçoives le $subcategories de mon product.tpl, mes stylos bleus ? merci a vous et bonne journée et bonne année ! Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 5, 2021 Share Posted January 5, 2021 Bonjour et bonne année, pour commencer quelle est votre version de Prestashop ? en effet sur 1.7 en fonction des sous version ca change pas mal, cdt Link to comment Share on other sites More sharing options...
Dragsun Posted January 6, 2021 Author Share Posted January 6, 2021 Je suis actuellement sur la version 1.7 de prestashop Link to comment Share on other sites More sharing options...
NanaCoutureDesign Posted January 7, 2021 Share Posted January 7, 2021 Bonjour, Je suis sur le même problème ! je vends des produits de couture sur-mesure et souhaite afficher des produits selon caractéristiques (pour les chutes de tissu uniquement) Avoir une bannière de produits, surement en promotion et sélectionner les produits souhaités Je suis sur la version 1.7.7.0 Je vous remercie, Link to comment Share on other sites More sharing options...
Dragsun Posted January 7, 2021 Author Share Posted January 7, 2021 De ce que j'ai chercher apparemment faut faire quelque chose a partir des controllers mais je ne sait pas quelle partie du code rajouter au controller qui gère la page de produit. Par la détection est elle même écrite dans le sens ou ça seras toujours les stylos de couleur bleue qui seras affichée avec les cahier. Je sait pas si ça peut aider mais je continues mes recherches de mon coté. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 7, 2021 Share Posted January 7, 2021 (edited) Bonjour, je n'arrive pas a comprendre la demande, pourquoi ne pas utiliser le filtre a facette avec comme filtre caracteristique ou declinaison de couleur ? cdt Edited January 7, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
Dragsun Posted January 7, 2021 Author Share Posted January 7, 2021 je ne connais pas le filtre a facette, et en plus de cela mon objectif est d'afficher 2 ou plus de catgorie de produits quand l'on vas sur un produit en particulier donc je ne ssait pas du tout quoi utiliser Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 7, 2021 Share Posted January 7, 2021 puis je avoir un screenshot avec annotation pour comprendre ? cdt Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 actuellement j'ai ça et j'aimerais que les cahier affichés est la catégorie stylo bleu affichée dynamiquement Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 (edited) Ok du coup on se trouve sur une page produit, est ce que c le module produit dans la meme categorie ou accessoire qui est utilisé ? si c'est accessoire, ben on choisi les produit stylo bleu un par un, on peux aller en bdd pour que ca aille plus vite. Si c le module produits dans la meme categorie on peux effectivement faire des modifs dans le code. Edited January 8, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 (edited) je ne connais pas quelle module attaquer en fait et je ne sait pas non plus quoi importer de la bdd pour avoir mes produits en plus que cela j'aimerais vraiment que ça soit dynamique. mais je confirmes que ça ne concernes pas les accessoires j'aimerais Remplacer cette catégorie en fait par ces fameux stylos bleus en dynamique. Edited January 8, 2021 by Dragsun (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 y a ce module la en free: https://mypresta.eu/modules/front-office-features/related-products-free.html Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 j'y jetterai un coup d'oeuil merci Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 Malheureusement, le module partagé ne remplies pas la fonctionnalité souhaitée. J'aimerais en gros que tout mes produits de la catégorie stylo qui ont la caractéristique bleu, peut être afficher a la place des accessoires, et la seule chose qu'il me manques pour ce faire c'est récupérer $subcategorie il me sembles, mais dans le produit... C'est la seule partie qui semble me bloquer... Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 ok, dans le screen pour moi c'est la partie accessoire produits , mais bon ce que tu peux faire avant le foreach c'est {$subcategories|@var_dump} de la tu va pouvoir savoir s il recupere les caracteristiques et iddentifier les variables, ensuite il suffit de faire une condition dans le foreach, cdt Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 le soucis c'est que $subcategories n'existes pas dans la fiche produit, elle n'es pas appellée et c'est bien la mon probleme Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 ok je vois pour taider j ai besoin de la version de ton prestashop et de sa sous version comme ca on se cale sur la meme version et je regarde ce que je peux faire, cdt Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 ok ma version de prestashop est 1.7.5.0 et je ne connais pas ma sous version, comment est ce que je la voies ? 1 Link to comment Share on other sites More sharing options...
Dragsun Posted January 8, 2021 Author Share Posted January 8, 2021 Informations sur votre serveur Windows NT build 18363 (Windows 10) AMD64 Version du logiciel serveur : Apache/2.4.35 (Win64) OpenSSL/1.1.1b PHP/7.2.19 Version de PHP : 7.2.19 c'est les seules info que j'ai Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 ta version 1.7 ta sous version 5.0, donc j ai tout pour faire une preprod, cdt Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 (edited) Ok du coup je t'ai fais la fonctionnalité: http://demo1750.baba-agency.com/hommes/1-1-hummingbird-printed-t-shirt.html je me suis basé sur le code du module ps_featured 1- on crée un override de Category.php /override/classes <?php /** * 2007-2018 PrestaShop. * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2018 PrestaShop SA * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\PrestaShop\Adapter\Category\CategoryProductSearchProvider; use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever; use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext; use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery; use PrestaShop\PrestaShop\Core\Product\Search\SortOrder; class Category extends CategoryCore { public function getProductsByIdCategory($id_category,$nProducts) { $context = Context::getContext(); $category = new Category((int)$id_category); $searchProvider = new CategoryProductSearchProvider( $context->getTranslator(), $category ); $context = new ProductSearchContext($context); $query = new ProductSearchQuery(); if ($nProducts < 0) { $nProducts = 12; } $query ->setResultsPerPage($nProducts) ->setPage(1) ; if (Configuration::get('HOME_FEATURED_RANDOMIZE')) { $query->setSortOrder(SortOrder::random()); } else { $query->setSortOrder(new SortOrder('product', 'position', 'asc')); } $result = $searchProvider->runQuery( $context, $query ); $context = Context::getContext(); $assembler = new ProductAssembler($context); $presenterFactory = new ProductPresenterFactory($context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $context->link ), $context->link, new PriceFormatter(), new ProductColorsRetriever(), $context->getTranslator() ); $products_for_template = []; foreach ($result->getProducts() as $rawProduct) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $context->language ); } return $products_for_template; } } 2 - dans le product.tpl /themes/classic/templates/catalog/ {* Modif Alex *} {assign var=productsCustom value=Category::getProductsByIdCategory(6,4)} <section class="product-accessories clearfix"> <p class="h5 text-uppercase">{l s='You might also like' d='Shop.Theme.Catalog'}</p> <div class="products"> {foreach from=$productsCustom item="product_custom"} {block name='product_miniature'} {include file='catalog/_partials/miniatures/product.tpl' product=$product_custom} {/block} {/foreach} </div> </section> {* Modif Alex *} Category::getProductsByIdCategory(6,4) le 1er parametre est la categorie qu'on target id 6 dans cet exemple, le deuxieme parametre le nombre de produits que l'on souhaite afficher ici 4 cdt Edited January 8, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 8, 2021 Share Posted January 8, 2021 J'ai oublié le tri par caracteristique... on va faire une nouvelle fonction getProductsByFeature basé sur getProducts sauf qu on rajoute un parametre de caracteristique <?php /** * 2007-2018 PrestaShop. * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2018 PrestaShop SA * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\PrestaShop\Adapter\Category\CategoryProductSearchProvider; use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever; use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext; use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery; use PrestaShop\PrestaShop\Core\Product\Search\SortOrder; class Category extends CategoryCore { public function getProductsByIdCategory($id_category,$nProducts,$id_feature) { $context = Context::getContext(); $category = new Category((int)$id_category); $searchProvider = new CategoryProductSearchProvider( $context->getTranslator(), $category ); $context = new ProductSearchContext($context); $query = new ProductSearchQuery(); if ($nProducts < 0) { $nProducts = 12; } $query ->setResultsPerPage($nProducts) ->setPage(1) ; if (Configuration::get('HOME_FEATURED_RANDOMIZE')) { $query->setSortOrder(SortOrder::random()); } else { $query->setSortOrder(new SortOrder('product', 'position', 'asc')); } $result = $searchProvider->runQuery( $context, $query ); $context = Context::getContext(); $assembler = new ProductAssembler($context); $presenterFactory = new ProductPresenterFactory($context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $context->link ), $context->link, new PriceFormatter(), new ProductColorsRetriever(), $context->getTranslator() ); $products_for_template = []; foreach (Category::getProductsByFeature($id_category,$id_feature,1,1,$nProducts) as $rawProduct) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $context->language ); } return $products_for_template; } public function getProductsByFeature( $id_category, $id_feature, $idLang, $p, $n, $orderyBy = null, $orderWay = null, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true, Context $context = null ) { if (!$context) { $context = Context::getContext(); } $front = in_array($context->controller->controller_type, array('front', 'modulefront')); $idSupplier = (int) Tools::getValue('id_supplier'); /* Return only the number of products */ if ($getTotal) { $sql = 'SELECT COUNT(cp.`id_product`) AS total FROM `' . _DB_PREFIX_ . 'product` p ' . Shop::addSqlAssociation('product', 'p') . ' LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = ' . (int) $this->id . ($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '') . ($active ? ' AND product_shop.`active` = 1' : '') . ($idSupplier ? 'AND p.id_supplier = ' . (int) $idSupplier : ''); return (int) Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); } if ($p < 1) { $p = 1; } /** Tools::strtolower is a fix for all modules which are now using lowercase values for 'orderBy' parameter */ $orderyBy = Validate::isOrderBy($orderyBy) ? Tools::strtolower($orderyBy) : 'position'; $orderWay = Validate::isOrderWay($orderWay) ? Tools::strtoupper($orderWay) : 'ASC'; $orderByPrefix = false; if ($orderyBy == 'id_product' || $orderyBy == 'date_add' || $orderyBy == 'date_upd') { $orderByPrefix = 'p'; } elseif ($orderyBy == 'name') { $orderByPrefix = 'pl'; } elseif ($orderyBy == 'manufacturer' || $orderyBy == 'manufacturer_name') { $orderByPrefix = 'm'; $orderyBy = 'name'; } elseif ($orderyBy == 'position') { $orderByPrefix = 'cp'; } if ($orderyBy == 'price') { $orderyBy = 'orderprice'; } $nbDaysNewProduct = Configuration::get('PS_NB_DAYS_NEW_PRODUCT'); if (!Validate::isUnsignedInt($nbDaysNewProduct)) { $nbDaysNewProduct = 20; } $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity' . (Combination::isFeatureActive() ? ', IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity' : '') . ', pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image` id_image, il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB("' . date('Y-m-d') . ' 00:00:00", INTERVAL ' . (int) $nbDaysNewProduct . ' DAY)) > 0 AS new, product_shop.price AS orderprice FROM `' . _DB_PREFIX_ . 'category_product` cp LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product` ' . Shop::addSqlAssociation('product', 'p') . (Combination::isFeatureActive() ? ' LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_shop` product_attribute_shop ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop=' . (int) $context->shop->id . ')' : '') . ' ' . Product::sqlStock('p', 0) . ' LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) $idLang . Shop::addSqlRestrictionOnLang('cl') . ') LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) $idLang . Shop::addSqlRestrictionOnLang('pl') . ') LEFT JOIN `' . _DB_PREFIX_ . 'image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=' . (int) $context->shop->id . ') LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) $idLang . ') LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` LEFT JOIN `' . _DB_PREFIX_ . 'feature_product` fp ON fp.`id_product` = p.`id_product` WHERE product_shop.`id_shop` = ' . (int) $context->shop->id . ' AND fp.`id_feature_value` = ' . (int) $id_feature. ' AND cp.`id_category` = ' . (int) $id_category . ($active ? ' AND product_shop.`active` = 1' : '') . ($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '') . ($idSupplier ? ' AND p.id_supplier = ' . (int) $idSupplier : ''); if ($random === true) { $sql .= ' ORDER BY RAND() LIMIT ' . (int) $randomNumberProducts; } else { $sql .= ' ORDER BY ' . (!empty($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . bqSQL($orderyBy) . '` ' . pSQL($orderWay) . ' LIMIT ' . (((int) $p - 1) * (int) $n) . ',' . (int) $n; } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql, true, false); if (!$result) { return array(); } if ($orderyBy == 'orderprice') { Tools::orderbyPrice($result, $orderWay); } // Modify SQL result return Product::getProductsProperties($idLang, $result); } } {* Modif Alex *} {assign var=productsCustom value=Category::getProductsByIdCategory(6,4,18)} <section class="product-accessories clearfix"> <p class="h5 text-uppercase">{l s='You might also like' d='Shop.Theme.Catalog'}</p> <div class="products"> {foreach from=$productsCustom item="product_custom"} <pre>{$product_custom.feature}</pre> {block name='product_miniature'} {include file='catalog/_partials/miniatures/product.tpl' product=$product_custom} {/block} {/foreach} </div> </section> {* Modif Alex *} ici on prend 18 comme id_feature value Link to comment Share on other sites More sharing options...
Dragsun Posted January 11, 2021 Author Share Posted January 11, 2021 Bonjour et désolé du retard, merci beaucoup a toi j'essaie ça ! Link to comment Share on other sites More sharing options...
Dragsun Posted January 12, 2021 Author Share Posted January 12, 2021 Rebonjour ! du coup j'ai essayé le module et la fonctionalité en elle meme fonctionnes très bien, le seul hic est visuel Comment je pourrait régler cela ? mon code : merci a vous et bonne journée. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted January 12, 2021 Share Posted January 12, 2021 Salut, en faisant du CSS, cordialement Link to comment Share on other sites More sharing options...
Dragsun Posted January 12, 2021 Author Share Posted January 12, 2021 Merci bien et 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