Magento 2: Kategori yang dipilih tidak terlihat dalam bentuk edit

8

Menambahkan pemilih kategori dalam formulir admin menggunakan komponen ui. Id kategori disimpan ke db sebagai nilai yang dipisahkan koma. Sekarang saya ingin menampilkan kategori itu di formulir edit saya. masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini Ini adalah file example_example_edit.xml saya:

<?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>

Ini adalah example_form.xml saya

<?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>

Ini adalah DataProvider.php saya

<?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;
    }
}
EB
sumber
tema mana yang Anda gunakan dan magento 2 (yang vertion)
KGR
Magento ver. 2.1.2 {Luma theme}
EB
Hai @EB, bisakah Anda membantu saya di magento.stackexchange.com/questions/249360/…
Nagaraju K

Jawaban:

5

Dalam hal ini Anda perlu memodifikasi fungsi getData .

Untuk mengedit nilai category_ids harus berupa array. Misalkan nilai category_ids simpan dalam db sebagai koma yang berarti '7,9,22'. Jadi, ketika Anda mengedit nilai ini harus [7,9,22].

/ **
 * Dapatkan data
 *
 * @ mengembalikan array
 * /
fungsi publik getData ()
{
    if (isset ($ this-> loadedData)) {
        return $ this-> loadedData;
    }

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

    foreach ($ item sebagai $ item) {
        $ data = $ item-> getData ();
        $ data ['category_ids'] = meledak (',', $ data ['category_ids']);
        $ result ['example_details'] = $ data;
        $ this-> loadedData [$ item-> getId ()] = $ result;
    }
    return $ this-> loadedData;
}
Sohel Rana
sumber
hI @sohel rana tolong bantu saya di magento.stackexchange.com/questions/249360/…
Nagaraju K
2

Di example_form.xml Anda untuk bidang category_ids

Ubah ini

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

Untuk

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

Pastikan Anda mendapatkan nilai untuk bidang Category_ids nilai yang dipisahkan koma, magento akan melakukan sisanya.

Priyank
sumber
Saya telah mengubah kode dari 'select' ke 'multiselect'. Masih tidak bekerja. Id id kategori juga disimpan sebagai nilai yang dipisahkan koma.
EB
Kemungkinan yang category_idstidak memiliki nilai. Silakan periksa apakah Anda mendapatkan nilai untuk bidang itu. Apakah nama bidangnya sama dengan db Anda?
Priyank
Ya, nilai untuk bidang ini didapat. Kategori dipilih dalam dropdown juga. Tetapi nilai-nilai tidak ditampilkan di bidang teks.
EB
1

Apakah Anda memiliki getSelected()metode dalam file js komponen Anda

Magento_Catalog / js / komponen / kategori baru

Jika tidak, Anda harus membuatnya dan mengembalikan array dengan label.

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;
    });
},

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

Miroslav Petroff
sumber
Terima kasih. Itu berhasil. Sekarang saya tidak dapat menambah / menghapus kategori. Silakan lihat tangkapan layar. i.prntscr.com/1813b60d309d4a1ab1aac12901b3ae01.png
EB
Ada kesalahan js pada pengeditan kategori. Silakan periksa ini: i.prntscr.com/53697deb565d41c2bd482ba15ed5bc43.png
EB
Ubah var selected = this.value().split(",");dan periksa terlebih dahulu jika ada beberapa nilai dan kemudian dipisah dengan koma. Saya telah memperbarui jawaban saya dengan cek. Bisakah kamu mencoba lagi?
Miroslav Petroff
Saya telah mencoba. Tapi itu tidak berhasil. i.prntscr.com/186eececf7d546f59f7184ff19cb730a.png
EB
bagaimana dengan sekarang? Saya memperbarui kode saya
Miroslav Petroff
0

Anda harus mendapatkan id dari Db dan menempatkan yang dipilih saat membuat opsi

$selectedCat = explode(',', $categoryFromDb)
foreach ($category as $opt) {
    $sel = '';
    if (in_array($opt, $selectedCat)) {
    $sel = ' selected="selected" ';
    }
    echo '<option ' . $sel . ' value="' . $opt . '">' . $opt . '</option>';
}
Ashish Jagnani
sumber
Bidang kategori dibuat menggunakan komponen ui.
EB
@ EB Harap masukkan kode Anda untuk mendapatkan jawaban yang sesuai dengan kode Anda.
Ashish Jagnani
Silakan lihat kode yang diperbarui.
EB