Url canonique, génération automatique sans utilisation en lien dans listing

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #289647

-- HikaShop version -- : 3.3.0
-- Joomla version -- : 3.8.5
-- PHP version -- : 7.0.27
-- Browser(s) name and version -- : Firefox - quantum - 58.0.2 (64 bits)

Bonjour,

Est-il possible d'automatisé la génération des urls canoniques mais sans utiliser les urls canonique en lien de produit dans les listing ?

Dans la config, si j'utilise l'option "Utiliser les URLs canoniques si spécifiées" ou "Utiliser les URLs canoniques et les générer si manquantes", l'url canonique est aussi utilisé en lien de produit, ce que je ne souhaite pas.

Donnée pour exemple :

Produit :
* 1 = url canonique : /nos-produit/produit/1

Categorie :
* a
* b

Ce que je souhaite :

Selon le contexte, accéder par listing au page :
/alias-menu/a/produit/1
/alias-autre-menu/b/produit/1

Avoir comme url canonique sur ces deux pages : /nos-produit/produit/1
et que l'url canonique soit générer automatiquement !

Merci

Attachments:
Last edit: 6 years 8 months ago by PortobelloDigital. Reason: closed

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 8 months ago #289651

Bonjour,

Oui, c'est possible. Pour cela il faut créer des actions de masse dans le menu System>Mass actions.
Une action de masse par catégorie, avec un filtre sur la catégorie et une action "update the values" sur la colonne "product_canonical" en mode operation avec quelque chose du genre: concat('/nos-produit/produit/', product.product_id)

Please Log in or Create an account to join the conversation.

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #289697

Bonjour,

Merci pour votre retour, cela fonctionne, [pour info] j'ai cependant modifié comme suit :

- Données : Produit
- Filtres : Aucun
- Actions : Mettre à jour les valeurs > product_canonical = OPERATION > concat('/nos-produit/produit/', product_id)

J'ai deux autres questions :

1) Comment faire pour ajouter apres le "product_id" l'alias avec le nom du produit contenant des "-" au lieux de tiret du bas ou d'espace ?

- "product_alias" donne "exemple produit"
- "product_code" donne "exemple_produit"

Ce que je souhaite : "exemple-produit"

2) Existe-t-il une documentation sur les "valeurs" d'utilisation dans le champs suivant "opération" (comme concat...) ?

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 8 months ago #289714

Bonjour,

1. L'alias de votre produit n'est pas correct. Un alias n'est pas sensé contenir des espaces.
Il faudrait corriger vos alias.
Mais vous pouvez automatiser cela avec la fonction REPLACE

2. dev.mysql.com/doc/refman/5.7/en/string-functions.html

The following user(s) said Thank You: PortobelloDigital

Please Log in or Create an account to join the conversation.

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #289774

Bonjour,

Je vous remercie, tout fonctionne parfaitement, cependant j'aimerais savoir pourquoi lorsque l'on sauvegarde un produit, le champ "ALIAS" de l'onglet "SEO" n'est pas "nettoyé" (remplacement automatique des espaces par tirets, suppression des accents) ?
Il semble compliqué d'automatisé par action en masse la suppression des accents (donc via mysql).

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 8 months ago #289777

Bonjour,

C'est parce que des fois vous voulez autoriser tous les caractères.
Si vous avez l'option "" de la configuration Joomla activée, alors les alias de produits peuvent contenir n'importe quels caractères. C'est très utile pour les langues utilisant dans caractères autres que le latin comme le japonais, le chinois, le russe, etc.
Et HikaShop ne peut faire cette conversion des alias pour tous les produits lorsque vous désactivez cette option mais doit autorisé tous les caractères lorsque l'option est activée.
De plus, il est très compliqué de faire ce genre de remplacement car il y a beaucoup de caractères à convertir, cela varie d'une langue à l'autre, etc.
Donc nous avons préféré laisser le champs sans "nettoyage".

Please Log in or Create an account to join the conversation.

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #289896

Bonjour,

Merci pour votre réponse, effectivement, cela prend tout son sens, par contre vous n'avez pas mentionné l'option de la configuration Joomla dont - il s'agit ? (serais-ce alias unicode ?)

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 8 months ago #289900

Oui, désolé. Problème de copier/coller :)
C'est en effet cette option.

Please Log in or Create an account to join the conversation.

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #289961

Donc pour résumer :

Si je donne pour valeur "Non" au champ "Alias Unicode" de la configuration Joomla, lorsque j'enregistre un produit dans hikashop, l'alias de celui-ci sera "nettoyé" ?
Sinon, est-il possible de venir "hook" un "event" hikashop à la sauvegarde du produit via un plugin joomla ?

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 8 months ago #289967

Bonjour,

Non, il n'y a pas de nettoyage.
Et oui, vous pouvez "hook" un plugin à la sauvegarde en utilisant les triggers onAfterProductUpdate et onAfterProductCreate
D'ailleurs le système d'actions de masse est lui aussi lié à ces triggers. Donc si vous avez utilisé des actions de masse pour nettoyer le champs, vous pouvez leur ajouter un trigger "après l'ajout/la création d'un produit" et les actions de masse pourront nettoyer le champs de la même façon, sans avoir à développer un plugin.
www.hikashop.com/support/documentation/6...ntation.html#product

The following user(s) said Thank You: PortobelloDigital

Please Log in or Create an account to join the conversation.

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #290176

Bonjour,

J'ai effectué un test, il semblerais que cela ne soit pas aussi simple que ce que je pensais,

Plugin : group > hikashop

function onAfterProductCreate(&$element)
function onAfterProductUpdate(&$element)

$productClass = hikashop_get('class.product');

$element->product_alias = JFilterOutput::stringURLSafe($element->product_alias);

$productClass->save($element);

Lors de la création "onAfterProductCreate", le produit est créé mais semble ne pas être visible dans la liste des produits (à première vu, la catégorie ne serais pas enregistré)

Lors de la modification "onAfterProductUpdate", le serveur tombe en erreur 500...

Auriez-vous une idée ?

Please Log in or Create an account to join the conversation.

  • Posts: 82868
  • Thank you received: 13376
  • MODERATOR
6 years 8 months ago #290178

Bonjour,

C'est normal que vous ayez une erreur 500...
Vous appelez save dans onAfterProductUpdate. Or, save appelle lui-même onAfterProductUpdate. Donc cela crée une boucle infinie.

Dans ce cas, passez par onBeforeProductUpdate et changez simplement la valeur dans $element sans faire de save.
HikaShop fera le save pour vous dans ce cas.

The following user(s) said Thank You: PortobelloDigital

Please Log in or Create an account to join the conversation.

  • Posts: 32
  • Thank you received: 2
6 years 8 months ago #290247

Effectivement, ceci était évident... merci pour votre aide

Please Log in or Create an account to join the conversation.

Time to create page: 0.061 seconds
Powered by Kunena Forum