"Xtra db row market" v.4.0.0: админ-панель и интеграция с Market Mass Edit

Масштабное обновление плагина "магических" дополнительных полей с различными типами данных модуля товаров, интеграция с плагином массового редактирования, и собственная админка

Рейтинг на основе отзывов:
Звезд получено: 0
Oтзывов всего: 0
Средняя оценка: 0
Опубликовано в: Блог пользователей

Плагин xtradbrowmarket 4.0.0: собственная панель управления и полная интеграция с Market Mass Edit 

Дата: 11 августа 2026
Автор: webitproff
Проект: xtradbrowmarket — Extrafields Market Custom i18n для Cotonti

Оглавление

Введение

Плагин xtradbrowmarket (Extrafields Market Custom i18n) изначально создавался для удобного расширения карточки товара в модуле Market PRO v.5 собственными наборами полей в отдельной таблице БД, с поддержкой мультиязычности. Однако до версии 4.0.0 он не имел выделенного административного интерфейса, а его данные оставались недоступными для массового редактирования.

 

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

- данные в штатных полях таблицы самого модуля Market

- данные экстраполей (магические дополнительные поля с различными типами данных), которые лежат в таблице модуля Market

- данные экстраполей модуля Market, которые лежат в таблицах плагина xtradbrowmarket

В этой статье мы детально разберём новую административную часть xtradbrowmarket, её интерфейс и функциональные возможности, а затем расскажем о том, как была реализована интеграция с marketmassedit и какие преимущества она даёт владельцам интернет-магазинов на Cotonti.

Раздел 1. Новая административная панель xtradbrowmarket

Начиная с версии 4.0.0, плагин добавляет собственный раздел в административные инструменты Cotonti (РасширенияExtrafields Market Custom i18nАдминистрирование). Интерфейс построен по трёхвкладочной схеме с использованием Bootstrap 5 и XTemplate, что обеспечивает современный внешний вид и высокую скорость работы.

1.1. Доступ и навигация

Админка доступна по адресу:

/admin?m=other&p=xtradbrowmarket

Три вкладки переключаются через параметр tab:

  • Statistics (tab=stats) — сводная информация и таблица всех зарегистрированных экстраполей.
  • Edit (tab=edit) — форма массового редактирования основных значений экстраполей.
  • Edit + Translations (tab=i18n) — расширенная форма, включающая переводы на дополнительные языки.

Все вкладки поддерживают прямые URL, поэтому их можно добавлять в закладки браузера.

1.2. Вкладка «Статистика» — полная картина использования

Первая вкладка даёт администратору быстрый обзор состояния плагина и его интеграции с товарами.

1.2.1. Карточки с ключевыми показателями

В верхней части расположены три контрастных информационных блока:

  • Всего товаров — общее количество товаров в модуле Market (с непустым заголовком). Эта цифра показывает потенциальный охват.
  • Записей в xtradbrowmarket — сколько строк существует в собственной таблице плагина (cot_xtradbrowmarket). Поскольку запись создаётся только при сохранении хотя бы одного поля, этот счётчик отражает, для скольких товаров уже были заполнены данные.
  • Заполненных записей — количество строк, в которых хотя бы одно поле экстраполя не является пустым. Это позволяет оценить, насколько активно используются добавленные поля.

Эти три числа мгновенно дают понять, насколько глубоко внедрены пользовательские поля в каталог.

1.2.2. Таблица параметров экстраполей

Ниже карточек выводится полноценная таблица со всеми полями, зарегистрированными для таблицы cot_xtradbrowmarket. Для каждого поля отображаются:

  • Имя поля (field_name) — техническое имя, используемое, в шаблонах и коде.
  • Тип (field_type) — input, textarea, select, checkbox, datetime и т.д.
  • Описание (field_description) — человекочитаемое пояснение, заданное при создании поля.
  • Варианты (field_variants) — для select, radio, checklistbox — список возможных значений.
  • Параметры (field_params) — дополнительные настройки (например, диапазон для range или формат даты).
  • Значение по умолчанию (field_default).
  • Обязательное (field_required) — да/нет.
  • Включено (field_enabled) — да/нет.

Таким образом, администратор может в одном месте оценить конфигурацию всех дополнительных полей, не заходя в общий раздел «Экстраполя» Cotonti. Это особенно удобно, когда полей много и нужно быстро проверить их типы или варианты, а главное мы имеем картину именно своих "магических полей"

