Выбор атрибута категории Magento 2.3 невозможен. (все равно отправит старые данные, если нет выбора) - PullRequest
0 голосов
/ 07 февраля 2020

Я добавил пользовательский атрибут категории. Я связываю связанные категории для последующего использования. Я добавил это к uicomponent xml, чтобы показать элемент:

<field name="related_categories" sortOrder="94">
    <argument name="data" xsi:type="array">
        <item name="options" xsi:type="object">Magento\Catalog\Ui\Component\Product\Form\Categories\Options</item>
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Add external categories</item>
            <item name="componentType" xsi:type="string">field</item>
            <item name="formElement" xsi:type="string">multiselect</item>
            <item name="component" xsi:type="string">Magento_Catalog/js/components/new-category</item>
            <item name="elementTmpl" xsi:type="string">ui/grid/filters/elements/ui-select</item>
            <item name="dataScope" xsi:type="string">related_categories</item>
            <item name="filterOptions" xsi:type="boolean">false</item>
            <item name="showCheckbox" xsi:type="boolean">false</item>
            <item name="disableLabel" xsi:type="boolean">true</item>
            <item name="multiple" xsi:type="boolean">true</item>
            <item name="levelsVisibility" xsi:type="number">1</item>
            <item name="sortOrder" xsi:type="number">94</item>
            <item name="required" xsi:type="boolean">false</item>
            <item name="listens" xsi:type="array">
                <item name="${ $.namespace }.${ $.namespace }:responseData" xsi:type="string">setParsed</item>
            </item>
        </item>
    </argument>
</field>

, что приводит к отображению компонента с несколькими выбранными категориями, это так же, как у magento при выборе категорий в продукте. Я сделал внутреннюю модель для сохранения массива в строку через запятую. Проблема в том, что я получаю данные даже после того, как я их очищаю.

/**
 * @param DataObject $dataObject
 * @return $this
 */
public function beforeSave($dataObject)
{
    $attributeCode = $this->getAttribute()->getName();
    if (in_array($attributeCode, self::ATTRIBUTE_CODES)) {
        $data = $dataObject->getData($attributeCode); // has the category id array even though I cleared the input in the form before submitting

// $ _POST не будет иметь этих данных, так почему же у $ dataObject все еще есть эти данные?

Я добавил атрибут, подобный этому (пример поставщика и имени модуля замаскирован в примере):

    $result = $eavSetup->addAttribute(
            \Magento\Catalog\Model\Category::ENTITY,
            'related_categories',
            [
                'backend' => 'VENDOR\MODULE\Model\Category\Attribute\Backend\Custom',
                'type'                      => 'text',
                'label'                     => 'Related external categories',
                'input'                     => 'multiselect',
                'required'                  => false,
                'sort_order'                => 94,
                'global'                    => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                'group'                     => 'General Information',
                'used_in_product_listing'   => true,
                'visible_on_front'          => true,
                'is_used_in_grid'           => true,
                'is_visible_in_grid'        => false,
                'is_filterable_in_grid'     => true,
            ]
        );

Итак, чтобы подвести итог:

- показывает, что компонент пользовательского интерфейса - я могу выбрать несколько категорий - я могу сохранить их успешно - сохраненные элементы предварительно выбираются правильно при возврате на страницу редактирования категории -Я удаляю все выбранные категории -Я нажимаю сохранить -Мне осталась одна категория, которая все еще сохраняется и выбирается в элементе.

Что я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...