[РЕШЕНО] Показать/скрыть кастомные свойства товара в админке для одного шаблона товара в зависимости от категории

Добый день. Возникла задача — настраивать какие свойства товара (в том числе и дополнительные) будут отображаться в админке для менеджера при использовании одного шаблона товара в зависимости от того в какой категории находится товар.
Хотел бы спросить совет у старших коллег по цеху — насколько мой вариант «живуч» и есть ли какие-то альтернативы?

В метод getFileds в файле msproductdata.js для расширения админки при создании плагина товара miniShop2
можно передать параметр config в котором хранится вся информация о текущем товаре (в том числе и id родителя). Чем я и воспользовался:

miniShop2.plugin.customProperties = {

    getFields: function (config) {
        if (config.record['parent']=='7') {
            // Для категории-родителя "Картины" с id = 7 выводим
            // только необходимые дополнительные свойства.
            return {
                style: {
                    xtype: 'minishop2-combo-autocomplete',
                    description: '<b>[[+style]]</b><br />' + _('ms2_product_style_help')
                },
                author: {
                    xtype: 'minishop2-combo-autocomplete',
                    description: '<b>[[+author]]</b><br />' + _('ms2_product_author_help')
                }
            }
        }
        if (config.record['parent']=='8') {
            // Для категории-родителя "Рамы для картин" с id = 8 выводим
            // только необходимые дополнительные свойства.
            return {
                length: {
                    xtype: 'numberfield',
                    decimalPrecision: 2,
                    description: '<b>[[+length]]</b><br />' + _('ms2_product_length_help')
                },
                width: {
                    xtype: 'numberfield',
                    decimalPrecision: 2,
                    description: '<b>[[+width]]</b><br />' + _('ms2_product_width_help')
                },
                thickness: {
                    xtype: 'numberfield',
                    decimalPrecision: 2,
                    description: '<b>[[+thickness]]</b><br />' + _('ms2_product_thickness_help')
                },
                // Кроме того, таким нехитрым extjs-способом можно скрыть в админке
                // стандартные поля miniShop2, если они Вам не нужны,
                // например: color,size,article для конкретной категории.
                // В моём случае размеры для Картин нужны, а для Рамок - нет.
                size: {
                    hidden: true,
                    visible: false
                }
            }
        }
    },

    getColumns: function () {
        // Здесь все выводится так же как описано в инструкции по расширению.
        return {
            style: {
                width: 50,
                sortable: false,
                editor: {
                    xtype: 'minishop2-combo-autocomplete',
                    name: 'style'
                }
            },
            author: {
                width: 50,
                sortable: true,
                editor: {
                    xtype: 'minishop2-combo-autocomplete',
                    name: 'author'
                }
            },
            length: {
                width: 50,
                sortable: false,
                editor: {
                    xtype: 'numberfield',
                    name: 'length'
                }
            },
            width: {
                width: 50,
                sortable: false,
                editor: {
                    xtype: 'numberfield',
                    name: 'width'
                }
            },
            thickness: {
                width: 50,
                sortable: false,
                editor: {
                    xtype: 'numberfield',
                    name: 'thickness'
                }
            }
        }
    }
};
Данное решение позволяет гибко настроить параметры товаров в админке для менеджера с ипользованием одного шаблона. Вот то, что получилось реализовать используя этот метод — два разных товара в разных категориях с одним шаблоном товара:



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

Буду признателен за любую конструктивную критику или подсказку другого решения, которое лучше подойдёт для данной задачи.

UPD
Нашел вот такой более изящный и правильный способ — через твшку для родителя-категории и плагин который в админке подменяет значение системной настройки ms2_product_extra_fields. Оказывается, нужно просто было хорошо поискать.
Владислав
17 мая 2019, 18:40
modx.pro
828
+1

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0