Juan Posted March 30, 2009 Share Posted March 30, 2009 BonjourJe remplis la base en ajoutant la liste des fabriquants.Le problème c'est que tous les fabriquants apparaissent sur le front office. Même ceux qui ne sont pas encore rattachés à un produit.Et je ne vois pas de bouton radio comme pour les produits pour les désactiver.Je précise que la boutique est une librairie, j'utilise le champ fabriquant pour la liste des auteurs. Il est possible que je désactive certains livres, et je ne voudrais pas que l'auteur soit visible alors que le livre n'est pas en rayon.Merci Link to comment Share on other sites More sharing options...
Marina13 Posted March 30, 2009 Share Posted March 30, 2009 Bonjour,J'ai rencontré le même problème. N'ayant pas trouvé de solution meilleure, voici ce que j'ai fait :- j'ai retiré le bloc fabricants du template- et je l'ai remplacé par le module bloc html sur lequel j'insère manuellement les liens vers les pages fabricants au fur et à mesure que ceux-ci ont des produits qui leur sont rattachés.Vous pouvez voir ce que ça donne (colonne de droite) en visitant ma boutique en ligne de vetement Link to comment Share on other sites More sharing options...
Juan Posted March 30, 2009 Author Share Posted March 30, 2009 Merci de votre réponseLe souci c'est qu'on va importer une base de donnée déjà existante, mais dans un premier temps on ne mettra pas tout le stock en ligne. Il y aura donc énormément d'auteurs qui n'auront pas de livres sur le front office.Je ne suis pas caler en php, mais je suis sûr qu'il y a moyen d'ajouter une condition dans le module fabriquant pour qu'il n'affiche que les fabriquants qui ont un produit validé.Si quelqu'un à une idée. Link to comment Share on other sites More sharing options...
Juan Posted April 14, 2009 Author Share Posted April 14, 2009 Il n'y a aucune solution ? Link to comment Share on other sites More sharing options...
DrÿSs' Posted April 14, 2009 Share Posted April 14, 2009 Déplacé dans le forum Développement et modules. Link to comment Share on other sites More sharing options...
seihty Posted April 15, 2009 Share Posted April 15, 2009 Bonjour,Je rencontre la même problématique que Juan à savoir comment désactiver et non effacer un fabricant non relié à un produit. Merci pour toutes vos réponses sur ce sujet. Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Bonjour,Voici les modifications à apporter afin de ne pas afficher les "manufacturers" si aucun produit ne lui est attaché.Dans le fichier : classes/Manufacturer.phpRemplacer la methode : getManufacturers()par : static public function getManufacturers($getNbProducts = true, $id_lang = 0, $active = false, $p = false, $n = false) { if (!$id_lang) $id_lang = Configuration::get('PS_LANG_DEFAULT'); $sql = 'SELECT m.*, ml.`description`'; if ($getNbProducts) $sql.= ' , COUNT(p.`id_product`) as nb_products'; $sql.= ' FROM `'._DB_PREFIX_.'manufacturer` as m LEFT JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = '.intval($id_lang).')'; if ($getNbProducts) $sql.= ' LEFT JOIN `'._DB_PREFIX_.'product` as p ON (p.`id_manufacturer` = m.`id_manufacturer`) '.($active ? 'WHERE p.`active` = 1' : '').' GROUP BY m.`id_manufacturer`'; $sql.= ' ORDER BY m.`name` ASC'.($p ? ' LIMIT '.((intval($p) - 1) * intval($n)).','.intval($n) : ''); $manufacturers = Db::getInstance()->ExecuteS($sql); if ($manufacturers === false) return false; for ($i = 0; $i < sizeof($manufacturers); $i++) { if (intval(Configuration::get('PS_REWRITING_SETTINGS'))) $manufacturers[$i]['link_rewrite'] = Tools::link_rewrite($manufacturers[$i]['name'], false); else $manufacturers[$i]['link_rewrite'] = 0; } return $manufacturers; } Explication : Modification du paramètre $getNbProducts -> le mettre à true par défaut.Cette modification permet de toujours récupérer le nombre de produits attachés au "manufacturer".Ensuite nous allons nous servir de ce nombre de produit afin de determiner si le "manufacturer" doit s'afficher ou non.Dans le fichier : modules/blockmanufacturer/blockmanufacturer.tpl1er modification : Remplacer : > {if $text_list} </pre> <ul> {foreach from=$manufacturers item=manufacturer name=manufacturer_list} {if $smarty.foreach.manufacturer_list.iteration <= $text_list_nb} getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)}" title="{l s='More about' mod='blockmanufacturer'} {$manufacturer.name}">{$manufacturer.name} {/if} {/foreach} </ul> <br> {/if Par : > {if $text_list} </pre> <ul> {foreach from=$manufacturers item=manufacturer name=manufacturer_list} {if $smarty.foreach.manufacturer_list.iteration <= $text_list_nb} {if $manufacturer.nb_products > 0} getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)}" title="{l s='More about' mod='blockmanufacturer'} {$manufacturer.name}">{$manufacturer.name} {/if} {/if} {/foreach} </ul> <br> {/if 2ieme modification : Remplacer : {l s='All manufacturers' mod='blockmanufacturer'} {foreach from=$manufacturers item=manufacturer} {$manufacturer.name} {/foreach} Par : {l s='All manufacturers' mod='blockmanufacturer'} {foreach from=$manufacturers item=manufacturer} {if $manufacturer.nb_products > 0} {$manufacturer.name} {/if} {/foreach} Ces modifications ne concerne que le block "Fabricants".Je regarde les modifications à effectuer afin de ne pas afficher les "manufacturers" qui n'ont pas de produits attachés sur la page "manufacturer.php". Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Suite des modifications à effectuer afin de ne pas afficher les "manufacturers" qui n'ont aucun produits attachés.Dans le fichier : themes/prestashop/manufacturer-list.tplRemplacer : {foreach from=$manufacturers item=manufacturer} <!-- logo --> {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$manufacturer.name|escape:'htmlall':'UTF-8'}">{/if} {if $manufacturer.nb_products > 0}{/if} <!-- name --> {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.name|truncate:60|escape:'htmlall':'UTF-8'} {if $manufacturer.nb_products > 0}{/if} {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.description|truncate:300|escape:'htmlall':'UTF-8'} {if $manufacturer.nb_products > 0}{/if} {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.nb_products|intval} {if $manufacturer.nb_products > 1}{l s='products'}{else}{l s='product'}{/if} {if $manufacturer.nb_products > 0}{/if} {if $manufacturer.nb_products > 0} getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{l s='view products'} {/if} {/foreach} Par : {foreach from=$manufacturers item=manufacturer} {if $manufacturer.nb_products > 0} <!-- logo --> {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$manufacturer.name|escape:'htmlall':'UTF-8'}">{/if} {if $manufacturer.nb_products > 0}{/if} <!-- name --> {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.name|truncate:60|escape:'htmlall':'UTF-8'} {if $manufacturer.nb_products > 0}{/if} {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.description|truncate:300|escape:'htmlall':'UTF-8'} {if $manufacturer.nb_products > 0}{/if} {if $manufacturer.nb_products > 0}getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{/if} {$manufacturer.nb_products|intval} {if $manufacturer.nb_products > 1}{l s='products'}{else}{l s='product'}{/if} {if $manufacturer.nb_products > 0}{/if} {if $manufacturer.nb_products > 0} getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)|escape:'htmlall':'UTF-8'}">{l s='view products'} {/if} {/if} {/foreach} Avec ces modifications les "manufacturers" avec aucun produits ne s'affiche plus dans le Front Office. Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 Super, merci Mambe !!J'essaye le code aujourd'hui. Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Petit oubli J'avais oublié de gérer l'affichage du nombre total de fabricant.Dans le fichier : supplier.phpRemplacer : else { $data = call_user_func(array($className, 'get'.$className.'s'), false, intval($cookie->id_lang)); $nbProducts = sizeof($data); include(dirname(__FILE__).'/pagination.php'); $data = call_user_func(array($className, 'get'.$className.'s'), true, intval($cookie->id_lang), false, $p, $n); $imgDir = $objectType == 'supplier' ? _PS_SUPP_IMG_DIR_ : _PS_MANU_IMG_DIR_; foreach ($data AS &$item) $item['image'] = (!file_exists($imgDir.'/'.$item['id_'.$objectType].'-medium.jpg')) ? Language::getIsoById(intval($cookie->id_lang)).'-default' : $item['id_'.$objectType]; $smarty->assign(array( 'pages_nb' => ceil($nbProducts / intval($n)), 'nb'.$className.'s' => $nbProducts, $objectType.'s' => $data )); $smarty->display(_PS_THEME_DIR_.$objectType.'-list.tpl'); } Par : else { $data = call_user_func(array($className, 'get'.$className.'s'), true, intval($cookie->id_lang)); $nbProducts = 0; foreach ($data AS &$item) if ($item['nb_products'] > 0) $nbProducts += 1; //$nbProducts = sizeof($data); include(dirname(__FILE__).'/pagination.php'); $data = call_user_func(array($className, 'get'.$className.'s'), true, intval($cookie->id_lang), false, $p, $n); $imgDir = $objectType == 'supplier' ? _PS_SUPP_IMG_DIR_ : _PS_MANU_IMG_DIR_; foreach ($data AS &$item) $item['image'] = (!file_exists($imgDir.'/'.$item['id_'.$objectType].'-medium.jpg')) ? Language::getIsoById(intval($cookie->id_lang)).'-default' : $item['id_'.$objectType]; $smarty->assign(array( 'pages_nb' => ceil($nbProducts / intval($n)), 'nb'.$className.'s' => $nbProducts, $objectType.'s' => $data )); $smarty->display(_PS_THEME_DIR_.$objectType.'-list.tpl'); } Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 Ça marche !!Sauf pour la liste de tous les fabriquants.Le nombre s'affiche correctement, mais il n'y a plus de liste. Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Hmmmm ....je vais regarder ça Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Ok !!!j 'ai repéré le problème.Cela vient du fichier : manufacturer-list.tplEn effet, le copier/coller de code que j'ai effectué à été mal pris en compte par le forum.Il m'a remplacé la balise 'a'Rohh la la je n'arrive meme pas à l'écrire !!!!bon faut réécrire les balise de lien et mettre le "a href=" .En tout cas gros bug dans l'édition d'un message ou comment fait-on pour écrire le code d'un lien en clair ? Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 Oui, c'est inquiétant ces bugs dans l'éditeur du forum.Je viens de remplacer "" par "", mais ça ne marche toujours pas.Je ne pense pas avoir fait de fausse manip. Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 heu...pourrais-tu me faire un screenshot de ton code stp (manufacturer-list.tpl) Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 Ok, l'image est un peu grande... Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 en effet, il semble correcte.Pourrais-tu commenter le premier "if" : {foreach from=$manufacturers item=manufacturer} {* if $manufacturer.nb_products > 0 *} . . . . . . {* /if *} {/foreach} et ensuite rafraichir la page avec : ctrl + F5Normalement tu devrait voir apparaitre tous les "manufacturers".Si c'est OK : Modifie ton fichier : config/config.inc.php /* Improve PHP configuration to prevent issues */ @ini_set('display_errors', 'on'); Supprime le commentaire du "if" {foreach from=$manufacturers item=manufacturer} {if $manufacturer.nb_products > 0} . . . . . . {/if} {/foreach} Rafraichi avec ctrl + F5Retourne - t -il un message d'erreur? Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 C'est fait.Oui, on voit tous les fabriquants.Ensuite avec le display on, il n'y a pas de message d'erreur.Voici le code : > <!-- /Breadcrumb --> Auteurs Il y a 3 auteurs. </pre> <ul> </ul> Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Pourrais-tu me montrer les fichiers : - supplier.php- classes/Manufacturer.phpmerci Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 OK et merci de m'aider. Manufacturer.php supplier.php Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 Peut tu essayer avec ces 3 fichiers.Il faut bien penser à renommer le fichier "manufacturer-list.php" en "manufacturer-list.tpl"Je ne suis pas arrivé à le poster directement en .tplLa pour l'instant, je ne vois pas trop d'ou peut provenir le probleme. Manufacturer.php supplier.php manufacturer-list.php Link to comment Share on other sites More sharing options...
Mambe Posted April 16, 2009 Share Posted April 16, 2009 oups trompé de fichier manufacturer-list.php supplier.php Link to comment Share on other sites More sharing options...
Juan Posted April 16, 2009 Author Share Posted April 16, 2009 C'est fait.Malheureusement il n'y a pas de changement.Le listing des produits par fabriquant marche.Mais le listing de tous les fabriquants ne marche pas. Link to comment Share on other sites More sharing options...
Mambe Posted April 17, 2009 Share Posted April 17, 2009 En résumé, ça semble bien être un problème avec le fichier manufacturer-list.tplLe fait de rajouter une condition "{if $manufacturer.nb_products > 0}" semble faire merder l'affichage des fabricants, car en commentant cette condition l'affichage se passe correctement.Essaie en commentant cette condition, d'afficher la variable : $manufacturer.nb_products, à coté du nom du fabricant par exemple. Link to comment Share on other sites More sharing options...
Juan Posted April 17, 2009 Author Share Posted April 17, 2009 Ça marche. Par contre il n'y a pas de pagination (page 1|2|3...). Link to comment Share on other sites More sharing options...
Zorg Posted April 17, 2009 Share Posted April 17, 2009 Hello,Je viens de faire le changement et pour moi tout semble s'afficher correctement.Il faudrait juste penser à gérer les produits inactifs. Link to comment Share on other sites More sharing options...
Juan Posted April 17, 2009 Author Share Posted April 17, 2009 Ok. Je vois ça ce WE. Merci beaucoup pour le coup de main. Link to comment Share on other sites More sharing options...
ShowYou Posted October 27, 2009 Share Posted October 27, 2009 Bonjour, PS 1.2.1je reviens un peu tardivement sur le sujet mais j'ai besoin d'aide.J'ai fait toutes les modifications et les fabricants ayant des produits désactivés apparaissent.Et lorsque je choisis un fabricant dans le menu déroulant, il ne se passe rien.Ai-je fais une erreur commune ou pas ?Ai-je oublier quelque chose ? Link to comment Share on other sites More sharing options...
Niko Posted August 16, 2010 Share Posted August 16, 2010 Bonjour,Merci pour cette astuce qui fonctionnait parfaitement jusqu'il y a peu.Celle-ci ne semble plus fonctionner avec Prestashop 1.2.5 alors que la modif. fonctionnait parfaitement avant la mise à jour...Quelqu'un a-t-il la solution ?Merci beaucoup à tous.Niko Link to comment Share on other sites More sharing options...
hphilg Posted December 9, 2012 Share Posted December 9, 2012 salut à tous, Tout comme niko, j'essaie d'adapter la configuration pour une version 1.4 de prestashop mais cela ne focntionne pas. J'aimerais plutot utiliser le systeme d'override plutot que modifier le coeur de prestashop. est-ce que quelqu'un a réussit à faire ces modification pour ps1.4 ? Merci, A+ Link to comment Share on other sites More sharing options...
sangria777 Posted December 18, 2013 Share Posted December 18, 2013 Comme je l'ai fait, je vous indique comment : sur le blockmanufacturer.php ajouter true dans la parenthèse 'manufacturer' ()'manufacturers' => Manufacturer::getManufacturers(true), public function hookLeftColumn($params) { $this->smarty->assign(array( 'manufacturers' => Manufacturer::getManufacturers(true), 'text_list' => Configuration::get('MANUFACTURER_DISPLAY_TEXT'), 'text_list_nb' => Configuration::get('MANUFACTURER_DISPLAY_TEXT_NB'), 'form_list' => Configuration::get('MANUFACTURER_DISPLAY_FORM'), 'display_link_manufacturer' => Configuration::get('PS_DISPLAY_SUPPLIERS'), )); return $this->display(__FILE__, 'blockmanufacturer-accueil.tpl'); } ensuite dans le .tpl ajouter juste avant le <li> {if ($manufacturer.nb_products>0)} et juste après le </li> {/if} Je suis en version 1.5.4.1 et ça marche nickel ! Link to comment Share on other sites More sharing options...
Recommended Posts