web-dev-qa-db-fra.com

Ajout de SKU aux alias générés dans J2Store

Je suis un peu un noob Joomla donc j'espère que c'est un problème facile.

Nous avons un site Web Joomla 3.8.11 utilisant J2Store 3.3.0, et le client souhaite ajouter les valeurs SKU aux alias de produit. Plus précisément, nous voulons que la procédure de génération d'alias ressemble à

make alias based on title in the usual way;
if (SKU is set):
  append SKU to the alias;
check for duplicates in the usual way;

Nous voulons que tout le reste se comporte de la même manière, nous voulons seulement ajouter une valeur à l'alias lorsqu'il est généré automatiquement. Existe-t-il un moyen simple de procéder?

Ce que j'ai essayé jusqu'à présent:

Je regarde le tutoriel MVC Component et ils sous-classent JModelAdmin puis remplacent la fonction save (). Leur situation a plus d'altérations que la mienne, il est donc difficile de voir exactement ce dont j'ai besoin, et de plus J2Store est basé sur f0f, il utilise donc F0FModel à la place.

J'ai trouvé une classe appelée J2StoreModelOptions qui sous-classe F0FModel dans

./administrator/components/com_j2store/models/options.php

avec une fonction de sauvegarde ($ data) qui pourrait être ce que je dois modifier. Cependant, j'ai ajouté un message de console au corps de la fonction, mais lorsque je clique sur "Enregistrer" sur la page de modification d'un article, il n'est pas enregistré, donc je ne suis peut-être pas au bon endroit. Si quelqu'un connaît un moyen plus simple ou s'il sait que je fais quelque chose de mal, ce serait très utile. (J'ai soumis une demande d'assistance à J2Store mais nous sommes dans des fuseaux horaires différents et je voudrais résoudre ce problème dès que possible, et j'aurai probablement encore besoin d'aide une fois que j'aurai entendu une réponse)

1
William

Non, il n'y a pas de moyen simple pour cela. Au moins, simple signifie beaucoup de choses pour tout le monde ici. Je vais cependant vous donner quelques bonnes indications à ce sujet.

Tout d'abord, J2Store propose des produits simples, des produits variables, des produits configurables, des produits flexibles ... etc. Alors, comment pensez-vous que c'est simple? Ensuite, il y a le composant de contenu qui gère les articles, composant assez complexe, J2Store est un composant différent, également très complexe, avec au moins 10 tables de base de données différentes ou plus.

Si vous souhaitez simplement remplacer le fichier principal du composant de contenu qui crée le champ Alias, vous perdrez ce remplacement lors de la prochaine mise à jour de Joomla. Il vaut mieux ne pas le faire. Ainsi :

1. vous devez créer un plugin de contenu (google: création de plugins de contenu pour Joomla 3) et veuillez également visiter ce lien: https: //docs.joomla.org/J3.x:Creating_a_Plugin_for_Joomla

2. Le champ d'alias d'article est créé dans yourjoomla/administrator/com_content/models/article.php file Autour de line 642. Dans le code (c'est toujours facile à trouver. Eh bien, si quelqu'un sait où chercher, vous pouvez tout gâcher ici, soyez prudent).

3. Le plugin doit fonctionner sur l'événement onContentBeforeSave. Votre fonction doit donc fonctionner sur cet événement. Ou vous pouvez également créer un plugin J2Store et faire quelque chose de similaire si vous souhaitez gérer la création de sku lors de la création d'article ensemble (deux composants différents fonctionnent ici). Il est donc un peu complexe de déterminer à partir de quelle approche vous devrez utiliser. Mais je pense que le plugin de contenu est le meilleur choix pour cela.

4. Vous devez créer une fonction qui obtient le database->j2store products, variants Et ainsi de suite les tableaux, et obtient le Données de produit (comme product_sku) De ces tables, basées sur product_source_id Qui est égal à article_id Et rejoignez la requête pour variant_id Et sku des produits variantes au tableau des variantes, si votre client a ce type de produits (c'est possible).

5. Vous pouvez obtenir la base de données et les tables db avec la fonction $db = JFactory::getDbo(); line et vous pouvez créer des objets de requête pour obtenir les données avec $query = $db->getQuery(true);. Vous devez étudier cela un peu ici: https://docs.joomla.org/Selecting_data_using_JDatabase

Donc, il vous suffit de rassembler ce qui précède et vous avez terminé :) Je peux simplement vous souhaiter bonne chance pour le projet et demander un salaire plus élevé à votre client pour ce projet. :)

J'espère que je vous ai aidé à comprendre comment démarrer votre projet spécial (cependant, ce qui précède n'est pas du tout une liste exhaustive de tâches, c'est juste un squelette très rapide).

1
Zollie