1.3. Вкладка «Редактировать» — эффективное управление данными

Вторая вкладка предназначена для непосредственного изменения значений экстраполей своей таблицы cot_xtradbrowmarket. Она спроектирована так, чтобы свести к минимуму время на поиск нужных товаров и обеспечить быструю корректировку.

1.3.1. Панель фильтрации

Перед таблицей редактирования расположена расширенная поисковая панель, позволяющая отфильтровать товары по нескольким критериям:

  • Поисковая строка — поиск по названию товара (`fieldmrkt_title` из таблицы `cot_market`) или по полному тексту (название + описание fieldmrkt_text), или по коду (артикулу) товара (fieldmrkt_pcod). Переключение между областями поиска осуществляется радиокнопками.
  • ID товара — точный фильтр по числовому идентификатору.
  • Категория — выпадающий список с поддержкой Select2 для удобного выбора категории Market. При выборе родительской категории автоматически включаются все её подкатегории.
  • Статус товара — фильтр по состоянию: все, на модерации (Pending), опубликованные (Published), черновики (Draft).

Фильтры комбинируются, а результаты мгновенно обновляются. После применения отображается информационное сообщение о количестве найденных записей, например: «Найдено 12 записей по запросу "notebooks"».

1.3.2. Таблица (форма) массового редактирования

Основную часть вкладки занимает форма в виде таблицы, строки которой соответствуют записям из cot_xtradbrowmarket, объединённым с товарами (cot_market) через LEFT JOIN.

Колонки таблицы:

  • ID — идентификатор товара, является ссылкой на страницу товара на сайте (открывается в новом окне). Это позволяет быстро перейти к просмотру товара.
  • Название товара — читаемое название из cot_market, помогает ориентироваться.
  • Динамические колонки — по одной колонке на каждое зарегистрированное "магическое поле". Заголовки колонок берутся из локализованных названий полей (через функцию cot_extrafield_title из API Extrafields Cotonti).

В каждой ячейке динамической колонки выводится форма ввода, соответствующая типу поля:

  • Для input, textarea — текстовое поле/область.
  • Для select — выпадающий список с вариантами.
  • Для checkbox — флажок.
  • Для datetime — набор полей для выбора даты и времени.
  • Для country — селект с автодополнением стран.
  • И так далее — все типы, поддерживаемые API Extrafields.

Благодаря использованию функции cot_build_extrafields, каждое поле генерируется точно так же, как в стандартной форме редактирования товара. Это гарантирует корректную обработку значений на стороне сервера.

1.3.3. Сохранение и интеллектуальное обновление

Под таблицей находится кнопка «Сохранить» (Update). При нажатии отправляется POST-запрос со всеми изменёнными данными.

Логика сохранения построена на сравнении новых значений со старыми (предварительно загружается текущая запись через функцию xtradbrowmarket_load). Изменения применяются только к тем полям, которые действительно отличаются. После сохранения плагин подсчитывает количество реально обновлённых товаров и выводит точное сообщение, например: «Обновлено записей: 2». Это исключает ложное ощущение изменений, когда администратор просто нажал кнопку, не меняя данных.

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

1.3.4. Пагинация

Таблица поддерживает разбивку на страницы. Количество элементов на странице задаётся в настройках плагина (по умолчанию 20). Навигация (pagenav) отображается как над, так и под таблицей, и корректно сохраняет все активные фильтры в URL.

1.4. Вкладка «Редактировать + Переводы» — мультиязычное управление

Третья вкладка расширяет функциональность предыдущей, добавляя поддержку переводов для текстовых полей. Она становится доступной, когда в настройках плагина активирована мультиязычность (xtradbrowmarket_i18n_use = 1).

1.4.1. Индикация состояния i18n

Перед формой редактирования выводится предупреждение: зелёное информационное сообщение, если мультиязычность включена, или жёлтое предупреждение, если отключена. Это позволяет сразу понять, будут ли отображаться поля переводов.

1.4.2. Структура таблицы с переводами

Таблица аналогична вкладке «Редактировать», но для каждого экстраполя, тип которого input или textarea, под основным полем выводится одно или несколько дополнительных полей — по одному на каждый активный дополнительный язык.

