Magento 2: Ausgewählte Kategorien sind in der Bearbeitungsform nicht sichtbar


8

Kategorieselektor in Admin-Form mit UI-Komponente hinzugefügt. Die Kategorie-IDs werden als durch Kommas getrennte Werte in der Datenbank gespeichert. Jetzt möchte ich diese Kategorien in meinem Bearbeitungsformular anzeigen. Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein Dies ist meine example_example_edit.xml-Datei:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <uiComponent name="example_form"/>
        </referenceContainer>
    </body>
</page>

Dies ist meine example_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">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">example_form.example_form_data_source</item>
            <item name="deps" xsi:type="string">example_form.example_form_data_source</item>
        </item>
        <item name="label" xsi:type="string" translate="true">example Information</item>
        <item name="config" xsi:type="array">
            <item name="dataScope" xsi:type="string">data</item>
            <item name="namespace" xsi:type="string">example_form</item>
        </item>
        <item name="template" xsi:type="string">templates/form/collapsible</item>
        <item name="buttons" xsi:type="array">
            <item name="save" xsi:type="string">Company\Module\Block\Adminhtml\Example\Edit\Button\Save</item>
            <item name="delete" xsi:type="string">Company\Module\Block\Adminhtml\Example\Edit\Button\Delete</item>
            <item name="back" xsi:type="string">Company\Module\Block\Adminhtml\Example\Edit\Button\Back</item>        
        </item>
    </argument>

    <dataSource name="example_form_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">Company\Module\Model\ResourceModel\Example\DataProvider</argument>
            <argument name="name" xsi:type="string">example_form_data_source</argument>
            <argument name="primaryFieldName" xsi:type="string">example_id</argument>
            <argument name="requestFieldName" xsi:type="string">example_id</argument>
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="submit_url" xsi:type="url" path="module/example/save"/>
                </item>
            </argument>
        </argument> 
        <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
            </item>
        </argument>
    </dataSource>

    <fieldset name="example_details">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="collapsible" xsi:type="boolean">true</item>
                <item name="label" xsi:type="string" translate="true">example [General]</item>
                <item name="sortOrder" xsi:type="number">10</item>
                <item name="openOnShow" xsi:type="boolean">true</item>
            </item>
        </argument>
        <field name="example_id">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="visible" xsi:type="boolean">false</item>
                    <item name="dataType" xsi:type="string">text</item>
                    <item name="formElement" xsi:type="string">input</item>
                    <item name="source" xsi:type="string">label_id</item>
                </item>
            </argument>
        </field>
        <field name="title">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="label" xsi:type="string">Title</item>
                    <item name="visible" xsi:type="boolean">true</item>
                    <item name="dataType" xsi:type="string">text</item>
                    <item name="disabled" xsi:type="boolean">false</item>
                    <item name="formElement" xsi:type="string">input</item>
                    <item name="source" xsi:type="string">title</item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">true</item>
                    </item>
                </item>
            </argument>
        </field>
        <field name="status">
            <argument name="data" xsi:type="array">
                <item name="options" xsi:type="object">Company\Module\Model\Config\Source\Status</item>
                <item name="config" xsi:type="array">
                    <item name="label" xsi:type="string" translate="true">Status</item>
                    <item name="visible" xsi:type="boolean">true</item>
                    <item name="dataType" xsi:type="string">number</item>
                    <item name="formElement" xsi:type="string">select</item>
                    <item name="source" xsi:type="string">status</item>
                    <item name="dataScope" xsi:type="string">status</item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">true</item>
                    </item>
                </item>
            </argument>
        </field>
<field name="category_ids">
            <argument name="data" xsi:type="array">
                <item name="options" xsi:type="object">Magento\Catalog\Ui\Component\Product\Form\Categories\Options</item>
                <item name="config" xsi:type="array">
                    <item name="label" xsi:type="string" translate="true">Category</item>
                    <item name="componentType" xsi:type="string">field</item>
                    <item name="formElement" xsi:type="string">select</item>
                    <item name="visible" xsi:type="boolean">true</item>
                    <item name="component" xsi:type="string">Magento_Catalog/js/components/new-category</item>
                    <item name="elementTmpl" xsi:type="string">ui/grid/filters/elements/ui-select</item>
                    <item name="filterOptions" xsi:type="boolean">true</item>
                    <item name="showCheckbox" xsi:type="boolean">true</item>
                    <item name="disableLabel" xsi:type="boolean">true</item>
                    <item name="multiple" xsi:type="boolean">true</item>
                    <item name="levelsVisibility" xsi:type="number">1</item>
                    <item name="required" xsi:type="boolean">false</item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">false</item>
                    </item>
                    <item name="listens" xsi:type="array">
                        <item name="${ $.namespace }.${ $.namespace }:responseData" xsi:type="string">setParsed</item>
                    </item>
                </item>
            </argument>
        </field>
    </fieldset> 

</form>

Dies ist meine DataProvider.php

<?php
namespace Company\Module\Model\ResourceModel\Example;

use Company\Module\Model\ResourceModel\Example\CollectionFactory;;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;  

class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
{
    /**
     * @var array
     */
    protected $_loadedData;

    protected $storeManager;

