Ich lerne UI-Komponente.
Ich möchte dafür einen benutzerdefinierten Abschnitt im Backend-Formular zum Bearbeiten / Hinzufügen von Produkten hinzufügen
Ich habe folgende Dateien erstellt.
vendor / module / view / adminhtml / ui_component / product_form.xml
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<fieldset name="mobile">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Time</item>
<item name="provider" xsi:type="string">product</item>
<item name="dataScope" xsi:type="string">data.product</item>
<item name="sortOrder" xsi:type="number">2</item>
<item name="collapsible" xsi:type="boolean">true</item>
<item name="opened" xsi:type="boolean">false</item>
<item name="ns" xsi:type="string">product_form</item>
</item>
</argument>
<container name="monday_time_group">
<argument name="data" xsi:type="array">
<item name="type" xsi:type="string">group</item>
<item name="config" xsi:type="array">
<item name="additionalClasses" xsi:type="string">admin__control-grouped-date</item>
<item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
<item name="label" xsi:type="string" translate="true">Monday</item>
<item name="required" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="number">220</item>
<item name="breakLine" xsi:type="boolean">false</item>
<item name="scopeLabel" xsi:type="string">[STORE VIEW]</item>
</item>
</argument>
<field name="monday_design_from">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Vendor\Module\Model\Config\Source\TimeSetup</item>
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Monday</item>
<item name="additionalClasses" xsi:type="string">admin__field-date</item>
<item name="sortOrder" xsi:type="number">230</item>
<item name="dataType" xsi:type="string">string</item>
<item name="formElement" xsi:type="string">select</item>
</item>
</argument>
</field>
<field name="monday_design_to">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Vendor\Module\Model\Config\Source\TimeSetup</item>
<item name="config" xsi:type="array">
<item name="additionalClasses" xsi:type="string">admin__field-date</item>
<item name="sortOrder" xsi:type="number">240</item>
<item name="dataType" xsi:type="string">string</item>
<item name="formElement" xsi:type="string">select</item>
</item>
</argument>
</field>
</container>
</fieldset>
</form>
Vendor \ Module \ Model \ Config \ Source \ TimeSetup.php
<?php
namespace Vendor\Module\Model\Config\Source;
class TimeSetup extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
{
protected $_optionsData;
/**
* getAllOptions
*
* @return array
*/
public function getAllOptions()
{
if ($this->_options === null) {
$this->_options = [
['value' => 'one', 'label' => __('one')],
['value' => 'two', 'label' => __('two')]
];
}
return $this->_options;
}
final public function toOptionArray()
{
return array(
array('value' => 'one', 'label' => __('one')),
array('value' => 'two', 'label' => __('two'))
);
}
}
Es wird im Backend richtig angezeigt, wie ich es wollte, aber wenn Sie versuchen, das Produkt zu speichern, wird dieser Feldwert nicht gespeichert.
Muss ich das Attribut " monday_time_group " erstellen ? Ist das der richtige Weg? Wie kann ich den Wert davon im Frontend für Produkt erhalten?
AKTUALISIEREN:
Ich habe das Attribut monday_time_group erstellt, aber es funktioniert immer noch nicht.
uicomponent
magento2.1.5
product-edit
Kaushal Suthar
quelle
quelle
Antworten:
Okay, endlich habe ich das selbst gelöst. Hier ist der vollständige Code meines Moduls ...
register.php
etc / module.xml
Setup / InstallData.php
Model \ Config \ Source \ TimeSetup.php
view / adminhtml / ui_component / product_form.xml
Verwenden Sie den obigen Code, um Daten ordnungsgemäß zu speichern. Die einzigen Probleme, mit denen ich jetzt konfrontiert bin, sind, dass diese Attribute auch im Abschnitt "Allgemein" in meinem erstellten benutzerdefinierten Abschnitt "Testgruppe" angezeigt werden. Daher habe ich sie ab sofort im Abschnitt "Allgemein" mit versteckt CSS.
quelle
Nach dem, was ich hier sehe, sind Ihre Attribute nichts Besonderes.
Sie sind reguläre.
Sie können einfach die Attribute hinzufügen
monday_design_from
,monday_design_from
und sie in einer separaten Gruppe platzieren.Ich empfehle Ihnen, dies über Code und nicht manuell zu tun, da ich davon ausgehe, dass diese Attribute logisch sind.
Hier ist ein Beispiel, wie Sie dies tun können: https://magento.stackexchange.com/a/162115/146
Das einzige, was Sie ändern müssen, wenn Ihre Attribute in einem separaten Abschnitt angezeigt werden sollen, ist, dies im Konfigurationsarray hinzuzufügen
quelle
Perfekte Lösung hier erhältlich:
Hinzufügen einer neuen Registerkarte auf der Produktbearbeitungsseite in Admin Magento 2
Sie können eine Lösung für jede Version von magento2 finden
quelle