Например, если настроены английский (en) и украинский (ua) как дополнительные языки, то под полем page_h1 (основной язык — русский) появятся два дополнительных текстовых поля с метками EN и UA. Заголовки колонок при этом становятся двухстрочными: сверху название поля, снизу — код языка.

1.4.3. Сохранение переводов

Механизм сохранения разделён:

  1. Основное значение (для языка по умолчанию) сохраняется в таблицу `cot_xtradbrowmarket`.
  2. Переводы сохраняются в таблицу `cot_xtradbrowmarket_i18n` вызовом функции xtradbrowmarket_i18n_save.

Система учитывает изменения как в основном поле, так и в любом из переводов. Если были изменены только переводы, а основное поле осталось прежним, счётчик обновлённых записей всё равно увеличится. Таким образом, администратор получает точную обратную связь.

Фильтры и пагинация работают идентично вкладке «Редактировать», обеспечивая единый пользовательский опыт.

1.5. Технические детали реализации админки

Новая панель управления построена по тем же принципам, что и админки плагинов marketmassedit, aliasmarketpro, aliaspagepro и многие другие. Это гарантирует совместимость и привычный интерфейс для администраторов, уже знакомых с этими инструментами. Все эти расширения всегда доступны бесплатно либо в репозиториях разработчика либо в маркетплейсе расширений для Cotonti

  • Безопасность: Для предотвращения SQL-ошибок из-за отсутствующих колонок используется проверка реальной структуры таблицы (SHOW COLUMNS FROM) с фильтрацией только «своих» полей. Поля, добавляемые через JOIN из других таблиц, не фильтруются.
  • Динамическое построение форм: Все элементы форм создаются стандартными функциями Cotonti (cot_build_extrafields, cot_inputbox, cot_selectbox и т.д.), что гарантирует корректную обработку данных и соответствие ожидаемому HTML.
  • Защита от дублирования: Повторяющиеся имена колонок удаляются через array_unique, а объединение массивов после фильтрации гарантирует, что поля из xtradbrowmarket не будут потеряны.
  • Интеграция с мультиязычностью: Логика определения активных дополнительных языков полностью повторяет настройки плагина и используется как в интерфейсе, так и при сохранении.

Благодаря продуманной архитектуре, администратор получает мощный инструмент для управления "магическими" полями товаров, который органично вписывается в экосистему Cotonti. Плагин Extrafields Market Custom i18n - это пока первое и единственное расширение в конструкторе веб-приложений Cotonti, которое имеет собственную админку и интерфейс для управления данными экстраполей сразу в одном месте. Мы видим слева списком названия товаров со ссылками и то, что уже лежит в дополнительных полях каждой карточки товара. Все это можем редактировать в одном интерфейсе, с хорошей формой поиска. Это всё экономит кучу времени, потому что раньше для решения этих задач приходилось открывать каждый товар отдельно и отдельно его редактировать, что бы внести правки или заполнить нужные нам поля.

Раздел 2. Глубокая интеграция с плагином Market Mass Edit

Одним из главных нововведений версии 4.0.0 стала возможность массового редактирования полей xtradbrowmarket прямо в интерфейсе плагина Market Mass Edit. Это стало возможным благодаря системе хуков, которая позволяет расширять функциональность без изменения исходного кода.

2.1. Что такое Market Mass Edit

Market Mass Edit — это административный плагин, предоставляющий удобный интерфейс для быстрого просмотра и массового редактирования товаров модуля Market. Он добавляет в раздел «Инструменты» (РасширенияMarket Mass EditАдминистрирование) вкладки:

  • Список товаров — поиск, фильтрация по категории, статусу, коду товара.
  • Массовое редактирование — таблица, в которой можно одновременно изменять заголовки, алиасы, мета-теги, категории, цены, статусы и другие стандартные поля.

Однако до интеграции с xtradbrowmarket его возможности ограничивались только полями, хранящимися непосредственно в таблице cot_market. Пользовательские экстраполя из cot_xtradbrowmarket оставались невидимыми, и для их изменения приходилось открывать каждую страницу товара отдельно.

2.2. Архитектура интеграции: хуки как ключевой механизм

