Jump to content
prosilver

[Résolu] Supprimer la catégorie de l'url rewriting ET id product en fin d'url ?

Recommended Posts

Bonsoir,

J'ai vu un post pour supprimer la catégorie de l'url de cette manière :
cela se passe dans le fichier Link.php à la ligne 41 et 44 du 'getProductLink'

public function getProductLink($id_product, $alias = NULL, $category = NULL, $ean13 = NULL, $id_lang = NULL)
   {
       if (!isset($this->allow)) $this->allow = 0;
       if (is_object($id_product))
           return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink(intval($id_lang)).(($id_product->category != 'home' AND !empty($id_product->category)) ? $id_product->category.'/' : '').intval($id_product->id).'-'.$id_product->link_rewrite.($id_product->ean13 ? '-'.$id_product->ean13 : '').'.html') :
           (_PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product->id));
       elseif ($alias)
           return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink(intval($id_lang)).(($category AND $category != 'home') ? ($category.'/') : '').intval($id_product).'-'.$alias.($ean13 ? '-'.$ean13 : '').'.html') :
           (_PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product));
       else
           return _PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product);
   }


Suppression des catégories lignes 41:

.(($id_product->category != 'home' AND !empty($id_product->category)) ? $id_product->category.'/' : '')


et 44:

.(($category AND $category != 'home') ? ($category.'/') : '')


Je retrouve donc ceci:

public function getProductLink($id_product, $alias = NULL, $category = NULL, $ean13 = NULL, $id_lang = NULL)
   {
       if (!isset($this->allow)) $this->allow = 0;
       if (is_object($id_product))
           return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink(intval($id_lang)).intval($id_product->id).'-'.$id_product->link_rewrite.($id_product->ean13 ? '-'.$id_product->ean13 : '').'.html') :
           (_PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product->id));
       elseif ($alias)
           return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink(intval($id_lang)).intval($id_product).'-'.$alias.($ean13 ? '-'.$ean13 : '').'.html') :
           (_PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product));
       else
           return _PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product);
   }


L'url est maintenant de cette forme:


Je voudrai l'ID du produit à la fin: modif ligne 44
return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink(intval($id_lang)).$alias.'-'.intval($id_product).($ean13 ? '-'.$ean13 : '').'.html') :


L'url est maintenant:


Pile-poil sauf que je me retrouve avec une belle page
'La page que vous avez demandée n'existe plus'

Arffff, c'était bien parti :-S
Une petite idée ?

Share this post


Link to post
Share on other sites

Bonjour,

il faut mettre à jour le .htaccess

Remplacer la ligne :

RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [QSA,L,E]



Par :

RewriteRule ^([a-zA-Z0-9-]*)\-([0-9]+)\.html(.*)$ /product.php?id_product=$1$3 [QSA,L,E]



Je n'ai pas testé mais il me semble que cela doit corrigé ton soucis de "page not found" car tu intervertis les deux parties de l'url (product_id et product_name)

Share this post


Link to post
Share on other sites

Bonjour juliens,

c'est presque bon mais là, du coup c'est:
Il y a 1 erreur :
1. produit introuvable

Ne faut-il pas changer également les lignes 11 et/ou 12 du .htaccess ?

RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang;=$1$5 [L,E]

RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang;=$1$4 [L,E]


Merci...

Share this post


Link to post
Share on other sites

Les lignes du htaccess que tu évoques sont utilisées quand il y a la langue dans l'url, ce qui n'est pas le cas dans ton exemple.

Essaie en utilisant

RewriteRule ^([a-zA-Z0-9-]*)\-([0-9]+)\.html(.*)$ /product.php?id_product=$2$3 [QSA,L,E] 



Je me suis trompé dans le numéro des sous-chaines de l'expression régulière posté initialement

Dans la nouvelle règle de rewrite :
$1 = le nom de l'article avec les tirets
$2 = le numéro de l'article
$3 = les paramètres d'url additionnels

Share this post


Link to post
Share on other sites

C'est le même principe pour les autres rewrite rules.
Dans une expression régulière les sous-chaines sont entre parenthèses et chaque sous-chaine peut être récupérée avec son numéro $n qui commence à $1
Content d'avoir pu t'aider.
A+

Share this post


Link to post
Share on other sites

Bonsoir,

Est-il possible de supprimer les id dans la rééecriture d'URL ?
De mon côté, je l'ai fais pour la partie CMS (modification classe Link.php et htaccess) mais ensuite je me retrouve avec la page catégorie qui s'affiche au lieu de la page CMS...
Un idée ?

Merci de votre aide.

Share this post


Link to post
Share on other sites

Les IDs sont utilisés pour retrouver l'article en question. A moins de développer un bigniou pour le retrouver (et c'est pas si simple) ce n'est pas possible.

Share this post


Link to post
Share on other sites

Bonjour,

Sujet qui traite exactement de ce que j'étais en train de tenter de mettre en place, ça tombe bien...
Je bloque sur la modification du htaccess sur PS 1.4.2.5

J'ai ça d'origine, et je n'arrive pas à m'en sortir malgré vos bons conseils...

RewriteRule ^([0-9]+)\-[a-zA-Z0-9-]*\.html /product.php?id_product=$1 [QSA,L]
RewriteRule ^[a-zA-Z0-9-]*/([0-9]+)\-[a-zA-Z0-9-]*\.html /product.php?id_product=$1 [QSA,L]




Merci à vous !

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×