Magento 2: - Kategoriye select özelliği ekle


9

Bir kategoriye bir seçme / açılır özelliği eklemek ve mağaza sahibinin seçmesine izin vermek için arka uçta görüntülemek istiyorum. Bazı araştırmalardan sonra aşağıdakileri yapmak için şunları öğrendim:

  • Setupscript ile öznitelik oluşturma
  • Kullanıcı arayüzü bileşen bildirimi yoluyla dahil et

Ben de bunu yaptım:

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
    /** @var $eavSetup \Magento\Eav\Setup\EavSetup */
    $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

    $eavSetup->addAttribute(
        \Magento\Catalog\Model\Category::ENTITY,
        'attribute_code',
        [
            'type' => 'int',
            'label' => 'Top Navigation CMS Block',
            'input' => 'select',
            'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Page',
            'required' => false,
            'sort_order' => 10,
            'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
            'group' => 'MyOwnGroup'
        ]
    );
}

/ Adminhtml / ui_component / category_form.xml görüntülemek:

<?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="content">
        <field name="attribute_code">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">61</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">Top Navigation CMS Block</item>
                </item>
            </argument>
        </field>
    </fieldset>
</form>

Ancak bu yeterli değildir, arka uçtaki sekmelerin sıralanması karışıktır. Ayrıca açılır liste oluşturulur, ancak seçenekler olmadan. Bu yüzden de düzenlemeniz gerektiğini öğrendim Magento\Catalog\Model\Category\DataProvider::getFieldsMap(). Bunu yapmak için üzerine di.xml yazmamız gerekiyor:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Catalog\Model\Category\DataProvider" type="Vendor\Module\Model\Category\DataProvider" />
</config>

Modülün kendi veri sağlayıcısında, özniteliği işleve eklemeniz gerekir. Ve sonra işe yarıyor.

Sorularım işte burada:

  • Çalışması için bu veri sağlayıcısının üzerine yazmak zorunda olduğunuzu düşünmüyorum, daha iyi bir yol olmalı
  • Yeni özniteliği (kurulum komut dosyası, kullanıcı arabirimi bileşeni, veri sağlayıcısı) bildirmek zorunda olduğunuz kodun içinde 3 yer var, bu kadar ek yükün gerekli olduğuna inanamıyorum?
  • Özellik için neden gereksiz bilgi var? Örneğin, etiket, kurulum komut dosyası VE ui bileşeninin içindedir; burada arka uçtaki etiket, ui bileşeni bildiriminden okunacaktır.

Zaten açılan türün kategori özniteliğini oluşturuyorum, DataProvider üzerinde herhangi bir gereklilik yok.
Dhiren Vasoya

Çözümünüzü gönderebilir misiniz?
tester

Cevap gönderiyorum, lütfen kontrol edin.
Dhiren Vasoya

Yanıtlar:


3

Ui-bileşen yapılandırmasına bir düğüm "seçenekleri" eklemeniz gerekir

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

Buradan alınır Magento2.1 Kategori özel özellik açılır menüsü


2

InstallData.php özniteliği oluşturmak için aşağıdaki kodu kullandım .

Satıcı \ Uzantısı \ Setup \ InstallData.php

<?php
namespace Vendor\Extension\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

        //Category Attribute Create Script
        $eavSetup->addAttribute(
            \Magento\Catalog\Model\Category::ENTITY,
            'attribute_id',
            [
                'group' => 'Mygroup',
                'label' => 'Attribute Label',
                'type'  => 'int',
                'input' => 'boolean',
                'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                'source' => '',
                'required' => false,
                'sort_order' => 1,
                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                'used_in_product_listing' => true,
                'visible_on_front' => false
            ]
        );

        $setup->endSetup();
    }
}

Ve sonra bir dosya category_form.xml oluşturuyorum

Satıcı \ Uzantısı \ görünümü \ 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="attribute_id">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                <item name="collapsible" xsi:type="boolean">true</item>
                <item name="sortOrder" xsi:type="number">25</item>
            </item>
        </argument>
        <field name="attribute_id">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">20</item>
                    <item name="dataType" xsi:type="string">boolean</item>
                    <item name="formElement" xsi:type="string">checkbox</item>
                    <item name="source" xsi:type="string">category</item>
                    <item name="prefer" xsi:type="string">toggle</item>
                    <item name="valueMap" xsi:type="array">
                        <item name="true" xsi:type="string">1</item>
                        <item name="false" xsi:type="string">0</item>
                    </item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">false</item>
                    </item>
                    <item name="default" xsi:type="string">0</item>
                    <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                </item>
            </argument>
        </field>
</form>

Açılır listeniz için nasıl özel değerler oluşturabilir ve bunların kaydedilmesini sağlayabilirsiniz? Lütfen bakınız: magento.stackexchange.com/questions/181756/…
heady12
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.