Jump to content

Masquer les fabriquants qui ne sont pas rattachés à un produit


Juan

Recommended Posts

Bonjour

Je 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

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

Merci de votre réponse

Le 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

  • 3 weeks later...

Bonjour,

Voici les modifications à apporter afin de ne pas afficher les "manufacturers" si aucun produit ne lui est attaché.

Dans le fichier : classes/Manufacturer.php

Remplacer 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.tpl

1er 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

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.tpl

Remplacer :

{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

Petit oubli :)

J'avais oublié de gérer l'affichage du nombre total de fabricant.

Dans le fichier : supplier.php

Remplacer :

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

Ok !!!

j 'ai repéré le problème.

Cela vient du fichier : manufacturer-list.tpl

En 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

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 + F5

Normalement 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 + F5

Retourne - t -il un message d'erreur?

Link to comment
Share on other sites

En résumé, ça semble bien être un problème avec le fichier manufacturer-list.tpl

Le 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

  • 6 months later...

Bonjour,

PS 1.2.1
je 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

  • 9 months later...

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

  • 2 years later...

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

  • 1 year later...

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...