backend_prod_category_dialog

Позволяет добавлять дополнительное содержимое в диалог редактирования категории товаров в новом интерфейсе (2.0). Например, дополнительные поля настроек, обрабатываемые плагином.

Доступно начиная с версии 10.1.0.

Shop-Script

Входящие параметры (передаются по ссылке)

$params['category'] array Информация о категории в виде массива со следующими ключами:
$params['category']['id'] int ID категории.
$params['category']['name'] string Название.
$params['category']['description'] string Описание.
$params['category']['left_key'] int Название.
$params['category']['parent_id'] int ID родительской категории.
$params['category']['depth'] int Уровень в иерархии каталога.
$params['category']['meta_title'] string Заголовок <title>.
$params['category']['meta_keywords'] string Заголовок <meta keywords>.
$params['category']['meta_description'] string Описание страницы <meta description>.
$params['category']['count'] int Количество товаров в статической категории.
$params['category']['type'] int Тип: 0 (статическая), 1 (динамическая).
$params['category']['create_datetime'] datetime Дата и время создания категории.
$params['category']['edit_datetime'] datetime Дата и время обновления категории.
$params['category']['conditions'] array Массив параметров выборки товаров для динамической категории.
$params['category']['status'] bool Статус: 0 (скрыта), 1 (видна на сайте).
$params['category']['sort_products'] sort Значение для ключевого слова LIMIT, используемое в SQL-запросе выборки товаров.
$params['category']['filter'] string|null Список параметров фильтра товаров, доступного покупателям на витрине, перечисленных через запятую: идентификатор 'price' (фильтрация по цене) или ID характеристик товаров.
$params['category']['explode_feature_ids'] array<mixed> Список параметров фильтра товаров, доступного покупателям на витрине, перечисленных через запятую, в виде массива.
$params['category']['allow_filter'] bool Признак доступности фильтра товаров покупателям на витрине.
$params['category']['include_sub_categories'] bool Признак отображения товаров из подкатегорий.
$params['category']['enable_sorting'] bool Признак доступности выбора варианта сортировки товаров на витрине.
$params['category']['params'] string Дополнительные параметры.
$params['category']['og'] array Значения метатегов для соцсетей в виде массива со следующими ключами:
$params['category']['og']['enabled'] bool Признак включённого значения «Использовать метатеги для поисковых систем».
$params['category']['og']['title'] string Заголовок.
$params['category']['og']['description'] string Описание.
$params['category']['og']['image'] string Изображение.
$params['category']['og']['type'] string Тип страницы.
$params['category']['og']['type'] string URL видео.
$params['category']['frontend_urls'] array Список URL категории на всех доступных для неё витринах. Каждый элемент списка — массив со следующими ключами:
$params['category']['frontend_urls'][]['name'] string URL категории.
$params['category']['frontend_urls'][]['url'] string URL категории.
$params['category']['frontend_urls'][]['base'] string URL, на основании которого формируется URL категории.
$params['category']['allow_filter_data'] array Список параметров фильтра товаров в виде массива.
… код плагина …

Результат работы плагина

{$backend_prod_category_dialog}
top: Дополнительное содержимое в верхней части диалога над блоком «Представление на витрине».
storefront: Дополнительное содержимое в нижней части блока «Представление на витрине».
publication: Дополнительное содержимое в нижней части блока «Публикация».
seo: Дополнительное содержимое в нижней части блока «Отображение в поисковых системах».
og: Дополнительное содержимое в нижней части блока «Вид в соцсетях».
bottom: Дополнительное содержимое в нижней части основного содержимого диалога.

Чтобы показать пользователю дополнительные поля настроек, в возвращаемые фрагменты HTML-кода добавьте элементы с атрибутом name. В значении атрибута используйте идентификатор плагина, чтобы отличать дополнительные поля от стандартных и добавленных другими плагинами.

Пример
<input type="text" name="myplugin[field1]" value="">
<textarea name="myplugin[field2]"></textarea>


Элемент POST-запроса с ключом своего плагина нужно считывать и сохранять в обработчике хука category_save.

Пример
$myplugin_fields = waRequest::post('myplugin', [], waRequest::TYPE_ARRAY);
$field1_value = $myplugin_fields['field1'] ?? null;
$field2_value = $myplugin_fields['field2'] ?? null;


Вместо использования дополнительных полей в виде HTML-кода можно также отправлять скрытые значения на сервер только с помощью JavaScript, как показано в примере ниже.
Shop-Script

Пример кода плагина

PHP

function backendProdCategoryDialog(&$params)
{
    return [
        'top' => '...custom HTML code...',
        'storefront' => '...custom HTML code...',
        'publication' => '...custom HTML code...',
        'seo' => '...custom HTML code...',
        'og' => '...custom HTML code...',
        'bottom' => '...custom HTML code...',
    ];
}

HTML/Smarty

<span class="hidden" id="myplugin"></span>
<script>
    (function () {
        const $dialog = $('#myplugin').closest('.wa-dialog');
        const dialog_object = $dialog.data('dialog');

        // Be sure to wait until the dialog's DOM is ready using the 'vue_ready' option.
        // The WYSIWYG text editor's functionality is guaranteed to be available at this point, too.
        dialog_object.options.vue_ready.then(function () {
            const $category_form = $dialog.find('.s-category-form');

            // How to send a hidden value to the server using JavaScript
            $category_form.on('wa_save', function (event) {
                event.form_data['myplugin_field1'] = 'some value string';
            });

            // How to interrupt the form submission if the validation has detected invalid values
            $category_form.on('wa_before_save', function (event) {
                if (mypluginInvalidValuesAreSpecified()) {
                    alert('Warning!');
                    event.preventDefault();
                }
            });
        });
    })();
</script>