Tutoriel override Prestashop partie 2 : surcharge du controller ManufactureController

Prestashop 1.4Comme 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.

Tutoriel override Prestashop partie 3 : Surcharge de la classe Link pour modifier l’URL rewriting des manufacturers

Vous pouvez répondre, ou faire un trackback depuis votre propre site web.

Donner votre avis