Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

2025-08-19 01:24

Пример «Тип доставки»

Экстраполя в модуле MultiStore позволяют добавлять пользовательские поля к товарам, расширяя функционал без изменения кода. Это руководство описывает процесс создания экстраполя «Тип доставки» (delivery_type) с вариантами доставки от выдуманных компаний (AstroFreight, QuantumExpress, GalaCourier), его настройку в админ-панели, вывод в шаблонах и использование на страницах создания, редактирования и просмотра карточки товара. Основано на коде модуля MultiStore (Cotonti Siena 0.9.26, PHP 8.4).

1. Создание экстраполя в админ-панели

Экстраполя создаются через админ-панель Cotonti в разделе «Управление сайтом» → «Экстраполя» → «Mstore».

  1. Перейти в админ-панель:
    • URL: admin?m=extrafields&n=cot_mstore.
    • Требуются права администратора (cot_auth('admin', 'extrafields', 'A')).
  2. Добавить новое поле:
    • Нажать «Добавить экстраполе».
    • Заполнить параметры:
      • Имя поля: delivery_type (будет сохранено как msitem_delivery_type в таблице cot_mstore).
      • Заголовок: «Тип доставки» (локализованное название, отображается в формах, берётся из Cot::$L['mstore_delivery_type'] или имени поля).
      • Тип поля: select (выпадающий список).
      • Параметры: Список значений в формате ключ=значение, разделённые запятой:
        • astro=AstroFreight
        • quantum=QuantumExpress
        • gala=GalaCourier
      • Обязательное: Нет (по умолчанию, можно включить).
      • Парсер: none (без обработки, так как это выбор из списка).
      • HTML-атрибуты: class="form-control" (для стилизации).
    • Сохранить. Поле добавляется в Cot::$extrafields[Cot::$db->mstore] и в таблицу cot_mstore (столбец msitem_delivery_type, тип varchar(255)).
  3. Локализация:
    • Для отображения заголовка поля в интерфейсе добавить в mstore.ru.lang.php:

      $L['mstore_delivery_type'] = 'Тип доставки';
                          
    • Поле автоматически регистрируется в mstore.extrafields.php (см. $extra_whitelist[$db_mstore]['tags']).

2. Вывод экстраполя в шаблонах

Экстраполя автоматически поддерживаются в шаблонах благодаря mstore.extrafields.php. Для delivery_type доступны теги в различных шаблонах:

  • Список товаров (mstore.list.tpl):
    • LIST_ROW_DELIVERY_TYPE: Значение поля (например, «AstroFreight»).
    • LIST_ROW_DELIVERY_TYPE_TITLE: Заголовок («Тип доставки»).
    • LIST_TOP_DELIVERY_TYPE: Для заголовков в таблице списков.
  • Карточка товара (mstore.tpl):
    • MSTORE_DELIVERY_TYPE: Значение поля.
    • MSTORE_DELIVERY_TYPE_TITLE: Заголовок.
  • Форма добавления (mstore.add.tpl):
    • MSTOREADD_FORM_DELIVERY_TYPE: Поле ввода (выпадающий список).
    • MSTOREADD_FORM_DELIVERY_TYPE_TITLE: Заголовок.
  • Форма редактирования (mstore.edit.tpl):
    • MSTOREEDIT_FORM_DELIVERY_TYPE: Поле ввода.
    • MSTOREEDIT_FORM_DELIVERY_TYPE_TITLE: Заголовок.
  • Другие шаблоны: news.tpl, recentitems.mstore.tpl используют MSTORE_ROW_DELIVERY_TYPE.

Пример шаблона (mstore.tpl):

<div>
    <label>{MSTORE_DELIVERY_TYPE_TITLE}:</label>
    <p>{MSTORE_DELIVERY_TYPE}</p>
</div>
    

Это отобразит: «Тип доставки: AstroFreight» (или другой выбранный вариант).

3. Использование экстраполя на странице создания товара

