Jump to content

[Résolu] Récupérer l'id du fabriquant du produit dans un module


Recommended Posts

Bonjour,

je suis en train de faire mes armes sur Prestashop et du coup sur le système Smarty par la même occasion :-)

Pour l'instant je souhaiterais simplement afficher l'image du fabriquant sur la fiche produit. Pour cela j'ai trouvé une méthode sur le forum, qui permet de le faire en ajoutant la ligne ci-dessous dans le template (product.tpl):

< img src="{$img_manu_dir}{$product_manufacturer->id}-medium.jpg" alt="{$product_manufacturer->name}" /> 



Cela marche bien mais j'aimerais faire la même chose sous forme de module. Pourquoi ? D'une part pour apprendre, et d'autre part car cela permettrais d'activer ou de déactiver cette fonctionnalité via le Back office.

Du coup j'ai fait mes petits tests sur un module que j'ai créé et là je bloque pour récupérer l'id de mon fabriquant dans le .php de mon module. Pour tester mon module j'ai testé de récupérer l'id produit comme ci-dessous:

function hookextraright($params)
   {
   global $smarty, $link;

   $id_produit = intval(Tools::getValue('id_product')); 
   $smarty->assign('idproduit' , $id_produit);

   return $this->display(__FILE__, 'logomarqueproduit.tpl');
   }



Avec la méthode ci-dessus et en faisant {$idproduit} dans mon fichier .tpl cela m'affiche l'id de mon produit.

Moi je veut simplement faire la même chose avec l'id du fabricant de mon produit, afin de pouvoir l'inclure dans ma balise .

Si quelqu'un a une idée cela m'aiderait énormément à finir mon module. En plus même si ce n'est pas le module de l'année je garantis de le partager sur le forum lorsqu'il sera fini. Peut être cela en aidera certains...

Merci

Link to comment
Share on other sites

Bon j'ai trouvé une solution mais elle est loin d'être propre. Je ne passe donc pas encore ce post en "Résolu".

Voilà comment j'ai fait. Dans le .php de mon module j'ai mis:

function hookextraright($params)
   {
   global $smarty;
   $sql = 'SELECT id_manufacturer FROM `'._DB_PREFIX_.'product` WHERE `id_product` = '.intval(Tools::getValue('id_product'));
   $req = mysql_query($sql);
   while($data = mysql_fetch_assoc($req))
       {l
       $smarty->assign('id_manufacturer' , $data['id_manufacturer']);
       } 
   return $this->display(__FILE__, 'logomarqueproduit.tpl');
   }



Bon si quelqu'un a plus propre et moins radical à me proposer je suis preneur et j'en serais reconnaissant.

Link to comment
Share on other sites

Super ! merci beaucoup c'était simple mais quand on a jamais gouter à la prog orientée objet on est perdu pour un rien.

Ps il manque une petite parenthèse dans le code:

$produit = new Product(intval(Tools::getValue('id_product')));
$smarty->assign('id_manufacturer' , $produit->id_manufacturer); 

Link to comment
Share on other sites

  • 2 months later...
  • 2 years later...

Bonjour,

 

Suite à une recherche intensive sur le net pour faire ce que je veux faire, il semble que ce qui se rapproche le plus du module que je veux, c'est ce que vous avez fait ici.

 

je m'explique, j'aurais besoin d'avoir un module qui affiche les fabricants des produits du magasin sur les page home et produit en footer.

 

J'ai jusqu’à présent réussit à utiliser le module blocmanufacturer pour l'accrocher ou je voulais. J'ai réussi à afficher le résumé de la description et il me manque le logo du fabricant.

 

dans blocmanufacturer.php voilà ce que j'ai mis comme code :

 

function hookLeftColumn($params)
 {
 global $smarty, $link;

 $smarty->assign(array(
   'manufacturers' => Manufacturer::getManufacturers(),
   'link' => $link,
   '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'),
 ));

 global $smarty;
 $req = mysql_query($sql);
 while($data = mysql_fetch_assoc($req))
   {
   $smarty->assign('id_manufacturer', $manufacturer_id);
   }

 return $this->display(__FILE__, 'blockmanufacturer.tpl');
 }

 

Puis

 

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

 

pour l'afficher dans la bonne page.

 

Ensuite dans blocmanufacturer.tpl voila le code que j'ai modifier pour afficher le block :

 

{if $manufacturers}
 {if $text_list}

 <ul class="bullet">

 {foreach from=$manufacturers item=manufacturer name=manufacturer_list}

   {if $smarty.foreach.manufacturer_list.iteration <= $text_list_nb}

   <li class="{if $smarty.foreach.manufacturer_list.last}last_item{elseif $smarty.foreach.manufacturer_list.first}first_item{else}item{/if}">
     {if $manufacturer}

       <div id="logo_manufacturer">

         <a href="{$link->getmanufacturerLink($manufacturer->id, $manufacturer->link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$manufacturer.name|escape:'htmlall':'UTF-8'}">
           <img src="{$img_manu_dir}{$manufacturer_id}.jpg" alt="{$manufacturer.name}">
         </a>

       </div>
     {/if}
     <a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)}" title="{l s='More about' mod='blockmanufacturer'} {$manufacturer.name}">{$manufacturer.name|escape:'htmlall':'UTF-8'}</a>

     <p>{$manufacturer.short_description}</p>

   </li>
   {/if}
 {/foreach}
 </ul>
 {/if}

 

Le problème vient du fait que le logo ne s'affiche pas car il ne récupère pas l'ID du fabricant.

 

J'ai essayé pleins de choses différentes que j'ai trouvé sur le web, mais rien ne semble fonctionner.

Je sens que je suis pas loin de trouver, le problème c'est que je suis pas un développeur donc j'y vais un peu à taton avec mes quelques connaissances.

 

Quelqu'un aurait une idée ?

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