Jump to content

[Résolu]Comment mettre un # dans le nom du produit ?


Manucyan

Recommended Posts

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 by Manucyan (see edit history)
Link to comment
Share on other sites

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...