Cotonti позволяет расширять функциональность через хуки — точки в коде, в которые система включает зарегистрированные обработчики. Разработчики marketmassedit предусмотрели несколько хуков, следуя примеру pagemassedit (плагина для страниц). Именно эти хуки использованы для интеграции.

Плагин xtradbrowmarket регистрирует пять обработчиков в своей папке plugins/xtradbrowmarket/:

  1. marketmassedit.massedit.sql.fields — добавляет колонки в SQL-запрос и сигнализирует о необходимости LEFT JOIN.
  2. marketmassedit.massedit.flags — устанавливает флаг видимости SHOW_XTRA для шаблона.
  3. marketmassedit.massedit.headers — выводит заголовки дополнительных колонок.
  4. marketmassedit.massedit.loop — для каждой строки таблицы генерирует поля ввода с актуальными значениями.
  5. marketmassedit.massedit.save — сохраняет изменённые данные после отправки формы.

Все обработчики автоматически подключаются, если плагин xtradbrowmarket активен, и никак не влияют на работу marketmassedit при отключении.

2.3. Файлы-обработчики: детальный разбор

2.3.1. xtradbrowmarket.marketmassedit.massedit.sql.fields.php

$selectFields[] = Cot::$db->xtradbrowmarket . '.*';
$needXtraJoin = Cot::$db->xtradbrowmarket;

Этот простой код добавляет все колонки таблицы cot_xtradbrowmarket в список выбираемых полей и сообщает marketmassedit, что требуется выполнить LEFT JOIN с этой таблицей по ключу itempagid = fieldmrkt_id.

2.3.2. xtradbrowmarket.marketmassedit.massedit.flags.php

$t->assign('SHOW_XTRA', 1);

Устанавливает флаг, который шаблон marketmassedit использует для отображения дополнительных колонок.

2.3.3. xtradbrowmarket.marketmassedit.massedit.headers.php

$extrafields = xtradbrowmarket_getExtrafields();
if (!empty($extrafields)) {
    foreach ($extrafields as $exfld) {
        $t->assign('XTRA_HEADER_TITLE', htmlspecialchars(cot_extrafield_title($exfld, 'xtra_')));
        $t->parse('MAIN.XTRA_HEADER');
    }
}

Для каждого зарегистрированного экстраполя генерируется заголовок колонки. Название берётся из локализации (массив $L), что позволяет выводить человекочитаемые заголовки на любом языке. Если его нет в ваших строках локализации, - вставляется значение из записи в field_description

2.3.4. xtradbrowmarket.marketmassedit.massedit.loop.php

$extrafields = xtradbrowmarket_getExtrafields();
if (!empty($extrafields)) {
    foreach ($extrafields as $exfld) {
        $fname = $exfld['field_name'];
        $value = $row[$fname] ?? null;
        $inputName = 'rxtra_' . $fname . '[' . $id . ']';
        $fieldHtml = cot_build_extrafields($inputName, $exfld, $value);
        $t->assign('XTRA_COLUMN_HTML', $fieldHtml);
        $t->parse('MAIN.MANAGE_ROW.XTRA_COLUMN');
    }
}

Здесь $row — текущая строка из объединённого SQL-запроса, содержащая все колонки cot_xtradbrowmarket. Для каждого поля формируется элемент формы с правильным именем (массив rxtra_<имя_поля>[$id]). Функция cot_build_extrafields генерирует HTML в зависимости от типа поля — текстовое поле, textarea, select, checkbox и т.д.

2.3.5. xtradbrowmarket.marketmassedit.massedit.save.php

Сохранение — наиболее ответственная часть. Обработчик получает массив $ids (идентификаторы товаров, отмеченных в форме), затем для каждого ID:

  • Загружает текущие данные из xtradbrowmarket_load.
  • Сравнивает новые значения из $_POST со старыми.
  • Для чекбоксов отдельно проверяет наличие ключа в $_POST (если ключ отсутствует — значит флажок снят, значение 0).
  • Для checklistbox корректно обрабатывает массив, удаляя служебный элемент nullval.
  • Для datetime собирает timestamp из массива день/месяц/год/час/минута.
  • Вызывает xtradbrowmarket_save только при наличии реальных изменений.
  • В конце вызывает cot_extrafield_movefiles для обработки загруженных файлов (если такие поля есть).

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

2.4. Как это выглядит в интерфейсе Market Mass Edit

