Jump to content

[RESOLU] Perte du nom du fabricant dans l'affichage en liste des produits si réduction activé


Recommended Posts

Bonjour à tous,

Pour un site en développement je dois être en mesure d'afficher sur l'affichage en liste le nom du fabricant du produit, j'ai donc simplement placé ceci pour l'afficher dans le product-list.tpl :

{$product.manufacturer_name|escape:'htmlall':'UTF-8'}



Cela marche parfaitement ! Par contre, je ne sais pas pourquoi, si un produit à une réduction, la marque ne s'affiche plus ! Cela parait bizarre comme ça mais ça l'est vraiment. J'ai mis un screenshot en pièce jointe pour mieux comprendre.
Chaque produit affiche bien en bas, sous son nom, la marque, par contre le Macbook à une réduction et lui n'affiche pas la marque. Si je retire la réduction, la marque apparait à nouveau !

J'ai passé un coups de {debug} et il apparait tout bonnement que la variable $product.manufacturer_name n'existe pas pour ce produit quand il à une réduction (normal donc que cela ne s'affiche pas).

Alors je ne sais pas si c'est une erreu bête de ma part mais si quelqu'un pouvait tester ça et me dire si chez lui ça fait le même soucis, que je puisse voir si c'est un bug de PS ou je ne sais quoi. Bien sur si une personne sait comment afficher la marque se serait top !

Merci vraiment de votre aide.

40166_iik8fow8g2RQNjbSPD9h_t

Link to comment
Share on other sites

La piste du bug s'affine !

En fait si jamais le bloc de réduction est affiché, et qu'il affiche un produit en réduction cela cause les problèmes dont je parle ci-dessus sur ce produit et ce produit seulement. Si j'ai donc 3 produits dans ma page en promotions, seul celui qui est dans le bloc de réduction (de gauche) va avoir des soucis. Si je désactive le bloc de réduction tout va bien.

Il semblerait donc que par je ne sais quel tour de passe-passe le bloc de réduction fait sauter des valeurs... d'où les problèmes de mon premier post.

J'espère donc que toutes ces précisions vous permettrons de mieux m'aider à régler cela ou au moins à me dire si cela le fait chez vous aussi.

Merci

Link to comment
Share on other sites

Bon je me répond tout seul...

En fait le problème vient des variables $products passé par le module promotion qui font sauter celle de base pour le reste de la page. Il suffit donc de changer le nom des variables dans le fichier blockspecials.php, j'ai passé les miennes en $product_sp et c'est bon !

Voila si ça peu aider.

Link to comment
Share on other sites

Si tu as quelques connaissance en PHP ce n'est pas bien compliqué, dans le fichier blockspecials.php j'ai modifié le nom de la variable smarty pour qu'elle s'appelle ainsi products_sp, en fait il faut juste qu'elle soit différentes de products qui est déjà utilisé pour afficher tout les produits.

Et dans le fichier blockspecials.tpl je fais appel à cette variable smarty, j'ai un truc du type :

>{if $products_sp|@count > 0}
</pre>
<ul>
       {foreach from=$products_sp item=product_sp name=products_sp}
.....



Si tu as besoin de plus d'aide dis le moi. Je pourrais plus te guider plus si tu as des notions php.

Link to comment
Share on other sites

Salut et merci pour ta réponse .

Je suis très novice dans le php, je galère encore, je ne vois pas comment tu change le nom de la variable smarty.

voici mon fichier blockspécial.php du module blockspécial

<?php

if (!defined('_CAN_LOAD_FILES_'))
exit;

class BlockSpecials extends Module
{
private $_html = '';
private $_postErrors = array();

function __construct()
{
$this->name = 'blockspecials';
$this->tab = 'Blocks';
$this->version = 0.8;

parent::__construct();

$this->displayName = $this->l('Specials block');
$this->description = $this->l('Adds a block with current product Specials');
}

function install()
{
return (parent::install() AND $this->registerHook('leftColumn'));
}

function hookRightColumn($params)
{
global $smarty;

if ($special = Product::getRandomSpecial(intval($params['cookie']->id_lang)))
$smarty->assign(array(
'special' => $special,
'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'] / (1 + $special['rate'] / 100), 2),
'oldPrice' => $special['price'] + $special['reduction'],
'mediumSize' => Image::getSize('medium')));
return $this->display(__FILE__, 'blockspecials.tpl');
}

function hookLeftColumn($params)
{
return $this->hookRightColumn($params);
}
}

?>



Si tu peux m'aiguiller se serait super cool.

Encore merci.

Michel

Link to comment
Share on other sites

  • 2 months later...

Salut !

Alors je suis désolé mais ca fait un moment que j'ai fais cette modif donc le mieux est que je vous colle tout le code. Attention par contre cette modif est faites sous un PrestaShop 1.3, je n'ai pas testé sous 1.4. De plus ma modif change l'affichage général du module. Mais cela vous permettra de mieux comprendre surement :

Fichier BlockSpecials.TPL :

<!-- MODULE Block specials -->

{l s='Specials' mod='blockspecials'}

   {if $products_sp|@count > 0}

       {foreach from=$products_sp item=product_sp name=products_sp}

getImageLink($product_sp.link_rewrite, $product_sp.id_image, 'small')}" alt="{$product_sp.legend|escape:html:'UTF-8'}" height="{$smallSize.height}" width="{$smallSize.width}" title="{$product_sp.name|escape:html:'UTF-8'}" />
{$product_sp.name|escape:html:'UTF-8'}
{if !$priceDisplay}{displayWtPrice p=$product_sp.price_without_reduction}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl}{/if}
{if !$priceDisplay}{displayWtPrice p=$product_sp.price}{else}{displayWtPrice p=$product_sp.price_tax_exc}{/if}

       {/foreach}

 
{l s='All specials' mod='blockspecials'}
   {else}

{l s='No specials at this time' mod='blockspecials'}
   {/if}



<!-- /MODULE Block specials -->



Fichier BlockSpecials.PHP :

<?php

if (!defined('_CAN_LOAD_FILES_'))
   exit;

class BlockSpecials extends Module
{
   private $_html = '';
   private $_postErrors = array();

   function __construct()
   {
       $this->name = 'blockspecials';
       $this->tab = 'Blocks';
       $this->version = 0.8;

       parent::__construct();

       $this->displayName = $this->l('Specials block');
       $this->description = $this->l('Adds a block with current product Specials');
   }

   function install()
   {
       return (parent::install() AND $this->registerHook('rightColumn'));
   }

   function hookRightColumn($params)
   {
       global $smarty;
       $products_sp = Product::getPricesDrop(intval($params['cookie']->id_lang));
       $rand_products_sp = array();

       if ($products_sp) {
           $keys = array_rand($products_sp,2); 
           shuffle($keys);
           foreach ($keys AS $key) {
               $rand_products_sp[] = $products_sp[$key];
           }
       }

       $smarty->assign(array('products_sp' => $rand_products_sp,'smallSize' => Image::getSize('small')));
       if($products_sp) return $this->display(__FILE__, 'blockspecials.tpl');
       else return '';
   }

   function hookLeftColumn($params)
   {
       return $this->hookRightColumn($params);
   }
}

?>



Hésitez pas si vous avez des questions. Normalement avec tout ça vous devriez avoir tout qui fonctionne.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...