Ich habe ein benutzerdefiniertes Modul erstellt, um die benutzerdefinierte Registerkarte im Produktformular im Back-End anzuzeigen. Ich habe diese Lösung verwendet.
Jetzt auf der Registerkarte füge ich benutzerdefinierte Felder hinzu, um sie in einer benutzerdefinierten Datenbanktabelle zu speichern. sagen<input type="text" name="my_new_field" value="123">
Außerdem wurde ein benutzerdefinierter Controller für das Speichern von Administratorprodukten erstellt (siehe unten).
In 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>
Und in 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();
}
}
Jetzt in der execute
Funktion erwarte ich POST-Wert von my_new_field
. Aber ich verstehe es nicht. Nachdem ich das bekommen habe, werde ich benutzerdefinierte Abfragen verwenden, um Daten in einer benutzerdefinierten Tabelle zu speichern.
Was mache ich falsch oder sollte ich eine andere Methode verwenden?
Update: 26. August
Ich habe das Ajax-Formular verwendet, um Daten von der Produktregisterkarte zu speichern, da ich zeitliche Einschränkungen hatte. Ich habe die Antwort von @ william-oakley akzeptiert. Nun, wie @mageworx in seiner Antwort hinzufügte, ist dies kein Standardweg, um dies zu tun.
Ich möchte die UI-Formularstandardverwendung in der Weiterentwicklung verwenden. Meine Frage ist also, wie man der Produktbearbeitung mithilfe des UI-Formularstandards eine benutzerdefinierte Registerkarte hinzufügt und benutzerdefinierte Felder in einer benutzerdefinierten Tabelle oder auf andere Weise speichert.
quelle
Antworten:
Sie können einfach ein "nacktes" Eingabefeld verwenden, Sie müssen nur das folgende Attribut hinzufügen:
so:
Sie können dann die POST-Daten für Ihre Eingabe abrufen.
quelle
Die obige Lösung ist nicht vollständig korrekt. Sie fügen ein Feld als "nacktes" HTML-Element hinzu, und ein Produktformular ist ein UI-Formular mit eigenen Besonderheiten. Eine spezielle Klasse (
vendor/magento/module-ui/view/base/web/js/form/form.js
) ist für das Sammeln von Feldern und deren Validierung beim Senden eines Formulars verantwortlich. Außerdem sollte diese Klasse die Felder übersehen, die nicht mit diesem UI-Formular zusammenhängen oder nichtadditional fields
wie alle Ihre Felder sind. Sie sollten die folgende Benennung verwenden, um sicherzustellen, dass Ihr Feld an die Steuerung gesendet wird:input type="text" name="product[my_new_field]" value="123"
Dies ist jedoch nicht vollständig korrekt, da die richtige Lösung darin besteht, nicht von den Nutzungsstandards für Benutzeroberflächenformulare abzuweichen und deren native Elemente und Komponenten zu verwenden. In diesem Fall sollten Sie sich über so etwas keine Sorgen machen, da alles automatisch verarbeitet wird.
Sie können die Hauptmethode zum Speichern der UI-Formulardaten überprüfen, um den Prozess zu verstehen:
Wie Sie diesem Code entnehmen können, wird ein HTML-Formular mit all seinen Feldern nicht gesendet. Allerdings
this.source
undthis.additionalFields
sind senden , aber Ihr Element ist nicht darin enthalten , weil sie falsch deklariert wird.UPDATE VOM 23.08.2016
Hier ist das Beispiel zum Hinzufügen eines Feldsatzes aus unserem Blog. Sie können den vollständigen Artikel über den folgenden Link lesen:
Quelle: Eine einfache Möglichkeit, dem UI-Formular ein Feldset mit Feldern hinzuzufügen :
quelle
Um das Produktfeld in einer benutzerdefinierten Tabelle zu speichern, können Sie der Logik des Stufenpreises folgen. Magento spart den Tier-Preis mithilfe eines benutzerdefinierten Backend-Modells des Tier-Preises. Wir können dieselbe Logik für unser benutzerdefiniertes Feld / Attibute befolgen. Um attibute in einer benutzerdefinierten Tabelle zu speichern, müssen Sie das benutzerdefinierte Attribut erstellen und das Backend-Modell bereitstellen. Das Backend-Modell validiert und speichert den Attibute und ruft ihn ab. Sie können die folgenden Schritte ausführen.
Schritt 1. Produktattribut erstellen
Schritt 2. Erstellen Sie ein Backend-Modell für ein benutzerdefiniertes Produktattribut, das bei der Validierung hilft und den Attributwert speichert und abruft
Schritt 2. Ressourcenmodell zum Speichern und Abrufen des Attributwerts aus einer benutzerdefinierten Tabelle
quelle