Сторінки, статті та новини
Інструменти та плагіни
Заготовка заголовок


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

Редагувати шаблон можна на власний розсуд. Якщо у вас немає часу або знань – завжди можна замовити адаптацію шаблону, написавши мені через GitHub або особисті повідомлення на публічній сторінці маркетплейсу цифрових товарів.

18.08.2025 18:41

Процедура добавления и редактирования товаров в MultiStore

Модуль MultiStore (Cotonti Siena 0.9.26, PHP 8.4) позволяет пользователям с правами на запись (auth_write) добавлять и редактировать товары через фронтенд-формы. Процессы реализованы в файлах mstore.add.php (добавление) и mstore.edit.php (редактирование), с использованием функций из mstore.functions.php и классов, таких как MstoreControlService. Описание охватывает структуру базы данных, обязательные поля, импорт данных, валидацию и сохранение.

Структура базы данных

Товары хранятся в таблице cot_mstore (определена в mstore.install.sql). Поля:

  • msitem_id: Уникальный ID (int unsigned, автоинкремент, первичный ключ).
  • msitem_alias: Алиас для URL (varchar(255), по умолчанию '').
  • msitem_state: Состояние (tinyint unsigned, 0=опубликован, 1=на рассмотрении, 2=черновик).
  • msitem_cat: Код категории (varchar(255)).
  • msitem_title: Заголовок (varchar(255)).
  • msitem_desc: Краткое описание (varchar(255), по умолчанию '').
  • msitem_metatitle: Мета-заголовок для SEO (varchar(255), по умолчанию '').
  • msitem_metadesc: Мета-описание (varchar(255), по умолчанию '').
  • msitem_text: Полный текст (mediumtext, null).
  • msitem_costdflt: Стоимость (decimal(10,2), по умолчанию 0.00).
  • msitem_parser: Парсер текста (varchar(64), по умолчанию '').
  • msitem_ownerid: ID владельца (int unsigned, по умолчанию 0).
  • msitem_date: Дата создания (int unsigned, timestamp, по умолчанию 0).
  • msitem_updated: Дата обновления (int unsigned, timestamp, по умолчанию 0).
  • msitem_count: Счетчик просмотров (mediumint unsigned, по умолчанию 0).
  • Экстрафилды: Поля с префиксом msitem_[имя], например, msitem_photo (зависят от настроек).

Индексы: На msitem_cat, msitem_alias, msitem_date, msitem_ownerid, msitem_title.

