Obtenir facilement les url rewrite de vos page cms sur prestashop 1.4

Voici une astuce qui devrait vous faciliter la vie si vous créez des liens cms dans vos templates avec Prestashop 1.4.

Pour créer l’url d’une page cms sous prestashop 1.4 on a deux solutions.

Sans rewrite (pas super pour le référencement)


{$link->getCMSLink(8)}

Avec rewrite


{$link->getCMSLink($cmspages.id_cms, $cmspages.link_rewrite)|escape:'htmlall':'UTF-8'}"

Mais le problème avec cette seconde méthode c’est qu’il faut que vous ayez dans un premier temps récupéré votre objet « cms » via votre controller pour le passer ensuite dans votre template.
Le but étant de faire un simple lien, je trouve ça très pénible de devoir modifier plein de fichiers. D’autant plus, qu’à chaque nouveau lien il faudra le refaire ainsi que pour chaque nouveau controller.

Voici donc un override qui va vous simplifier la vie.
Créez le fichier « \override\classes\Link.php » et ajoutez-y le code suivant:


public function getCMSLink($cms, $alias = null, $ssl = false, $id_lang = NULL, $search_rewrite = NULL)
	{
		$base = (($ssl AND Configuration::get('PS_SSL_ENABLED')) ? Tools::getShopDomainSsl(true) : Tools::getShopDomain(true));
	
		if($search_rewrite == true && !is_object($cms)) {
			global $cookie;
			$cms = new CMS($cms,$cookie->id_lang);
		}
		if (is_object($cms))
		{
			return ($this->allow == 1) ?
			($base.__PS_BASE_URI__.$this->getLangLink((int)($id_lang)).'content/'.(int)($cms->id).'-'.$cms->link_rewrite) :
			($base.__PS_BASE_URI__.'cms.php?id_cms='.(int)($cms->id));
		}
	
		if ($alias)
			return ($this->allow == 1) ? ($base.__PS_BASE_URI__.$this->getLangLink((int)($id_lang)).'content/'.(int)($cms).'-'.$alias) :
			($base.__PS_BASE_URI__.'cms.php?id_cms='.(int)($cms));
		return $base.__PS_BASE_URI__.'cms.php?id_cms='.(int)($cms);
	}

Ensuite lorsque vous désirez récupérer l’url ré-érite (rewrite) d’une page cms il vous suffit de faire ceci dans votre template:


{$link->getCMSLink(8, null, false, null, true)}

Désormais, lorsque vous mettez le dernier argument de la fonction getCMSLink à true vous demandez à la class link de vous retourner l’url ré-écrite de la page CMS dont vous avez fourni l’id dans le premier argument (ici 8).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *