Страницы, статьи и новости
Инструменты и плагины
Заготовка заголовок


Описание как пример заготовки. Пример текстового контента для дальнейшей кастомизации шаблона "Index36".

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

19.08.2025 01:39

Динамический вывод экстраполей в MultiStore: Руководство для администраторов

Руководство описывает настройку шаблонов модуля MultiStore (Cotonti Siena 0.9.26, PHP 8.4) для динамического вывода всех экстраполей таблицы cot_mstore без ручного добавления тегов для новых полей. Используется пример экстраполя «Тип доставки» (delivery_type) с вариантами AstroFreight, QuantumExpress, GalaCourier. Основано на коде mstore.extrafields.php, mstore.add.php, mstore.list.php, mstore.main.php, mstore.functions.php, mstore.ru.lang.php.

1. Принцип динамического вывода

Экстраполя регистрируются в mstore.extrafields.php через $extra_whitelist[$db_mstore]['tags'], задающий теги для шаблонов: LIST_ROW_XXXXX, MSTORE_XXXXX, MSTOREADD_FORM_XXXXX, MSTOREEDIT_FORM_XXXXX, MSTORE_ROW_XXXXX. В PHP-коде цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld) генерирует теги (например, MSTOREADD_FORM_DELIVERY_TYPE) и парсит блоки MAIN.EXTRAFLD, LIST_ROW.EXTRAFLD, MSTORE_ROW.EXTRAFLD через $t->parse, обеспечивая автоматический вывод всех экстраполей.

2. Настройка шаблонов

Шаблоны используют блоки MAIN.EXTRAFLD, LIST_ROW.EXTRAFLD, MSTORE_ROW.EXTRAFLD для вывода экстраполей.

2.1. Список товаров (mstore.list.tpl)

Шаблон отображает список товаров. Экстраполя выводятся через LIST_ROW.EXTRAFLD.

  • Код шаблона:
<!-- BEGIN: MAIN -->
<table>
    <tr>
        <th>{LIST_TOP_TITLE}</th>
        <!-- BEGIN: LIST_TOP_EXTRAFLD -->
        <th>{LIST_TOP_EXTRAFLD_TITLE}</th>
        <!-- END: LIST_TOP_EXTRAFLD -->
    </tr>
    <!-- BEGIN: LIST_ROW -->
    <tr>
        <td><a href="{LIST_ROW_URL}">{LIST_ROW_TITLE}</a></td>
        <!-- BEGIN: EXTRAFLD -->
        <td>{LIST_ROW_EXTRAFLD}</td>
        <!-- END: EXTRAFLD -->
    </tr>
    <!-- END: LIST_ROW -->
</table>
<!-- END: MAIN -->

           

  • Как работает:
    • В mstore.list.php цикл foreach ($sqllist_rowset as $item) вызывает cot_generate_mstoretags($item, 'LIST_ROW_', $itemListTruncateText, Cot::$usr['isadmin'], false, '', $backUrl).
    • В mstore.functions.php функция cot_generate_mstoretags содержит цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld), который генерирует теги:
      • LIST_ROW_DELIVERY_TYPE: значение поля (например, «AstroFreight») через cot_build_extrafields_data('mstore', $exfld, $item_data['msitem_' . $exfld['field_name']], $item_data['msitem_parser']).
      • LIST_ROW_DELIVERY_TYPE_TITLE: заголовок («Тип доставки») через cot_extrafield_title($exfld, 'mstore_').
      • LIST_ROW_DELIVERY_TYPE_VALUE: сырое значение (например, astro).
    • Теги LIST_ROW_EXTRAFLD и LIST_TOP_EXTRAFLD_TITLE формируются в цикле и парсятся через $t->parse('MAIN.LIST_ROW.EXTRAFLD').
    • Блок LIST_TOP_EXTRAFLD выводит заголовки (например, «Тип доставки»).
    • Блок LIST_ROW.EXTRAFLD выводит значения (например, «AstroFreight»).
  • Пример результата:
    • Таблица с колонками: «Название», «Тип доставки».
    • Строка: «Товар 1», «AstroFreight».

2.2. Карточка товара (mstore.tpl)

