J'ai créé un module personnalisé pour afficher un onglet personnalisé sur le formulaire du produit en back-end. J'ai utilisé cette solution.
Maintenant, dans l'onglet, j'ajoute des champs personnalisés à enregistrer dans une table de base de données personnalisée. dire<input type="text" name="my_new_field" value="123">
A également créé un contrôleur personnalisé pour le produit d'administration, comme ci-dessous.
Dans etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Controller\Adminhtml\Product\Save" type="Namespace\Module\Controller\Adminhtml\Rewrite\Product\Save" />
</config>
Et dans Controller / Adminhtml / Rewrite / Product / Save.php
<?php
namespace Namespace\Module\Controller\Adminhtml\Rewrite\Product;
class Save extends \Magento\Catalog\Controller\Adminhtml\Product\save
{
public function execute()
{
echo "hello"; print_r($_POST); die;
return parent::execute();
}
}
Maintenant, en execute
fonction, je m'attends à une valeur POST de my_new_field
. Mais je ne comprends pas. Après avoir obtenu cela, j'utiliserai des requêtes personnalisées pour enregistrer les données dans un tableau personnalisé.
Qu'est-ce que je fais mal ou dois-je utiliser une autre méthode?
Mise à jour: 26 août
J'ai utilisé le formulaire Ajax pour enregistrer les données de l'onglet produit car j'avais des restrictions de temps. J'ai accepté la réponse de @ william-oakley. Maintenant, comme @mageworx a ajouté dans sa réponse que ce n'est pas un moyen standard de le faire.
Je souhaite utiliser l'utilisation standard de l'interface utilisateur dans les développements ultérieurs. Ma question est donc de savoir comment ajouter un onglet personnalisé à la modification du produit en utilisant la norme de formulaire d'interface utilisateur et enregistrer les champs personnalisés dans un tableau personnalisé ou d'une autre manière.
la source
Réponses:
Vous pouvez simplement utiliser un champ de saisie "nu", il vous suffit d'ajouter l'attribut suivant:
donc:
Vous pourrez alors obtenir les données POST pour votre saisie.
la source
La solution ci-dessus n'est pas entièrement correcte. Vous ajoutez un champ en tant qu'élément html "nu" et un formulaire de produit est un formulaire d'interface utilisateur avec ses propres particularités. Une classe spéciale (
vendor/magento/module-ui/view/base/web/js/form/form.js
) est responsable de la collecte des champs et de leur validation lors de l'envoi d'un formulaire. En outre, cette classe doit manquer les champs qui ne sont pas liés à ce formulaire d'interface utilisateur ou pasadditional fields
comme tous vos champs. Vous devez utiliser la dénomination suivante afin de vous assurer que votre champ sera envoyé au contrôleur:input type="text" name="product[my_new_field]" value="123"
Mais ce n'est pas tout à fait correct, car la bonne solution n'est pas de s'écarter des normes d'utilisation des formulaires de l'interface utilisateur et d'utiliser ses éléments et composants natifs. Dans ce cas, vous ne devriez pas vous inquiéter d'une telle chose car tout sera traité automatiquement.
Vous pouvez vérifier la principale méthode de stockage des données des formulaires de l'interface utilisateur afin de comprendre le processus:
Comme vous pouvez le voir à partir de ce code, un formulaire html avec tous ses champs n'est pas envoyé. Cependant,
this.source
etthis.additionalFields
sont envoyés mais votre élément n'y est pas inclus car il est déclaré incorrectement.MISE À JOUR DU 23/08/2016
Voici l'exemple sur la façon d'ajouter un fieldset à partir de notre blog. Vous pouvez lire l'article complet, en utilisant le lien ci-dessous:
Source: un moyen simple d'ajouter un jeu de champs avec des champs au formulaire UI :
la source
Pour enregistrer le champ de produit dans un tableau personnalisé, vous pouvez suivre la logique du prix par palier. Magento économisera le prix du palier à l'aide du modèle personnalisé de backend du prix du palier. Nous pouvons suivre la même logique pour notre champ / attribut personnalisé. Pour enregistrer l'attribut dans une table personnalisée, vous devez créer l'attribut personnalisé et lui fournir un modèle de backend. Le modèle dorsal validera et sauvegardera et réactivera l'attribut. Vous pouvez suivre les étapes ci-dessous.
Étape 1. Créer un attribut de produit
Étape 2. Créez un modèle de backend pour l'attribut personnalisé du produit qui vous aidera à valider et à enregistrer et récupérer la valeur de l'attribut
Étape 2. Modèle de ressource pour enregistrer et récupérer la valeur d'attribut de la table personnalisée
la source