Cirice Posted May 31, 2023 Share Posted May 31, 2023 (edited) Bonjour, Je migre un iste en 1.6 sur un 1.7.8. Il faut bien sûr que les url des produits correspondent aux anciennes. Dans cette version 1.7.8, il n'est toujours pas possible de supprimer {id_attribute} de l'url. J'ai donc trouve un override de Link.php fourni par Team-ever. Le souci est que quand le mode debug est activé, il m'indique une erreur : Undefined variable:anchor. La versionde PHP : 7.4. En cherchant sur le Net j'ai vu qu'il fallait mettre le paramètre $addAnchor à 'true' mais cela ne résout pas le problème. Quelqu'un aurait une idée ? Voici le code de l'override : public function getProductLink( $product, $alias = null, $category = null, $ean13 = null, $idLang = null, $idShop = null, $ipa = 0, $force_routes = false, $relativeProtocol = false, $addAnchor = true, $extraParams = array() ) { $dispatcher = Dispatcher::getInstance(); if (!$idLang) { $idLang = Context::getContext()->language->id; } $url = $this->getBaseLink($idShop, null, $relativeProtocol) . $this->getLangLink($idLang, null, $idShop); // Set available keywords $params = array(); if (!is_object($product)) { if (is_array($product) && isset($product['id_product'])) { $params['id'] = $product['id_product']; } elseif ((int) $product) { $params['id'] = $product; } else { throw new PrestaShopException('Invalid product vars'); } } else { $params['id'] = $product->id; } $params['id_product_attribute'] = ''; if (!$alias) { $product = $this->getProductObject($product, $idLang, $idShop); } $params['rewrite'] = (!$alias) ? $product->getFieldByLang('link_rewrite') : $alias; if (!$ean13) { $product = $this->getProductObject($product, $idLang, $idShop); } $params['ean13'] = (!$ean13) ? $product->ean13 : $ean13; if ($dispatcher->hasKeyword('product_rule', $idLang, 'meta_keywords', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['meta_keywords'] = Tools::str2url($product->getFieldByLang('meta_keywords')); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'meta_title', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['meta_title'] = Tools::str2url($product->getFieldByLang('meta_title')); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'manufacturer', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['manufacturer'] = Tools::str2url($product->isFullyLoaded ? $product->manufacturer_name : Manufacturer::getNameById($product->id_manufacturer)); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'supplier', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['supplier'] = Tools::str2url($product->isFullyLoaded ? $product->supplier_name : Supplier::getNameById($product->id_supplier)); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'price', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['price'] = $product->isFullyLoaded ? $product->price : Product::getPriceStatic($product->id, false, null, 6, null, false, true, 1, false, null, null, null, $product->specificPrice); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'tags', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['tags'] = Tools::str2url($product->getTags($idLang)); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'category', $idShop)) { if (!$category) { $product = $this->getProductObject($product, $idLang, $idShop); } $params['category'] = (!$category) ? $product->category : $category; } if ($dispatcher->hasKeyword('product_rule', $idLang, 'reference', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['reference'] = Tools::str2url($product->reference); } if ($dispatcher->hasKeyword('product_rule', $idLang, 'categories', $idShop)) { $product = $this->getProductObject($product, $idLang, $idShop); $params['category'] = (!$category) ? $product->category : $category; $cats = array(); foreach ($product->getParentCategories($idLang) as $cat) { if (!in_array($cat['id_category'], Link::$category_disable_rewrite)) { //remove root and home category from the URL $cats[] = $cat['link_rewrite']; } } $params['categories'] = implode('/', $cats); } if ($ipa) { $product = $this->getProductObject($product, $idLang, $idShop); } if ((bool)Configuration::get('EVERSEO_RMV_ANCHOR')) { $anchor = ''; } return $url . $dispatcher->createUrl('product_rule', $idLang, array_merge($params, $extraParams), $force_routes, $anchor, $idShop); } Merci d'avance ! Edited May 31, 2023 by Cirice (see edit history) Link to comment Share on other sites More sharing options...
idnovate.com Posted May 31, 2023 Share Posted May 31, 2023 Le problème est que vous définissez la variable $anchor dans ce IF : if ((bool)Configuration::get('EVERSEO_RMV_ANCHOR')) { $anchor = ''; } Si elle n'entre pas dans le IF, cette variable n'existe pas. Link to comment Share on other sites More sharing options...
Cirice Posted May 31, 2023 Author Share Posted May 31, 2023 Merci pour cette réponse ultra-rapide ! Je comprends ce que vous voulez dire. Mais alors, comment corriger cela ? je ne sais pas à quoi correspond 'anchor' Link to comment Share on other sites More sharing options...
idnovate.com Posted May 31, 2023 Share Posted May 31, 2023 Pour l'instant, essayez de définir la variable en dehors de l'IF et vérifiez le résultat. Link to comment Share on other sites More sharing options...
Cirice Posted May 31, 2023 Author Share Posted May 31, 2023 heu ... pardon pour cette bête question, mais je fais comment ? juste retirer le if devant ((bool)... ? Link to comment Share on other sites More sharing options...
idnovate.com Posted May 31, 2023 Share Posted May 31, 2023 //if ((bool)Configuration::get('EVERSEO_RMV_ANCHOR')) { $anchor = ''; //} 1 Link to comment Share on other sites More sharing options...
Cirice Posted May 31, 2023 Author Share Posted May 31, 2023 par contre, est-ce normal qu'il n'y ait pas de {/if} nulle part ? Link to comment Share on other sites More sharing options...
idnovate.com Posted May 31, 2023 Share Posted May 31, 2023 Bien sûr, en PHP, le IF est fermé par "}". 1 Link to comment Share on other sites More sharing options...
Mediacom87 Posted May 31, 2023 Share Posted May 31, 2023 Bonjour, cette solution est radicale et pénalise le fonctionnement de PrestaShop en version 1.7. Voici une solution simple pour conserver le fonctionnement de PrestaShop https://www.mediacom87.fr/seo-et-url-de-vos-produits-sur-prestashop-17/ 1 Link to comment Share on other sites More sharing options...
Cirice Posted May 31, 2023 Author Share Posted May 31, 2023 1 hour ago, idnovate.com said: //if ((bool)Configuration::get('EVERSEO_RMV_ANCHOR')) { $anchor = ''; //} Merci ! (en fait j'avais essayé /// mais en englobant la dernière parenthèse, ce qui provoquait une erreur ... suis pas au top avec le PHP !!) Bon, j'ai essayé. L'url du produit est correcte mais il y a maintenant un warning : Warning: Declaration of Link::getProductLink($product, $alias = NULL, $category = NULL, $ean13 = NULL, $idLang = NULL, $idShop = NULL, $ipa = NULL, $force_routes = false, $relativeProtocol = false, $addAnchor = false, $extraParams = Array) should be compatible with LinkCore::getProductLink($product, $alias = NULL, $category = NULL, $ean13 = NULL, $idLang = NULL, $idShop = NULL, $idProductAttribute = NULL, $force_routes = false, $relativeProtocol = false, $withIdInAnchor = false, $extraParams = Array, bool $addAnchor = true) Et la home est vide à part le header et le slider, cela ne doit pas plaire au thème panda. Je vais essayer la méthode mediacom Link to comment Share on other sites More sharing options...
Cirice Posted May 31, 2023 Author Share Posted May 31, 2023 1 hour ago, Mediacom87 said: Bonjour, cette solution est radicale et pénalise le fonctionnement de PrestaShop en version 1.7. Voici une solution simple pour conserver le fonctionnement de PrestaShop https://www.mediacom87.fr/seo-et-url-de-vos-produits-sur-prestashop-17/ Merci Mediacom, J'ai donc fait la manip (uniquement 2 instances à remplacer) mais cela crée une erreur : line 66 "<a href="{product.canonical_url}" title="{$product.name}" class="product_img_link {if $is_lazy && !$tm_stop_lazy} is_lazy {/if} {if $sttheme.pro_img_hover_scale} pro_img_hover_scale {/if}" {if isset($for_w) && $for_w == 'category' && $sttheme.infinite_blank} target="_blank" {/if}>" - Unexpected ".", expected one of: "}" Si je comprends bien il attend une parenthèse fermante à la place d'un point, mais je ne vois pas où et je n'ai rien modifié d'autre. Link to comment Share on other sites More sharing options...
Mediacom87 Posted May 31, 2023 Share Posted May 31, 2023 c'est {$product.canonical_url} et non {product.canonical_url} 1 Link to comment Share on other sites More sharing options...
Cirice Posted May 31, 2023 Author Share Posted May 31, 2023 raaa ! l'oeil du maître 😉 j'avais beau relire, je n'ai pas percuté sur l'absence du $ ! Merci. Plus d'erreur maintenant. Sauf que quand on sélectionne une déclinaison, l'id_attribute se remet dans l'url. Bon, après, ce n'est peut-être pas grave dans le sens que l'url indexée amène bien sur la page du produit ? il ne devrait donc pas y avoir de perte de référencement. Merci encore ! je n'avais pas trouvé ce tuto en cherchant une solution. Link to comment Share on other sites More sharing options...
Mediacom87 Posted May 31, 2023 Share Posted May 31, 2023 il y a 59 minutes, Cirice a dit : raaa ! l'oeil du maître 😉 j'avais beau relire, je n'ai pas percuté sur l'absence du $ ! Merci. Plus d'erreur maintenant. Sauf que quand on sélectionne une déclinaison, l'id_attribute se remet dans l'url. Bon, après, ce n'est peut-être pas grave dans le sens que l'url indexée amène bien sur la page du produit ? il ne devrait donc pas y avoir de perte de référencement. Merci encore ! je n'avais pas trouvé ce tuto en cherchant une solution. Il est important qu'une URL spécifique pour chaque déclinaison existe afin de pouvoir partager la déclinaison exacte comme la diffuser sur les market place. Link to comment Share on other sites More sharing options...
Cirice Posted June 3, 2023 Author Share Posted June 3, 2023 Oui, mais si déjà, à l'url s'ajoute le n° de l'attribut ? par exemple mon_domaine/1124-monproduit.html:#60-rouge ? Car le souci est que l'est url sont de cette forme actuellement. Si je laisse l'id de la déclinaison s'ajouter après l'id du produit, le site va perdre tout son référencement. A moins de faire des redirections pour un millier de produits ?? Link to comment Share on other sites More sharing options...
Mediacom87 Posted June 3, 2023 Share Posted June 3, 2023 il y a 4 minutes, Cirice a dit : le site va perdre tout son référencement Je ne crois pas, l'URL canonique est là pour ça. Link to comment Share on other sites More sharing options...
idnovate.com Posted June 5, 2023 Share Posted June 5, 2023 (edited) On 5/31/2023 at 2:30 PM, Cirice said: Merci ! (en fait j'avais essayé /// mais en englobant la dernière parenthèse, ce qui provoquait une erreur ... suis pas au top avec le PHP !!) Bon, j'ai essayé. L'url du produit est correcte mais il y a maintenant un warning : Warning: Declaration of Link::getProductLink($product, $alias = NULL, $category = NULL, $ean13 = NULL, $idLang = NULL, $idShop = NULL, $ipa = NULL, $force_routes = false, $relativeProtocol = false, $addAnchor = false, $extraParams = Array) should be compatible with LinkCore::getProductLink($product, $alias = NULL, $category = NULL, $ean13 = NULL, $idLang = NULL, $idShop = NULL, $idProductAttribute = NULL, $force_routes = false, $relativeProtocol = false, $withIdInAnchor = false, $extraParams = Array, bool $addAnchor = true) Et la home est vide à part le header et le slider, cela ne doit pas plaire au thème panda. Je vais essayer la méthode mediacom Cette erreur apparaît parce que la fonction getProductLink de la classe Link a été surchargée, et que la signature est différente de celle de la fonction originale du Core. Edited June 5, 2023 by idnovate.com (see edit history) Link to comment Share on other sites More sharing options...
Preskaribou Posted November 24 Share Posted November 24 en tout cas moi je le mets dans product.tpl : www/themes/PRS171_07/templates/catalog {block name='head_seo' prepend} <link rel="canonical" href="{$product.url}"> {/block} et ca fait planter le site... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now