При активном плагине xtradbrowmarket во вкладке Массовое редактирование плагина marketmassedit происходят следующие изменения:

  1. Заголовки таблицы пополняются колонками, соответствующими каждому экстраполю. Они визуально выделяются цветом (жёлтый фон), чтобы отличаться от стандартных полей.
  2. В каждой строке товара появляются ячейки с элементами ввода для кастомных полей. Администратор может одновременно изменить, например, «Кастомный заголовок» и «Ссылку на поставщика» для десятков товаров.
  3. При сохранении данные из этих колонок обрабатываются хуком save и записываются в cot_xtradbrowmarket. Стандартный механизм marketmassedit при этом также сохраняет все остальные поля, обеспечивая атомарность операции.
  4. Подсветка изменений: marketmassedit самостоятельно отслеживает, какие товары были реально обновлены, и выводит сообщение вида «Обновлено товаров: 5». Плагин xtradbrowmarket не вмешивается в эту логику, он только предоставляет данные для сохранения.

2.5. Преимущества интеграции

  • Экономия времени. Больше не нужно открывать каждый товар по отдельности, чтобы заполнить или скорректировать кастомные поля. Все изменения делаются в одном представлении для десятков и сотен товаров одновременно.
  • Согласованность данных. Использование стандартного механизма экстраполей Cotonti гарантирует, что все значения проходят ту же валидацию и форматирование, что и при обычном редактировании.
  • Гибкость. Интеграция построена на хуках, поэтому другие разработчики могут аналогичным образом подключать свои плагины к marketmassedit.
  • Обратная совместимость. Если xtradbrowmarket отключён, marketmassedit продолжает работать как обычно, без каких-либо ошибок или лишних колонок.

2.6. Технические замечания для разработчиков

При реализации интеграции были учтены все трудности, с которыми столкнулись при аналогичной интеграции pagemassedit и xtradbrowpage:

  • Защита от отсутствующих колонок. marketmassedit динамически проверяет существование колонок в cot_market, но пропускает поля, пришедшие через хук (с точкой в имени), чтобы не потерять xtradbrowmarket.*.
  • Корректная обработка checkbox. Как и в случае с pagemassedit, для чекбоксов предусмотрена специальная проверка, т.к. браузер не отправляет снятые флажки.
  • Поддержка сложных типов. datetime, checklistbox, file и другие типы обрабатываются индивидуально в хуке save, что исключает ошибки типа "count(): Argument #1 must be of type Countable|array".

В итоге пользователи получили бесшовный опыт: "магические" поля стали полноправной частью массового редактирования товаров.

Заключение

Обновление плагина xtradbrowmarket до версии 4.0.0 выводит управление дополнительными полями товаров на качественно новый уровень. Собственная административная панель с продуманными фильтрами, пагинацией и мультиязычной поддержкой делает ежедневную работу с каталогом удобной и эффективной. А глубокая интеграция с Market Mass Edit превращает процесс наполнения и актуализации данных в быструю операцию, доступную буквально в несколько кликов.

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



Отзывы

Отзывов пока нет


Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Обсуждение страницы в Telegram

Похожие страницы

cPanel. Панель управления для CMF Cotonti
1 Cotonti - cPanel. Современная и удобная панель управления для CMF Cotonti. Панель управления, использующая фреймворк
Дизайн, верстка, интеграция в движок сайта. Обзор этапов как руководство.
2  Полный путь создания дизайна сайта: от идеи до готовой «шкурки»Создание дизайна сайта для новичков часто выглядит
Как работает меню категорий в модуле Market PRO v.5+
3 Меню категорий в модуле Market PRO v.5+ спроектировано как иерархическая, динамически управляемая структура, которая
Плагин «Market orders»
4 Плагин «Market orders» - Заказы в магазине, Плагин для оплаты товаров и услуг опубликованных на витрине
Экстраполя и модуль витрины товаров "Market"
5 Экстраполя и модуль витрины товаров "Market". Краткая инструкция по добавлению экстраполей в модулях сборки

Автор контента

webitproff

Оффлайн

Carbonate Sodium

Последняя авторизация: 11.08.2026 12:35

  • Чем могу помочь?

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

  • Разработки на GitHub бесплатно
    • Страница размещена: 11.08.2026 11:32
    • Последнее обновление: 11.08.2026 12:16
    • Язык: