Manucyan Posted March 11, 2020 Share Posted March 11, 2020 (edited) Bonjour, Je voudrait mettre un dièse dans le nom de mon produit car c'est pour un magasin de musique et des produits ont pour nom par exemple "Symphonie n° 10 en fa # majeur", mais cela est impossible à la base parce ce que les caractères ^<> ;=#{} sont interdits. J'ai essayé l'échappement \# mais rien n'y fait. En plaçant le signe ♯ qui est différent de # (♯#) ça fonctionne bien, mais je pense que les utilisateurs vont rechercher des # (NB : le # qu'on écrit via le clavier est un "croisillon", c'est un signe plutôt anglais qui peut signifier "numéro", et il n'est pas égal au dièse musical, cependant personne ne sais tout ça). Sauriez-vous s'il existe un moyen de contourner ça ? Merci. Edited March 13, 2020 by Manucyan (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted March 11, 2020 Share Posted March 11, 2020 ce n'est pas possible nativement car le # est utilisé pour les ancres en html et le nom du produit est utilisé pour l'url rewrite Deux solutions (tout dépend du nombre de produits) concernés: - Modifier le nom directement dans la base de données (ps_product_lang) https://shop.devcustom.net/fr/t-shirts/1-symphonie-n-10-en-fa-majeur-123456789654.html Inconvénient, vous ne pourrez plus éditer la page produit en BO (enfin vous aurez le message d'erreur à chaque fois) - Supprimer le caractère interdit dans /classes/Validate.php en enlevant le #: public static function isCatalogName($name) { return preg_match(Tools::cleanNonUnicodeSupport('/^[^<>;={}]*$/u'), $name); } Et modifier la fonction str2url ($str) dans /classes/Tools.php en ajoutant cette ligne avant $array_str[$str] = $return_str; return $return_str; Ce qui donne $return_str = str_replace('#', '', $return_str); $array_str[$str] = $return_str; return $return_str; Après, je ne sais pas ce que vont en penser Google et consorts avec leurs outils de parsing lors du crawl de ces pages. Link to comment Share on other sites More sharing options...
Manucyan Posted March 12, 2020 Author Share Posted March 12, 2020 Bonjour, Merci pour cette réponse réactive et détaillée ! Je met le sujet en "résolu". Link to comment Share on other sites More sharing options...
doekia Posted March 12, 2020 Share Posted March 12, 2020 Il y a 14 heures, Eolia a dit : ce n'est pas possible nativement car le # est utilisé pour les ancres en html et le nom du produit est utilisé pour l'url rewrite Deux solutions (tout dépend du nombre de produits) concernés: - Modifier le nom directement dans la base de données (ps_product_lang) https://shop.devcustom.net/fr/t-shirts/1-symphonie-n-10-en-fa-majeur-123456789654.html Inconvénient, vous ne pourrez plus éditer la page produit en BO (enfin vous aurez le message d'erreur à chaque fois) - Supprimer le caractère interdit dans /classes/Validate.php en enlevant le #: public static function isCatalogName($name) { return preg_match(Tools::cleanNonUnicodeSupport('/^[^<>;={}]*$/u'), $name); } Et modifier la fonction str2url ($str) dans /classes/Tools.php en ajoutant cette ligne avant $array_str[$str] = $return_str; return $return_str; Ce qui donne $return_str = str_replace('#', '', $return_str); $array_str[$str] = $return_str; return $return_str; Après, je ne sais pas ce que vont en penser Google et consorts avec leurs outils de parsing lors du crawl de ces pages. J'ai peur que le résultat soit complètement raté. Je m'explique: Le # est l'ancre, il n'est JAMAIS envoyé par le navigateur. (norme HTTP) Imaginons le produit 17 L'url demandé devient donc https://example.com/17-mon-produit-#-xxx.html, Le navigateur envoi donc https://example.com/17-mon-produit- Le dispatcher considère l'url non canonique et provoque une redirection vers https://example.com/17-mon-produit-#-xxx.html Boucle infini! Link to comment Share on other sites More sharing options...
Eolia Posted March 12, 2020 Share Posted March 12, 2020 Ben non vu que je patche Tools::str2url(), il n'y aura pas de # dans l'url rewrite Link to comment Share on other sites More sharing options...
doekia Posted March 12, 2020 Share Posted March 12, 2020 (edited) oui mais le navigateur ne l'envoi pas le # et ce qu'il y a derrière donc pour le dispatcher ce n'est pas l'url canonique Autant pour moi tu ne change que le nom du produit... mes confuses. /me Slap myself with a large trout Edited March 12, 2020 by doekia (see edit history) 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