Обязательные поля (по валидации):

  • msitem_cat: Обязательна, категория не должна быть заблокированной (locked в структуре).
  • msitem_title: Обязателен, минимум 2 символа.
  • msitem_text: Обязателен, если mstoreallowemptytext не включено в конфигурации категории.
  • msitem_alias: Необязателен, но если указан, проверяется формат (без +/?%#&).

Для администраторов доступны поля msitem_ownerid (смена владельца) и msitem_count (изменение просмотров).

Добавление товара

Добавление происходит через форму в mstore.add.php (URL: mstore?m=add или mstore?m=add&c=[категория]).

Процесс добавления

  1. Проверка прав:
    • Импортируется категория через cot_import('c', 'G', 'TXT').
    • Проверяется право на запись: cot_auth('mstore', $c, 'W'). Без прав — ошибка 403.
    • Категория не должна быть заблокированной (locked в Cot::$structure['mstore']) — иначе ошибка 602.
  2. Формирование формы:
    • Хлебные крошки: Формируются через cot_structure_buildpath('mstore', $c) с добавлением "Добавление".
    • Шаблон: mstore.add.tpl или mstore.add.[tpl_категории].
    • Теги формы:
      • MSTOREADD_FORM_CAT_S2: Селект категорий (cot_mstore_selectbox_structure_select2($c, 'rcat', '')).
      • MSTOREADD_FORM_METATITLE: Поле ввода (cot_inputbox('text', 'rmetatitle'), до 255 символов).
      • MSTOREADD_FORM_METADESC: Текстовое поле (cot_textarea('rmetadesc', '', 2, 64), до 255 символов).
      • MSTOREADD_FORM_ALIAS: Поле ввода (cot_inputbox('text', 'ralias'), до 255 символов).
      • MSTOREADD_FORM_TITLE: Поле ввода (cot_inputbox('text', 'rtitle'), до 255 символов).
      • MSTOREADD_FORM_DESCRIPTION: Текстовое поле (cot_textarea('rdesc', '', 2, 64), до 255 символов).
      • MSTOREADD_FORM_OWNER: Имя пользователя (cot_build_user(Cot::$usr)).
      • MSTOREADD_FORM_DATE: Селект даты (cot_selectbox_date($item['msitem_date'], 'long', 'rmsitemdate') + чекбокс "Сейчас").
      • MSTOREADD_FORM_TEXT: Текстовое поле (cot_textarea('rtext', '', 24, 120), с редактором).
      • MSTOREADD_FORM_PARSER: Селект парсеров (cot_selectbox($item['msitem_parser'], 'rmsitemparser', cot_get_parsers())).
      • MSTOREADD_FORM_COSTDFLT: Поле ввода (cot_inputbox('text', 'rcostdflt'), до 10 символов).
      • Экстрафилды: Генерируются через cot_build_extrafields('msitem', Cot::$extrafields[Cot::$db->mstore]).
    • Клонирование: Если clone=[ID], данные загружаются из cot_mstore и заполняют форму.
    • Noindex: Добавляется в head через Cot::$out['meta_noindex'] = true.
  3. Импорт данных:
    • При отправке формы (a=add) данные импортируются через cot_mstore_import('POST', [], Cot::$usr).
    • Поля импорта:
      • msitem_cat: TXT, 255 символов.
      • msitem_alias: TXT, 255 символов.
      • msitem_title: TXT, 255 символов.
      • msitem_desc: TXT, 255 символов.
      • msitem_metatitle: TXT, 255 символов.
      • msitem_metadesc: TXT, 255 символов.
      • msitem_text: HTM (безопасная обработка HTML).
      • msitem_parser: ALP, 64 символа, проверяется наличие в cot_get_parsers().
      • msitem_costdflt: NUM, форматируется как float.
      • msitem_date: Дата через cot_import_date('rmsitemdate'), с опцией "сейчас" (rmsitemdatenow).
      • msitem_updated: Текущее время (time()).
      • msitem_ownerid: Фиксировано Cot::$usr['id'] (для админов — импорт INT).
      • msitem_count: INT (для админов).
      • Экстрафилды: Через cot_import_extrafields('rmsitem', Cot::$extrafields[Cot::$db->mstore]).
    • Парсер: Если не выбран или недоступен, берётся из конфигурации (mstoreparser).
  4. Валидация:
    • Функция cot_mstore_validate($ritem):
      • msitem_cat: Проверяется наличие и отсутствие locked (cot_check(empty($ritem['msitem_cat']) || !isset(Cot::$structure['mstore'][$ritem['msitem_cat']]))).
      • msitem_title: Минимум 2 символа (mb_strlen($ritem['msitem_title']) < 2).
      • msitem_text: Проверяется, если mstoreallowemptytext не включено.
      • msitem_alias: Проверка формата (preg_match('`[+/?%#&]`', $ritem['msitem_alias'])).
    • Ошибки: Добавляются через cot_error, отображаются в шаблоне через cot_display_messages($t).
  5. Сохранение:
    • Функция cot_mstore_add($ritem, Cot::$usr):
      • Проверка уникальности msitem_alias: Если занят, добавляется суффикс (rand 1000-9999).
      • Состояние: STATE_PUBLISHED (0) для админов с автовалидацией (mstoreautovalidate), иначе STATE_PENDING (1).
      • Вставка в cot_mstore через Cot::$db->insert.
      • Обработка файлов экстрафилдов: cot_extrafield_movefiles.
      • Обновление счетчиков: cot_mstore_updateStructureCounters($ritem['msitem_cat']).
      • Лог: cot_log('Add store item #' . $id, 'mstore', 'add', 'done').
      • Очистка кэша: Если включено cache_mstore, очищаются URI товара и категории.
    • Редирект:
      • Опубликован: На страницу товара (cot_mstore_url($ritem, ['id' => $id])).
      • На рассмотрении: Сообщение и редирект на mstore?c=[категория].
      • Черновик: На редактирование (mstore?m=edit&id=[ID]).

Редактирование товара

Редактирование происходит через mstore.edit.php (URL: mstore?m=edit&id=[ID]).

Процесс редактирования

  1. Проверка прав:
    • Импорт ID и категории.
    • Загрузка товара: SELECT p.*, u.* FROM $db_mstore AS p LEFT JOIN $db_users AS u ON u.user_id=p.msitem_ownerid WHERE p.msitem_id=? LIMIT 1.
    • Проверка прав: cot_auth('mstore', $item['msitem_cat'], 'RW'). Без прав — ошибка 403.
    • Если товар не найден — ошибка 404.
  2. Формирование формы:
    • Хлебные крошки: Путь до категории + заголовок товара + "Редактирование".
    • Шаблон: mstore.edit.tpl или mstore.edit.[tpl_категории].
    • Теги формы: Аналогично добавлению, плюс:
      • MSTOREEDIT_FORM_STATE: Числовое состояние.
      • MSTOREEDIT_FORM_STATUS: Текст статуса (cot_mstore_status($item)).
      • MSTOREEDIT_FORM_UPDATED: Дата обновления (cot_date('datetime_medium', $item['msitem_updated'])).
      • MSTOREEDIT_FORM_DELETE: Радиокнопка удаления (cot_radiobox).
      • Для админов: MSTOREEDIT_FORM_OWNER_ID, MSTOREEDIT_FORM_HITS.
    • Мульти-табы: Текст поддерживает разделение на вкладки через [newpage].
    • Noindex: Включен.
  3. Импорт данных:
    • При a=update: cot_mstore_import('POST', $row_item, Cot::$usr), где $row_item — текущие данные.
    • Поля: Те же, что при добавлении, с текущими значениями.
  4. Валидация:
    • cot_mstore_validate($ritem): Проверки как при добавлении, но алиас исключает текущий ID.
  5. Обновление/Удаление:
    • Обновление (cot_mstore_update($id, $ritem)):
      • Проверка уникальности msitem_alias.
      • Обновление: Cot::$db->update(Cot::$db->mstore, $ritem, 'msitem_id=?', $id).
      • Файлы экстрафилдов: cot_extrafield_movefiles.
      • Счетчики: cot_mstore_updateStructureCounters (для старой и новой категории, если изменилась).
      • Лог: cot_log("Edited store item #$id", 'mstore', 'edit', 'done').
      • Очистка кэша.
    • Удаление: Если rdelete=1 и подтверждено (cot_check_xp()), вызывается MstoreControlService::delete($id, $row_item):
      • Транзакция: Удаление файлов, записи, обновление счетчиков.
      • Лог и очистка кэша.
    • Редирект: Аналогично добавлению, или на список товаров при удалении.

Используемые функции из mstore.functions.php

  • cot_mstore_selectbox_structure_select2: Генерирует селект категорий с Select2.
  • cot_mstore_import: Импортирует данные из POST/GET в массив (поля, даты, парсер, экстрафилды).
  • cot_mstore_validate: Проверяет обязательные поля и формат.
  • cot_mstore_add: Сохраняет новый товар в БД.
  • cot_mstore_update: Обновляет товар в БД.
  • cot_mstore_url: Генерирует URL товара для редиректа.
  • cot_mstore_status: Возвращает текстовый статус (published/pending/draft).
  • cot_mstore_updateStructureCounters: Обновляет счетчики категории.
  • cot_generate_mstoretags: Генерирует теги для шаблона (включая админ-ссылки).
  • cot_build_extrafields_data: Форматирует экстрафилды для форм.
  • cot_auth: Проверяет права доступа.
  • cot_log: Логирует действия.

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

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

    ____________________________
    | 1. Открытие формы        |
    |   (m=add или m=edit&id)  |
    |__________________________|
               |
               |
               V
    ____________________________
    | 2. Проверка прав доступа |
    |   (cot_auth, locked cat) |
    |__________________________|
               |
               |
               V
    ____________________________
    | 3. Импорт данных в форму |
    |   (cot_mstore_import)    |
    |__________________________|
               |
               |
               V
    ____________________________
    | 4. Валидация данных      |
    |   (cot_mstore_validate)  |
    |__________________________|
               |
               |
               V
    ____________________________
    | 5. Сохранение/Обновление |
    |   (cot_mstore_add/update)|
    |__________________________|
               |
               |
               V
    ____________________________
    | 6. Редирект (на товар,   |
    |    список или редактир.) |
    |__________________________|
    
Обліковий запис