Jump to content

Appeller getImage dans un ModuleFrontController


Recommended Posts

Bonjour à tous (et toutes).

 

Je bosse en ce moment sur un module un peu complexe.

L'idée c'est qu'un module qui s'accroche sur un hook permet de rediriger sur différents controlleurs.

(situés du coup dans /modules/monmodule/controllers/front/moncontrolleur.php)

 

et chaque controlleur est une classe qui étend ModuleFrontController

 

Jusque la tout va bien seulement lorsque je récupère la liste des produits et que je veux l'afficher via smarty :

 

 $res = Product::getProducts(Configuration::get('PS_LANG_DEFAULT'),0,1000000, 'id_product', 'ASC');
 //d($res);
$this->context->smarty->assign("products", $res);
$this->setTemplate('resultats.tpl');

 

et j'affiche dans mon tpl comme ça :

 

{l s='Products'}

{if $products}
{include file="$tpl_dir/product-list.tpl" products=$products}
{else}

{l s='No products.'}
{/if}

 

Et bien la tout s'affiche normalement mais certaines fonctions échouent lamentablement, en fait c'est toutes celles qui utilisent $link ou encore $product.link qui est vide...

 

<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img class="product_image" src="{$link->getImageLink($product.link_rewrite, $product.id_image, (isset($image_shape) && $image_shape == 'rect_img') ? 'rect_default' : 'home_default')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />
									{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}
								</a>

 

Des idées pour faire marcher tout ça ?

Edited by francoisreme (see edit history)
Link to comment
Share on other sites

Salut à tous.

 

J'ai finalement trouvé la solution tout seul a force de creuser, c'est pas encore parfait mais c'est juste qu'il faut récupérer les produits et tous les attributs avec et c'est loin d'être évident du coup j'ai fait des requètes de bourrin et ça ressemble à ça :

 

$id_lang = $this->context->language->id;
   $sql = new DbQuery();
 $sql->select(
  'p.*, product_shop.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
  pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image`, il.`legend`, m.`name` AS manufacturer_name,
  DATEDIFF(
   product_shop.`date_add`,
   DATE_SUB(
 NOW(),
 INTERVAL 1000 DAY
   )
  ) > 0 AS new'
 );
 $sql->from('product', 'p');
 $sql->join(Shop::addSqlAssociation('product', 'p'));
 $sql->leftJoin('product_lang', 'pl', '
  p.`id_product` = pl.`id_product`
  AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl')
 );
 $sql->leftJoin('image', 'i', 'i.`id_product` = p.`id_product`');
 $sql->join(Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1'));
 $sql->leftJoin('image_lang', 'il', 'i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang);
 $sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');
 $sql->where('product_shop.`active` = 1');
 $sql->where('(image_shop.id_image IS NOT NULL OR i.id_image IS NULL) OR (image_shop.id_image IS NULL AND i.cover=1)');
 $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
 $products_ids = array();
 foreach ($result as $row)
  $products_ids[] = $row['id_product'];
 Product::cacheFrontFeatures($products_ids, $id_lang);
 $allproducts = Product::getProductsProperties((int)$id_lang, $result);

$this->context->smarty->assign('products',$allproducts);

 

et ce code est dans le controlleur

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