Страница создания (mstore.add.php) позволяет добавлять товар с заполнением экстраполя delivery_type.

  1. Доступ:
    • URL: mstore?m=add&c=[cat].
    • Требуются права на запись (cot_auth('mstore', 'any', 'W'), или в категории, если указана).
    • Если категория заблокирована (Cot::$structure['mstore'][$cat]['locked']), доступ только для админов.
  2. Форма:
    • Шаблон: mstore.add.[cat_code].tpl или mstore.add.tpl.
    • Поле delivery_type генерируется через cot_build_extrafields('rmsitemdelivery_type', $exfld, $data), где $data = $ritem['msitem_delivery_type'].
    • Тег: MSTOREADD_FORM_DELIVERY_TYPE — HTML-код выпадающего списка с вариантами (astro=AstroFreight, quantum=QuantumExpress, gala=GalaCourier).
    • Тег: MSTOREADD_FORM_DELIVERY_TYPE_TITLE — «Тип доставки».
    • Пример в mstore.add.tpl:

      <div class="form-group">
          <label>{MSTOREADD_FORM_DELIVERY_TYPE_TITLE}</label>
          {MSTOREADD_FORM_DELIVERY_TYPE}
      </div>
                          
    • Отправка формы на mstore?m=add&a=add&c=[cat].
  3. Обработка:
    • Импорт данных: cot_mstore_import('POST', [], Cot::$usr) обрабатывает rmsitemdelivery_type.
    • Валидация: cot_mstore_validate($ritem) проверяет обязательность поля, если включено.
    • Сохранение: cot_mstore_add($ritem, Cot::$usr) добавляет товар в cot_mstore, включая msitem_delivery_type.
    • Статус: Если Cot::$cfg['mstore']['mstoreautovalidate'] и пользователь — админ, msitem_state=0 (опубликован), иначе msitem_state=1 (на рассмотрении) или msitem_state=2 (черновик).
    • Редирект:
      • Опубликован: На страницу товара (mstore?c=[cat]&id=[id] или mstore?c=[cat]&al=[alias]).
      • На рассмотрении: На message?msg=300.
      • Черновик: На mstore?m=edit&id=[id] с сообщением mstore_savedasdraft.
  4. Клонирование:
    • Если clone=[id], данные загружаются из cot_mstore по ID, включая msitem_delivery_type.
    • Поле отображается с сохранённым значением (например, astro).

4. Использование экстраполя на странице редактирования товара

Страница редактирования (mstore.edit.php, не предоставлен, но предполагается аналогичная логика) позволяет изменять товар.

  1. Доступ:
    • URL: mstore?m=edit&id=[id].
    • Требуются права на запись в категории или владение товаром (Cot::$usr['id'] == $item['msitem_ownerid']).
  2. Форма:
    • Шаблон: mstore.edit.[cat_code].tpl или mstore.edit.tpl.
    • Поле delivery_type генерируется через cot_build_extrafields('rmsitemdelivery_type', $exfld, $item['msitem_delivery_type']).
    • Теги: MSTOREEDIT_FORM_DELIVERY_TYPE и MSTOREEDIT_FORM_DELIVERY_TYPE_TITLE.
    • Пример в mstore.edit.tpl:

      <div class="form-group">
          <label>{MSTOREEDIT_FORM_DELIVERY_TYPE_TITLE}</label>
          {MSTOREEDIT_FORM_DELIVERY_TYPE}
      </div>
                          
  3. Обработка:
    • Импорт данных: Аналогично cot_mstore_import.
    • Обновление: Через cot_mstore_update (предполагается), сохраняет msitem_delivery_type в cot_mstore.
    • Редирект: На страницу товара или редактирования с сообщением об успехе.

5. Использование экстраполя на странице просмотра карточки товара

Страница просмотра (mstore.main.php) отображает товар с экстраполем.

  1. Доступ:
    • URL: mstore?c=[cat]&id=[id] или mstore?c=[cat]&al=[alias].
    • Требуются права чтения (cot_auth('mstore', $item['msitem_cat'], 'R')).
    • Если msitem_state=1 или msitem_state=2, доступ только для админов или владельца.
  2. Отображение:
    • Шаблон: mstore.[cat_code].tpl или mstore.tpl.
    • Теги генерируются через cot_generate_mstoretags:
      • MSTORE_DELIVERY_TYPE: Значение поля, например, «AstroFreight» (cot_build_extrafields_data('mstore', $exfld, $item['msitem_delivery_type'], $item['msitem_parser'])).
      • MSTORE_DELIVERY_TYPE_TITLE: Заголовок («Тип доставки»).
      • MSTORE_DELIVERY_TYPE_VALUE: Сырое значение (astro, quantum, gala).
    • Пример в mstore.tpl:

      <div>
          <strong>{MSTORE_DELIVERY_TYPE_TITLE}:</strong> {MSTORE_DELIVERY_TYPE}
      </div>
                          

Визуализация процесса работы с экстраполем

Схема создания и использования экстраполя:

    ____________________________
    | 1. Создание в админке    |
    |   (extrafields, select)  |
    |__________________________|
               |
               |
               V
    ____________________________
    | 2. Регистрация тегов     |
    |   (mstore.extrafields)   |
    |__________________________|
               |
               |
               V
    ____________________________
    | 3. Форма создания/редакт.|
    |   (mstore.add/edit.tpl)  |
    |__________________________|
               |
               |
               V
    ____________________________
    | 4. Импорт и сохранение   |
    |   (cot_mstore_import)    |
    |__________________________|
               |
               |
               V
    ____________________________
    | 5. Отображение в карточке|
    |   (cot_generate_mstoretags)|
    |__________________________|
    
This post was edited by webitproff (2025-08-19 03:58, 9 months ago)
Account