Dropdown-Liste für benutzerdefinierte Attribute der Kategorie Magento2.1

10

Schritte zum Reproduzieren

1. Das Modul UpgradeData.php enthält:

$categorySetup->addAttribute(Category::ENTITY, 'roflcopter', [
                    'type' => 'int',
                    'label' => 'CMS Block',
                    'input' => 'select',
                    'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Page',
                    'required' => false,
                    'sort_order' => 20,
                    'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                    'group' => 'Display Settings',
            ]);

2. view / adminhtml / ui_component / category_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">
    <fieldset name="Navigation">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Navigation</item>
                <item name="collapsible" xsi:type="boolean">true</item>
                <item name="sortOrder" xsi:type="number">100</item>
            </item>
        </argument>
        <field name="roflcopter">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">60</item>
                    <item name="dataType" xsi:type="string">string</item>
                    <item name="formElement" xsi:type="string">select</item>
                    <item name="label" xsi:type="string" translate="true">Roflcopter</item>
                </item>
            </argument>
        </field>
    </fieldset>
</form>

Erwartetes Ergebnis

  1. In der Kategorie-Dropdown-Liste sollte Roflcopter mit CMS-Blöcken als Optionen ausgewählt werden

Tatsächliche Ergebnis

  1. Leere Dropdown-Liste
Sergejs Zakatovs
quelle

Antworten:

14

Options-Tag zum Erstellen ausgewählter Optionen hinzufügen. In Ihrem Fall sollte dies sein


<field name="roflcopter">
    <argument name="data" xsi:type="array">
        <item name="options" xsi:type="object">Magento\Catalog\Model\Category\Attribute\Source\Page</item>
        <item name="config" xsi:type="array">
            <item name="sortOrder" xsi:type="number">70</item>
            <item name="dataType" xsi:type="string">string</item>
            <item name="formElement" xsi:type="string">select</item>
            <item name="label" xsi:type="string" translate="true">Roflcopter</item>
        </item>
    </argument>
</field>

Sohel Rana
quelle
Vielleicht wissen Sie, ob ich diese Registerkarte und / oder ihre Attribute basierend auf bestimmten Bedingungen, z. B. Kategorietiefe, anzeigen / ausblenden kann?
Sergejs Zakatovs
VIELEN DANK! Ich habe so lange danach gesucht. Dokumente sind zu diesem Thema so unklar. Woher weißt du das?
CompactCode
Daten werden nicht in der Datenbank @Sohel Rana
Chirag Parmar
2

Ich habe in meinem Fall getan. Ich habe benutzerdefinierte Optionen ex. L1, L2 und L3. Ich muss sie als Werte für ein benutzerdefiniertes Attribut erhalten. Also habe ich eine Quelldatei in module - vendor \ module \ Model \ Config \ Source \ Options.php erstellt

Diese Datei enthält den kleinen Code zum Erstellen der Optionen. Hier können Sie dem Code folgen

 <?php
    /**
     * Copyright © 2013-2017 Magento, Inc. All rights reserved.
     * See COPYING.txt for license details.
     */
    namespace Vendor\module\Model\Config\Source;
    /**
     * Catalog category landing page attribute source
     *
     * @author      Magento Core Team <[email protected]>
     */
    class Options extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
    {
        /**
         * {@inheritdoc}
         * @codeCoverageIgnore
         */
        public function getAllOptions()
        {
            if (!$this->_options) {
                $this->_options = [
                    ['value' => 'l1', 'label' => __('L1')],
                    ['value' => 'l2', 'label' => __('L2')],
                    ['value' => 'l3', 'label' => __('L3')],
                ];
            }
            return $this->_options;
        }
          /**
         * Get options in "key-value" format
         *
         * @return array
         */
        public function toArray()
        {
            return [
                'l1' => __('L1'),
                'l2' => __('L2'),
                'L3' => __('L3'),
                ];
        }

    }

Danach müssen Sie dies in Ihrer installdata.php als Quelle aufrufen

$eavSetup->addAttribute(
            Category::ENTITY,
            'category_level_rendering',
            [
                'type' => 'varchar',
                'backend' => '',
                'frontend' => '',
                'label' => 'Category Level rendering',
                'input' => 'select',
                'required' => false,
                'sort_order' => 100,
                'source' => '',
                'visible'  => true,
                'source' => 'vendor\module\Model\Config\Source\Options',
                'default'  => '0',
                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                'group' => 'General Information',
                'used_in_product_listing' => true,
             ]
        );

Fügen Sie dann auch die Zeile in der XML-Datei hinzu

<field name="category_level_rendering">
                <argument name="data" xsi:type="array">
/*Here is the code added to get the options on dropdown*/
<item name="options" xsi:type="object">Vendor\module\Model\Config\Source\Options</item>
                    <item name="config" xsi:type="array">
                        <item name="sortOrder" xsi:type="number">10</item>
                        <item name="dataType" xsi:type="string">string</item>
                        <item name="formElement" xsi:type="string">select</item>
                        <item name="label" xsi:type="string" translate="true">Category Level Rendering</item>
                    </item>
                </argument>
            </field>

Speichern Sie es, leeren Sie den Cache und überprüfen Sie es.

Hoffentlich hilft es dir.

Bitte geben Sie mir eine Antwort, wenn es bei Ihnen funktioniert.

Jdprasad V.
quelle
Ich habe diese Art von Fehler erhalten: Element 'Feld': Dieses Element wird nicht erwartet. Erwartet wird eine von (Einstellungen, Spalte, ActionsColumn, SelectionsColumn). Linie: 681
Pratik Mehta
Wie haben Sie die Daten gespeichert,
Mujahidh
Daten werden nicht in der Datenbank @Jdprasad V
Chirag Parmar
Dies funktioniert für mich. Bitte überprüfen Sie erneut, ob Sie Änderungen an der Schemaseite vorgenommen haben.
Jdprasad V
1
+1 dafür. Für mich geht das. ] fehlt im Array. Ich bearbeite es.
Chirag Parmar