Magento 2 cây thể loại mô đun quản trị mô đun tùy chỉnh


7

Cách nhận cây danh mục Magento 2 trong mẫu quản trị Mô-đun tùy chỉnh.

Tôi không sử dụng Thành phần UI Tôi đang sử dụng Main.php

như thế này tôi đang thêm

$fieldset->addField(
            'label',
            'text',
            [
                'name' => 'name',
                'label' => __('name'),
                'title' => __('name'),
                'note' => __('name'),
                'required' => true
            ]
        );

ở đây làm thế nào để thêm như thế này

nhập mô tả hình ảnh ở đây



magento.stackexchange.com/questions/94392/ Bạn có kiểm tra bài viết này không
Ashish Raj

Tôi đã kiểm tra nhưng tôi chỉ muốn xem cây
Magento 2

Câu trả lời:


0

Trước tiên, thêm một trường trong mẫu ui của bạn:

<field name="custom" component="Namespce_Modulename/js/select-category" sortOrder="20" formElement="select">
<argument name="data" xsi:type="array">
    <item name="config" xsi:type="array">
        <item name="filterOptions" xsi:type="boolean">true</item>//to add filter in select-ui
        <item name="multiple" xsi:type="boolean">false</item>//select multiple or not
        <item name="showCheckbox" xsi:type="boolean">true</item>//to show checkboxes
        <item name="disableLabel" xsi:type="boolean">true</item>
    </item>
</argument>
<settings>
    <required>true</required>
    <validation>
        <rule name="required-entry" xsi:type="boolean">true</rule>
    </validation>
    <elementTmpl>ui/grid/filters/elements/ui-select</elementTmpl>
    <label translate="true">Select Category</label>//label to Field
    <dataScope>data.custom</dataScope>//To map
    <componentType>field</componentType>
    <listens>
        <link name="${ $.namespace }.${ $.namespace }:responseData">setParsed</link>
    </listens>
</settings>
<formElements>
    <select>
        <settings>
            <options class="Namespace\ModuleName\Ui\Component\Form\Category\Options"/>
        </settings>
    </select>
</formElements>

Bây giờ tạo tệp Js để ánh xạ giá trị của trường:

Namespace_Modulename / view / adminhtml / web / js / select-category.js

define([
'Magento_Ui/js/form/element/ui-select'
], function (Select) {
'use strict';
return Select.extend({
    /**
     * Parse data and set it to options.
     *
     * @param {Object} data - Response data object.
     * @returns {Object}
     */
    setParsed: function (data) {
        var option = this.parseData(data);
        if (data.error) {
            return this;
        }
        this.options([]);
        this.setOption(option);
        this.set('newOption', option);
    },
    /**
     * Normalize option object.
     *
     * @param {Object} data - Option object.
     * @returns {Object}
     */
    parseData: function (data) {
        return {
            value: data.category.entity_id,
            label: data.category.name
        };
    }
});
});

Tạo một tệp để có các tùy chọn hiển thị:

Không gian tên \ ModuleName \ Ui \ Thành phần \ Mẫu \ Danh mục \ Tùy chọn.php

<?php
namespace Namespace\ModuleName\Ui\Component\Form\Category;

use Magento\Framework\Data\OptionSourceInterface;
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory as      CategoryCollectionFactory;
use Magento\Framework\App\RequestInterface;

/**
* Options tree for "Categories" field
*/
class Options implements OptionSourceInterface
{

protected $categoryCollectionFactory;

/**
 * @var RequestInterface
 */
protected $request;

/**
 * @var array
 */
protected $categoryTree;

/**
 * @param CategoryCollectionFactory $categoryCollectionFactory
 * @param RequestInterface $request
 */
public function __construct(
    CategoryCollectionFactory $categoryCollectionFactory,
    RequestInterface $request
) {
    $this->categoryCollectionFactory = $categoryCollectionFactory;
    $this->request = $request;
}

/**
 * {@inheritdoc}
 */
public function toOptionArray()
{
    return $this->getCategoryTree();
}

/**
 * Retrieve categories tree
 *
 * @return array
 */
protected function getCategoryTree()
{
    if ($this->categoryTree === null) {
        $collection = $this->categoryCollectionFactory->create();

        $collection->addAttributeToSelect('name');

        foreach ($collection as $category) {
            $categoryId = $category->getEntityId();
            if (!isset($categoryById[$categoryId])) {
                $categoryById[$categoryId] = [
                    'value' => $categoryId
                ];
            }
            $categoryById[$categoryId]['label'] = $category->getName();
        }
        $this->categoryTree = $categoryById;
    }
    return $this->categoryTree;
}
}

Hy vọng nó giúp!


Tôi đã sử dụng giải pháp của bạn cho các danh mục hiển thị trong mẫu quản trị của tôi nhưng nó hiển thị lỗi. Yếu tố 'đối số': Yếu tố này không được mong đợi. Dòng: 5 Xác minh XML và thử lại.
Utsav Gupta

0

Làm việc cho tôi, nhưng tôi đã chỉnh sửa hai dòng mã trong Options.phptệp

1) sử dụng Magento\Catalog\.. instead of Magento\Category

2) $collection->addAttributeToSelect('name'); instead of $collection->addNameToSelect();

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.