Шаблон отображает страницу товара. Экстраполя выводятся через MAIN.EXTRAFLD.

  • Код шаблона:

    <!-- BEGIN: MAIN -->
    <h1>{MSTORE_TITLE}</h1>
    <div>{MSTORE_TEXT}</div>
    <!-- BEGIN: EXTRAFLD -->
    <div class="form-group">
        <label>{MSTORE_EXTRAFLD_TITLE}:</label>
        <p>{MSTORE_EXTRAFLD}</p>
    </div>
    <!-- END: EXTRAFLD -->
    <!-- END: MAIN -->            
  • Как работает:
    • В mstore.main.php вызывается cot_generate_mstoretags($item, 'MSTORE_').
    • В mstore.functions.php функция cot_generate_mstoretags использует цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld), генерируя теги:
      • MSTORE_DELIVERY_TYPE: значение (например, «AstroFreight»).
      • MSTORE_DELIVERY_TYPE_TITLE: заголовок («Тип доставки»).
      • MSTORE_DELIVERY_TYPE_VALUE: сырое значение (astro).
    • Теги MSTORE_EXTRAFLD и MSTORE_EXTRAFLD_TITLE формируются в цикле и парсятся через $t->parse('MAIN.EXTRAFLD').
  • Пример результата:
    • Вывод: «Тип доставки: AstroFreight».

2.3. Форма добавления товара (mstore.add.tpl)

Шаблон формы добавления. Экстраполя выводятся через MAIN.EXTRAFLD.

  • Код шаблона:

    <!-- BEGIN: MAIN -->
    <form action="{MSTOREADD_FORM_SEND}" method="post">
        <div class="form-group">
            <label>{MSTOREADD_FORM_TITLE_TITLE}</label>
            {MSTOREADD_FORM_TITLE}
        </div>
        <!-- BEGIN: EXTRAFLD -->
        <div class="form-group">
            <label>{MSTOREADD_FORM_EXTRAFLD_TITLE}</label>
            {MSTOREADD_FORM_EXTRAFLD}
        </div>
        <!-- END: EXTRAFLD -->
        <button type="submit">Добавить</button>
    </form>
    <!-- END: MAIN -->
                
  • Как работает:
    • В mstore.add.php цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld) генерирует теги:
      • MSTOREADD_FORM_DELIVERY_TYPE: HTML-элемент (<select> с вариантами AstroFreight, QuantumExpress, GalaCourier) через cot_build_extrafields('rmsitemdelivery_type', $exfld, $ritem['msitem_delivery_type']).
      • MSTOREADD_FORM_DELIVERY_TYPE_TITLE: заголовок («Тип доставки») через cot_extrafield_title($exfld, 'mstore_').
      • MSTOREADD_FORM_EXTRAFLD, MSTOREADD_FORM_EXTRAFLD_TITLE: универсальные теги.
    • Метод $t->parse('MAIN.EXTRAFLD') рендерит блок.
  • Пример результата:
    • Форма с полем «Тип доставки» и выпадающим списком (astro=AstroFreight, quantum=QuantumExpress, gala=GalaCourier).

2.4. Форма редактирования товара (mstore.edit.tpl)

Шаблон формы редактирования. Экстраполя выводятся через MAIN.EXTRAFLD.

  • Код шаблона:

    <!-- BEGIN: MAIN -->
    <form action="{MSTOREEDIT_FORM_SEND}" method="post">
        <div class="form-group">
            <label>{MSTOREEDIT_FORM_TITLE_TITLE}</label>
            {MSTOREEDIT_FORM_TITLE}
        </div>
        <!-- BEGIN: EXTRAFLD -->
        <div class="form-group">
            <label>{MSTOREEDIT_FORM_EXTRAFLD_TITLE}</label>
            {MSTOREEDIT_FORM_EXTRAFLD}
        </div>
        <!-- END: EXTRAFLD -->
        <button type="submit">Сохранить</button>
    </form>
    <!-- END: MAIN -->
                
  • Как работает:
    • В mstore.extrafields.php определены теги MSTOREEDIT_FORM_XXXXX, MSTOREEDIT_FORM_XXXXX_TITLE.
    • Аналогично mstore.add.php, предполагается цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld) в mstore.edit.php, генерирующий MSTOREEDIT_FORM_DELIVERY_TYPE (HTML-элемент с текущим значением, например, astro) и MSTOREEDIT_FORM_DELIVERY_TYPE_TITLE.
    • Теги MSTOREEDIT_FORM_EXTRAFLD, MSTOREEDIT_FORM_EXTRAFLD_TITLE парсятся через $t->parse('MAIN.EXTRAFLD').
  • Пример результата:
    • Форма с полем «Тип доставки» и выбранным значением («AstroFreight»).

