Kategoriebaum des Verwaltungsmoduls für Magento 2-Benutzerdefinierte Module


7

So erhalten Sie den Magento 2-Kategoriebaum im Administratorformular für benutzerdefinierte Module.

Ich verwende keine UI-Komponente. Ich verwende Main.php

so füge ich hinzu

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

hier, wie man so hinzufügt

Geben Sie hier die Bildbeschreibung ein



magento.stackexchange.com/questions/94392/… haben Sie diesen Artikel überprüft
Ashish Raj

Ich habe bereits überprüft, aber ich möchte nur
Baumansicht

Antworten:


0

Fügen Sie zunächst ein Feld in Ihr UI-Formular ein:

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

Erstellen Sie nun eine Js-Datei, um den Wert des Felds zuzuordnen:

Namespace_Modulenname / 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
        };
    }
});
});

Erstellen Sie eine Datei, um Optionen für die Anzeige zu erhalten:

Namespace \ ModuleName \ Ui \ Component \ Form \ Category \ Options.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;
}
}

Ich hoffe es hilft!


Ich habe Ihre Lösung für die Anzeige von Kategorien in meinem Administrationsformular verwendet, aber es werden Fehler angezeigt. Element 'Argument': Dieses Element wird nicht erwartet. Zeile: 5 Überprüfen Sie das XML und versuchen Sie es erneut.
Utsav Gupta

0

Ich arbeite für mich, habe aber zwei Codezeilen in der Options.phpDatei bearbeitet

1) verwenden Magento\Catalog\.. instead of Magento\Category

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

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.