Liste déroulante des attributs personnalisés de la catégorie Magento2.1


10

Étapes à reproduire

1. Le script Module UpgradeData.php contient:

$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. afficher / 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>

Résultat attendu

  1. Dans le formulaire de catégorie devrait apparaître une liste déroulante, sélectionnez Roflcopter avec des blocs CMS comme options

Résultat actuel

  1. Liste déroulante vide

Réponses:


14

Ajoutez une balise d'options pour créer des options de sélection. Dans votre cas, cela devrait être


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


Peut-être savez-vous si je peux afficher / masquer cet onglet et / ou ses attributs en fonction de certaines conditions, par exemple la profondeur de la catégorie?
Sergejs Zakatovs

MERCI! Je cherchais ça depuis si longtemps. Les documents ne sont pas très clairs sur ce sujet. Comment sais-tu cela?
CompactCode

Les données ne sont pas enregistrées dans la base de données @Sohel Rana
Chirag Parmar

2

J'ai fait dans mon cas. J'ai des options personnalisées ex. L1, L2 et L3. J'ai besoin de les obtenir sur un attribut personnalisé en tant que valeurs. J'ai donc créé un fichier source dans le module - vendeur \ module \ Model \ Config \ Source \ Options.php

ce fichier contient le petit code pour créer les options, ici vous pouvez suivre le code

 <?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 <core@magentocommerce.com>
     */
    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'),
                ];
        }

    }

puis après dans votre installdata.php vous devez l'appeler comme source

$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,
             ]
        );

Ensuite, ajoutez également la ligne dans le fichier xml

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

Enregistrez-le, videz le cache et veuillez vérifier.

J'espère que cela vous aidera.

Veuillez me répondre si cela vous convient.


J'ai ce genre d'erreur: Élément 'champ': Cet élément n'est pas attendu. Attendu est l'un des (paramètres, colonne, actionsColumn, selectionsColumn). Ligne: 681
Pratik Mehta

comment avez-vous sauvegardé les données,
Mujahidh

Les données ne sont pas enregistrées dans la base de données @Jdprasad V
Chirag Parmar

Cela fonctionne pour moi, veuillez vérifier à nouveau, si vous avez effectué des modifications sur la page du schéma.
Jdprasad V

1
+1 pour cela. Ça marche pour moi. ] est manquant dans le tableau. Je le modifie.
Chirag Parmar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.