상점 소유자가 선택할 수 있도록 카테고리에 선택 / 드롭 다운 속성을 추가하고 백엔드에 표시하려고합니다. 몇 가지 연구를 한 후 다음과 같은 작업을 수행했습니다.
- 설정 스크립트를 통해 속성 생성
- 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 님의