2.5. Другие шаблоны (news.tpl, recentitems.mstore.tpl)

Шаблоны используют MSTORE_ROW.EXTRAFLD для списков товаров.

  • Код шаблона (recentitems.mstore.tpl):

    <!-- BEGIN: MAIN -->
    <ul>
        <!-- BEGIN: MSTORE_ROW -->
        <li>
            <a href="{MSTORE_ROW_URL}">{MSTORE_ROW_TITLE}</a>
            <!-- BEGIN: EXTRAFLD -->
            <p>{MSTORE_ROW_EXTRAFLD_TITLE}: {MSTORE_ROW_EXTRAFLD}</p>
            <!-- END: EXTRAFLD -->
        </li>
        <!-- END: MSTORE_ROW -->
    </ul>
    <!-- END: MAIN -->
                
  • Как работает:
    • В mstore.extrafields.php определены теги MSTORE_ROW_XXXXX.
    • Функция cot_generate_mstoretags с префиксом MSTORE_ROW_ генерирует MSTORE_ROW_DELIVERY_TYPE, MSTORE_ROW_DELIVERY_TYPE_TITLE, MSTORE_ROW_DELIVERY_TYPE_VALUE.
    • Теги MSTORE_ROW_EXTRAFLD, MSTORE_ROW_EXTRAFLD_TITLE парсятся через $t->parse('MAIN.MSTORE_ROW.EXTRAFLD').
  • Пример результата:
    • Список: «Товар 1», «Тип доставки: AstroFreight».

3. Реализация в коде

  • Регистрация: В mstore.extrafields.php массив $extra_whitelist[$db_mstore]['tags'] задаёт теги для шаблонов (XXXXXdelivery_type).
  • Генерация тегов: В mstore.functions.php функция cot_generate_mstoretags использует цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld) для создания тегов (LIST_ROW_DELIVERY_TYPE, MSTORE_DELIVERY_TYPE).
  • Список товаров: В mstore.list.php цикл foreach ($sqllist_rowset as $item) вызывает cot_generate_mstoretags, присваивая теги и парся MAIN.LIST_ROW.EXTRAFLD.
  • Формы: В mstore.add.php цикл foreach (Cot::$extrafields[Cot::$db->mstore] as $exfld) генерирует MSTOREADD_FORM_DELIVERY_TYPE, MSTOREADD_FORM_EXTRAFLD и парсит MAIN.EXTRAFLD.
  • XTemplate: Блоки MAIN.EXTRAFLD, LIST_ROW.EXTRAFLD, MSTORE_ROW.EXTRAFLD рендерят экстраполя через $t->parse.

4. Добавление нового экстраполя

При добавлении поля (например, color) в админ-панели (admin?m=extrafields&n=cot_mstore):

  • Поле добавляется в Cot::$extrafields[Cot::$db->mstore] и cot_mstore (msitem_color).
  • Теги MSTORE_COLOR, LIST_ROW_COLOR, MSTOREADD_FORM_COLOR генерируются через cot_generate_mstoretags.
  • Блоки MAIN.EXTRAFLD, LIST_ROW.EXTRAFLD, MSTORE_ROW.EXTRAFLD подхватывают поле.
  • Локализация добавляется в mstore.ru.lang.php ($L['mstore_color'] = 'Цвет').

5. Визуализация процесса

    ____________________________
    | 1. Регистрация экстраполей|
    |   (mstore.extrafields)   |
    |__________________________|
               |
               V
    ____________________________
    | 2. Генерация тегов       |
    |   (cot_generate_mstoretags)|
    |__________________________|
               |
               V
    ____________________________
    | 3. Цикл в PHP-коде       |
    |   (foreach extrafields)  |
    |__________________________|
               |
               V
    ____________________________
    | 4. Парсинг блока         |
    |   (MAIN.EXTRAFLD)        |
    |__________________________|
               |
               V
    ____________________________
    | 5. Вывод в интерфейсе    |
    |   (mstore.add/list/edit) |
    |__________________________|
    

6. Пример результата для «Тип доставки»

  • Список товаров: Колонка «Тип доставки» с «AstroFreight».
  • Карточка: «Тип доставки: AstroFreight».
  • Форма добавления: Выпадающий список с AstroFreight, QuantumExpress, GalaCourier.
  • Форма редактирования: Выпадающий список с «AstroFreight».
Отредактировано: webitproff (19.08.2025 13:41, 9 месяцев назад)
Аккаунт