Comme décrit en préambule, nous souhaitons qu’une page Manufacturer redirige sur la première page CMS qui lui est rattachée.
Il faudra donc également prévoir d’accéder à la page Manufacturer « classique » par une nouvelle URL. (nous verrons cela plus tard dans la partie traitant de l’URL rewriting de Prestashop).
Voyons alors le code du ManufacturerController (sans la partie gérant l’url):
<?php class ManufacturerController extends ManufacturerControllerCore { public $php_self = 'manufacturer.php'; protected $manufacturer; protected $cms; public function process() { global $link; if (Validate::isLoadedObject($this->manufacturer) AND $this->manufacturer->active) { $first_page = CMS::getFirstCMSPage((int)(self::$cookie->id_lang), (int)($this->manufacturer->id) ); self::$smarty->assign(array( 'first_cms_page' => $first_page )); if(in_array(Tools::getValue("param"), array("products"))) { $nbProducts = $this->manufacturer->getProducts($this->manufacturer->id, NULL, NULL, NULL, $this->orderBy, $this->orderWay, true); $this->pagination($nbProducts); self::$smarty->assign(array( 'nb_products' => $nbProducts, 'products' => $this->manufacturer->getProducts($this->manufacturer->id, (int)self::$cookie->id_lang, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay), 'manufacturer' => $this->manufacturer, 'path' => ($this->manufacturer->active ? Tools::safeOutput($this->manufacturer->name) : ''), )); } else { self::$smarty->assign(array( 'manufacturer' => $this->manufacturer, )); $this->cms = new CMS($first_page[0]["id_cms"], self::$cookie->id_lang); Tools::redirect($link->getCMSLink($this->cms),""); } } elseif (!Tools::getValue('id_manufacturer')) { if (Configuration::get('PS_DISPLAY_SUPPLIERS')) { $result = Manufacturer::getManufacturers(true, (int)self::$cookie->id_lang, true); $nbProducts = count($result); $this->pagination($nbProducts); $manufacturers = Manufacturer::getManufacturers(true, (int)self::$cookie->id_lang, true, $this->p, $this->n); foreach ($manufacturers AS &$row) { $man = new Manufacturer($row['id_manufacturer']); $row['title'] = $man->title[(int)self::$cookie->id_lang]; $row['image'] = (!file_exists(_PS_MANU_IMG_DIR_.'/'.$row['id_manufacturer'].'-medium.jpg')) ? Language::getIsoById((int)self::$cookie->id_lang).'-default' : $row['id_manufacturer']; } self::$smarty->assign(array( 'pages_nb' => ceil($nbProducts / (int)$this->n), 'nbManufacturers' => $nbProducts, 'mediumSize' => Image::getSize('medium'), 'manufacturers' => $manufacturers, 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), )); } else self::$smarty->assign('nbManufacturers', 0); } } } |
Nous récupérons la première page CMS rattachée à la marque en cours :
$first_page = CMS::getFirstCMSPage((int)(self::$cookie->id_lang), (int)($this->manufacturer->id) ); self::$smarty->assign(array( 'first_cms_page' => $first_page )); |
Pour pouvoir par la suite rediriger sur cette page CMS. Vous noterez que nous avons déclaré une propriété protégée ($this->cms) de la classe afin de stocker l’objet « cms » récupéré au même titre que l’objet « manufacturer »
$this->cms = new CMS($first_page[0]["id_cms"], self::$cookie->id_lang); Tools::redirect($link->getCMSLink($this->cms),""); |
Et voilà, lorsque nous arrivons sur une page Marque, le controller nous redirige bien sur la première page CMS qui lui est rattachée :
Tools::redirect($link->getCMSLink($this->cms),""); |
Voyons à présent comment rediriger vers la page Manufacturer « classique » avec un listing de produits de la marque.