Magento 2: Các danh mục đã chọn không hiển thị ở dạng chỉnh sửa


8

Đã thêm bộ chọn danh mục trong mẫu quản trị bằng thành phần ui. Các id danh mục được lưu vào db dưới dạng các giá trị được phân tách bằng dấu phẩy. Bây giờ tôi muốn hiển thị các danh mục đó trong mẫu chỉnh sửa của mình. nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây Đây là tệp example_example_edit.xml của tôi:

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

Đây là example_form.xml của tôi

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

Đây là DataProvider.php của tôi

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

bạn sử dụng chủ đề nào và magento 2 (câu nào)
KGR

Magento ver. 2.1.2 {chủ đề Luma}
EB

Hi @EB bạn có thể giúp tôi về vấn đề này magento.stackexchange.com/questions/249360/...
Nagaraju K

Câu trả lời:


5

Trong trường hợp đó, bạn cần sửa đổi hàm getData .

Để chỉnh sửa giá trị category_ids phải là một mảng. Giá trị category_ids được lưu trong db dưới dạng dấu phẩy được phân tách có nghĩa là '7,9,22'. Vì vậy, khi bạn chỉnh sửa giá trị này phải là [7,9,22].

/ **
 * Lấy dữ liệu
 *
 * mảng @return
 * /
Hàm công khai getData ()
{
    if (isset ($ this-> oadData)) {
        trả về $ this-> oadData;
    }

    $ items = $ this-> bộ sưu tập-> getItems ();

    foreach ($ item là $ item) {
        $ data = $ item-> getData ();
        $ data ['category_ids'] = explode (',', $ data ['category_ids']);
        $ result ['example_details'] = $ data;
        $ this-> oadData [$ item-> getId ()] = $ result;
    }
    trả về $ this-> oadData;
}

hI @sohel rana vui lòng giúp tôi về magento này.stackexchange.com/questions/249360/ Kẻ
Nagaraju K

2

Trong example_form.xml của bạn cho trường category_ids

Thay đổi cai nay đi

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

Đến

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

Hãy chắc chắn rằng bạn đang nhận các giá trị cho trường category_ids các giá trị được phân tách bằng dấu phẩy, magento sẽ làm phần còn lại.


Tôi đã thay đổi mã từ 'select' thành 'multiselect'. Tuy nhiên, nó không hoạt động. Ngoài ra các id danh mục được lưu dưới dạng các giá trị được phân tách bằng dấu phẩy.
EB

Có thể category_idskhông có giá trị. Vui lòng kiểm tra nếu bạn đang nhận được giá trị cho lĩnh vực đó. Là tên trường giống nhau trong db của bạn?
Priyank

Có, giá trị cho các lĩnh vực đang nhận được. Các loại được chọn trong danh sách thả xuống là tốt. Nhưng các giá trị không hiển thị trong trường văn bản.
EB

1

Bạn có getSelected()phương thức trong tập tin js thành phần của bạn

Magento_Catalog / js / thành phần / danh mục mới

Nếu không thì bạn sẽ cần phải tạo nó và trả về mảng với các nhãn.

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

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


Cảm ơn. Nó đã làm việc. Bây giờ tôi không thể thêm / xóa các danh mục. Xin vui lòng xem ảnh chụp màn hình. i.prntscr.com/1813b60d309d4a1ab1aac12901b3ae01.png
EB

Có lỗi js khi chỉnh sửa các danh mục. Vui lòng kiểm tra điều này: i.prntscr.com/53697deb565d41c2bd482ba15ed5bc43.png
EB

Thay đổi var selected = this.value().split(",");và kiểm tra trước nếu có một số giá trị và sau đó phân chia bằng dấu phẩy. Tôi đã cập nhật câu trả lời của tôi với kiểm tra. Bạn có thể thử lại được không?
Miroslav Petroff

Tôi đã thử. Nhưng nó không hoạt động. i.prntscr.com/186eececf7d546f59f7184ff19cb730a.png
EB

bây giờ thì sao? Tôi đã cập nhật mã của mình
Miroslav Petroff

0

Bạn phải lấy id từ Db và chọn khi tạo tùy chọn

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

Trường thể loại được tạo bằng cách sử dụng thành phần ui.
EB

@EB Vui lòng đặt mã của bạn để có câu trả lời thích hợp theo mã của bạn.
Ashish Jagnani

Xin vui lòng xem mã cập nhật.
EB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.