마 젠토 2 :-카테고리에 속성 선택 추가


9

상점 소유자가 선택할 수 있도록 카테고리에 선택 / 드롭 다운 속성을 추가하고 백엔드에 표시하려고합니다. 몇 가지 연구를 한 후 다음과 같은 작업을 수행했습니다.

  • 설정 스크립트를 통해 속성 생성
  • UI 컴포넌트 선언을 통해 포함

이것이 내가 한 일입니다.

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'
        ]
    );
}

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

그러나 이것으로 충분하지 않으며 백엔드의 탭 정렬이 혼합됩니다. 또한 드롭 다운이 렌더링되지만 옵션은 없습니다. 그래서 당신도 편집해야한다는 것을 알았습니다 Magento\Catalog\Model\Category\DataProvider::getFieldsMap(). 그렇게하려면 di.xml을 통해 덮어 써야합니다.

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

모듈의 자체 데이터 공급자에서 함수에 속성을 추가해야합니다. 그런 다음 작동합니다.

내 질문은 다음과 같습니다.

  • 이 데이터 공급자를 덮어 써서 작동시켜야한다고 생각하지 않습니다. 더 나은 방법이 있어야합니다.
  • 코드 안에 새로운 속성 (설정 스크립트, UI 구성 요소, 데이터 공급자)을 선언 해야하는 3 곳이 있습니다.이 많은 오버 헤드가 필요하다고 믿을 수 없습니까?
  • 왜 속성에 대한 중복 정보가 있습니까? 예를 들어 레이블은 설정 스크립트와 ui 구성 요소 안에 있으며 백엔드의 레이블은 ui 구성 요소 선언에서 읽습니다.

드롭 다운 유형의 카테고리 속성을 이미 작성 중이므로 DataProvider를 초과 할 필요가 없습니다.
Dhiren Vasoya

솔루션을 게시 할 수 있습니까?
테스터

답변을 게시하고 확인하십시오.
Dhiren Vasoya 님의

답변:


3

ui-component 구성에 노드 "옵션"을 추가해야합니다

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

여기에서 가져온 Magento2.1 카테고리 사용자 정의 속성 드롭 다운


2

InstallData.php 에서 다음 코드를 사용하여 속성을 작성했습니다 .

공급 업체 \ 확장 \ 설정 \ 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();
    }
}

그런 다음 category_form.xml 파일을 만듭니다.

공급 업체 \ 확장 \ 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="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>

드롭 다운에 대한 사용자 정의 값을 작성하고 저장하려면 어떻게해야합니까? 참조 : magento.stackexchange.com/questions/181756/…
heady12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.