PrestaShop Forum

The best place in the world to ask questions about PrestaShop and get advice from our passionate community!

PrestaShop Forum

Jump to content

 

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

11 replies to this topic
#1
prosilver

    PrestaShop Apprentice

  • Members
  • PipPip
  • 76 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:

Quote


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:

Quote


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 ?
PrestaShop 1.3.7 - Hébergé par Nuxit -

#2
juliens

    PrestaShop Apprentice

  • Members
  • PipPip
  • 232 posts
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)

#3
prosilver

    PrestaShop Apprentice

  • Members
  • PipPip
  • 76 posts
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...
PrestaShop 1.3.7 - Hébergé par Nuxit -

#4
juliens

    PrestaShop Apprentice

  • Members
  • PipPip
  • 232 posts
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

#5
prosilver

    PrestaShop Apprentice

  • Members
  • PipPip
  • 76 posts
Re,
c'est bon, c'est bien cela. Merci juliens :)
Je suppose que les catégories etc.. c'est la même manip ?
PrestaShop 1.3.7 - Hébergé par Nuxit -

#6
prosilver

    PrestaShop Apprentice

  • Members
  • PipPip
  • 76 posts
Allez, un p'tit P pour product devant l'id du produit,
un p'tit C pour category devant l'id de la catégorie
et ça me va bien,
Merci encore.......... :-)
PrestaShop 1.3.7 - Hébergé par Nuxit -

#7
juliens

    PrestaShop Apprentice

  • Members
  • PipPip
  • 232 posts
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+

#8
manucc

    PrestaShop Newbie

  • Members
  • Pip
  • 3 posts
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.

#9
cobolian

    PrestaShop Apprentice

  • Members
  • PipPip
  • 186 posts
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.

#10
doodu94

    PrestaShop Addict

  • Members
  • PipPipPip
  • 742 posts
La suppression de ID categorie et ID Produit dans l'url améliore vraiment le référencement ?
www.moonhosting.fr : l'hébergement web avec cPanel / LiteSpeed / en France et performant
PS 1.4.9.0 et 1.5.1.

#11
Dragonatei

    PrestaShop Apprentice

  • Members
  • PipPip
  • 339 posts
Pour moi la réponse est oui !

#12
Yolaix

    PrestaShop Newbie

  • Members
  • Pip
  • 4 posts
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 !
Prestashop v1.4.2.5