    protected $scopeConfig;

    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        CollectionFactory $exampleCollectionFactory,
        StoreManagerInterface $storeManager,
        ScopeConfigInterface $scopeConfig,
        array $meta = [],
        array $data = []
    ) {
        $this->storeManager = $storeManager;
        $this->scopeConfig = $scopeConfig;
        $this->collection = $exampleCollectionFactory->create();
        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
    }


    /**
    * Get data
    *
    * @return array
    */
    public function getData()
    {
        if (isset($this->_loadedData)) {
            return $this->_loadedData;
        }

    return $this->_loadedData;
    }
}

Welches Thema verwenden Sie und Magento 2 (welche Vertion)
KGR

Magento ver. 2.1.2 {Luma-Thema}
EB

Hallo @EB können Sie mir auf diesem magento.stackexchange.com/questions/249360/…
Nagaraju K

Antworten:


5

In diesem Fall müssen Sie die Funktion getData ändern .

Für die Bearbeitung von category_ids muss der Wert ein Array sein. Angenommen, der Wert für category_ids wird in db als durch Kommas getrennt gespeichert, was '7,9,22' bedeutet. Wenn Sie diesen Wert bearbeiten, sollte er [7,9,22] sein.

/ **
 * Daten empfangen
 * *
 * @return Array
 * /
öffentliche Funktion getData ()
{
    if (isset ($ this-> loadData)) {
        return $ this-> loadData;
    }}

    $ items = $ this-> collection-> getItems ();

    foreach ($ items als $ item) {
        $ data = $ item-> getData ();
        $ data ['category_ids'] = explode (',', $ data ['category_ids']);
        $ result ['example_details'] = $ data;
        $ this-> loadData [$ item-> getId ()] = $ result;
    }}
    return $ this-> loadData;
}}

hI @sohel rana bitte helfen Sie mir auf diesem magento.stackexchange.com/questions/249360/…
Nagaraju K

2

In Ihrer example_form.xml für das Feld category_ids

Ändere das

<item name="formElement" xsi:type="string">select</item>

Zu

<item name="formElement" xsi:type="string">multiselect</item>

Stellen Sie sicher, dass Sie Werte für das Feld "category_ids" erhalten. Kommagetrennte Werte magento erledigt den Rest.


Ich habe den Code von 'select' in 'multiselect' geändert. Trotzdem funktioniert es nicht. Außerdem werden die Kategorie-IDs als durch Kommas getrennte Werte gespeichert.
EB

Möglicherweise hat das category_idskeinen Wert. Bitte überprüfen Sie, ob Sie einen Wert für dieses Feld erhalten. Ist der Feldname in Ihrer Datenbank identisch?
Priyank

Ja, der Wert für das Feld wird immer höher. Die Kategorien werden ebenfalls in der Dropdown-Liste ausgewählt. Die Werte werden jedoch nicht im Textfeld angezeigt.
EB

1

Haben Sie eine getSelected()Methode in Ihrer js-Datei

Magento_Catalog / js / components / new-category

Wenn nicht, müssen Sie es erstellen und das Array mit den Beschriftungen zurückgeben.

getSelected: function () {
    var selected = this.value();
    if (selected && selected.indexOf(',') > -1) // split if contains comma only
        selected = selected.split(',');

    return this.cacheOptions.plain.filter(function (opt) {
        return _.isArray(selected) ?
            _.contains(selected, opt.value) :
        selected == opt.value;
    });
},

Sehen vendor/magento/module-ui/view/base/web/js/form/element/ui-select.js


Vielen Dank. Es funktionierte. Jetzt kann ich die Kategorien nicht mehr hinzufügen / entfernen. Bitte sehen Sie den Screenshot. i.prntscr.com/1813b60d309d4a1ab1aac12901b3ae01.png
EB

Beim Bearbeiten der Kategorien ist ein js-Fehler aufgetreten. Bitte überprüfen Sie dies: i.prntscr.com/53697deb565d41c2bd482ba15ed5bc43.png
EB

Ändern var selected = this.value().split(",");und überprüfen Sie zuerst, ob ein Wert vorhanden ist, und teilen Sie ihn dann durch Komma. Ich habe meine Antwort mit dem Scheck aktualisiert. Kannst du es nochmal versuchen?
Miroslav Petroff

Ich habe versucht. Aber es funktioniert nicht. i.prntscr.com/186eececf7d546f59f7184ff19cb730a.png
EB

Was ist mit jetzt? Ich habe meinen Code aktualisiert
Miroslav Petroff

0

Sie müssen die IDs von Db abrufen und beim Erstellen von Optionen auswählen

$selectedCat = explode(',', $categoryFromDb)
foreach ($category as $opt) {
    $sel = '';
    if (in_array($opt, $selectedCat)) {
    $sel = ' selected="selected" ';
    }
    echo '<option ' . $sel . ' value="' . $opt . '">' . $opt . '</option>';
}

Das Kategoriefeld wird mit der UI-Komponente erstellt.
EB

@EB Bitte geben Sie Ihren Code ein, um die richtige Antwort gemäß Ihrem Code zu erhalten.
Ashish Jagnani

Bitte beachten Sie den aktualisierten Code.
EB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.