Пример «Тип доставки»
Экстраполя в модуле MultiStore позволяют добавлять пользовательские поля к товарам, расширяя функционал без изменения кода. Это руководство описывает процесс создания экстраполя «Тип доставки» (delivery_type) с вариантами доставки от выдуманных компаний (AstroFreight, QuantumExpress, GalaCourier), его настройку в админ-панели, вывод в шаблонах и использование на страницах создания, редактирования и просмотра карточки товара. Основано на коде модуля MultiStore (Cotonti Siena 0.9.26, PHP 8.4).
1. Создание экстраполя в админ-панели
Экстраполя создаются через админ-панель Cotonti в разделе «Управление сайтом» → «Экстраполя» → «Mstore».
- Перейти в админ-панель:
- URL:
admin?m=extrafields&n=cot_mstore. - Требуются права администратора (
cot_auth('admin', 'extrafields', 'A')).
- URL:
- Добавить новое поле:
- Нажать «Добавить экстраполе».
- Заполнить параметры:
- Имя поля:
delivery_type(будет сохранено какmsitem_delivery_typeв таблицеcot_mstore). - Заголовок: «Тип доставки» (локализованное название, отображается в формах, берётся из
Cot::$L['mstore_delivery_type']или имени поля). - Тип поля:
select(выпадающий список). - Параметры: Список значений в формате
ключ=значение, разделённые запятой:astro=AstroFreightquantum=QuantumExpressgala=GalaCourier
- Обязательное: Нет (по умолчанию, можно включить).
- Парсер:
none(без обработки, так как это выбор из списка). - HTML-атрибуты:
class="form-control"(для стилизации).
- Имя поля:
- Сохранить. Поле добавляется в
Cot::$extrafields[Cot::$db->mstore]и в таблицуcot_mstore(столбецmsitem_delivery_type, тип varchar(255)).
- Локализация:
Для отображения заголовка поля в интерфейсе добавить в
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.
- Доступ:
- URL:
mstore?m=add&c=[cat]. - Требуются права на запись (
cot_auth('mstore', 'any', 'W'), или в категории, если указана). - Если категория заблокирована (
Cot::$structure['mstore'][$cat]['locked']), доступ только для админов.
- URL:
- Форма:
- Шаблон:
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].
- Шаблон:
- Обработка:
- Импорт данных:
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.
- Опубликован: На страницу товара (
- Импорт данных:
- Клонирование:
- Если
clone=[id], данные загружаются изcot_mstoreпо ID, включаяmsitem_delivery_type. - Поле отображается с сохранённым значением (например,
astro).
- Если
4. Использование экстраполя на странице редактирования товара
Страница редактирования (mstore.edit.php, не предоставлен, но предполагается аналогичная логика) позволяет изменять товар.
- Доступ:
- URL:
mstore?m=edit&id=[id]. - Требуются права на запись в категории или владение товаром (
Cot::$usr['id'] == $item['msitem_ownerid']).
- URL:
- Форма:
- Шаблон:
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>
- Шаблон:
- Обработка:
- Импорт данных: Аналогично
cot_mstore_import. - Обновление: Через
cot_mstore_update(предполагается), сохраняетmsitem_delivery_typeвcot_mstore. - Редирект: На страницу товара или редактирования с сообщением об успехе.
- Импорт данных: Аналогично
5. Использование экстраполя на странице просмотра карточки товара
Страница просмотра (mstore.main.php) отображает товар с экстраполем.
- Доступ:
- URL:
mstore?c=[cat]&id=[id]илиmstore?c=[cat]&al=[alias]. - Требуются права чтения (
cot_auth('mstore', $item['msitem_cat'], 'R')). - Если
msitem_state=1илиmsitem_state=2, доступ только для админов или владельца.
- URL:
- Отображение:
- Шаблон:
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)|
|__________________________|