подробная пошаговая инструкция для новичков: как создать экстраполе типа select (выпадающий список) с названием «статус товара», локализовать и название поля, и все его значения на русский язык (и при необходимости — на другие языки), а затем вывести это поле красиво в шаблонах страниц (модуль page).
Цель: чтобы на сайте вместо технических значений in_stock, out_of_stock и т.д. отображались нормальные фразы «В наличии», «Нет в наличии», «Заканчивается», «Под заказ» — и всё это с поддержкой перевода через языковые файлы.
1. Вход в админ-панель
Зайдите в админку → Управление сайтом → Дополнительные поля (Extra fields) (прямая ссылка обычно: /admin.php?m=extrafields)
2. Выберите таблицу, к которой добавляем поле
В большинстве случаев для товаров используется таблица pages (страницы). Нажмите на строку с таблицей cot_pages (или просто «Pages» / «Страницы»).
Если у вас товары находятся в другой таблице (например, плагин market → cot_market), тогда выбирайте соответствующую таблицу.
3. Создаём новое экстраполе
Нажмите кнопку Добавить (Add) вверху или внизу списка.
Заполните поля внимательно:
- Имя поля (Field name) → tovar_status (только латинские буквы, цифры, подчёркивание, без пробелов и русских букв!)
- Тип поля (Field type) → выберите select
- Описание (Description) → Статус товара (это покажется в админке как подсказка, можно писать по-русски)
- Варианты (Variants) → Вставьте ровно так (каждое значение с новой строки):
text
in_stock
out_of_stock
low_stock
preorder
Это внутренние (технические) значения, которые будут сохраняться в базу данных.
- По умолчанию (Default) → in_stock (или оставьте пустым)
- Обязательное (Required) → поставьте галочку, если хотите, чтобы поле обязательно заполнялось
- Парсинг (Parse) → оставьте HTML (по умолчанию)
- Включено (Enabled) → должно быть включено
Остальные поля (HTML, Params) можно оставить пустыми — система сама подставит стандартный <select>.
Нажмите Добавить → Сохранить.
4. Проверяем, что поле появилось в базе
После добавления в списке экстраполей должно появиться поле tovar_status с типом select. Если всё прошло успешно — в таблице cot_pages появится колонка page_tovar_status (VARCHAR 255).
5. Самое важное — локализация (перевод) названия и значений
Cotonti позволяет переводить:
- название самого поля
- каждое значение из выпадающего списка
Для этого нужно создать/отредактировать языковой файл.
Шаг 5.1. Определите текущий язык сайта Зайдите в Конфигурация → Локализация → посмотрите значение defaultlang (обычно ru или en).
Шаг 5.2. Откройте (или создайте) файл Путь: /lang/ВАШ_ЯЗЫК/main.lang.php Пример: /lang/ru/main.lang.php
Если файла нет — скопируйте /lang/en/main.lang.php и переименуйте в ru.
Шаг 5.3. Добавьте в конец файла следующие строки:
PHP
<?php
defined('COT_CODE') or die('Wrong URL');
// Название поля (отображается в форме редактирования и на сайте)
$L['page_tovar_status_title'] = 'Статус товара';
// Значения списка (ключ = имя_поля_значение)
$L['tovar_status_in_stock'] = 'В наличии';
$L['tovar_status_out_of_stock'] = 'Нет в наличии';
$L['tovar_status_low_stock'] = 'Заканчивается';
$L['tovar_status_preorder'] = 'Под заказ';
Важные правила названий строк в $L[]:
- Название поля → page_ИМЯПОЛЯ_title (потому что поле в таблице pages и префикс page_)
- Каждое значение → ИМЯПОЛЯ_ЗНАЧЕНИЕ (без префикса page_ !)
Шаг 5.4. Сохраните файл и очистите кеш Админка → Другие → Очистить кеш (или просто удалите папку /cache/* через FTP, кроме .htaccess и index.html).
6. Проверяем в админке редактирования страницы
Зайдите в любую страницу → вкладка Дополнительно (Extra fields). Должно появиться поле «Статус товара» с выпадающим списком:
- В наличии
- Нет в наличии
- Заканчивается
- Под заказ
Выберите одно значение и сохраните страницу.
7. Вывод на сайте — в шаблонах страниц
Есть два основных способа вывести локализованное значение:
Способ А — самый простой и рекомендуемый (автоматический)
В файле шаблона страницы (например themes/ВАША_ТЕМА/page.tpl или page.tpl вашего модуля/скина):
HTML
<!-- В блоке описания товара или характеристик -->
<div class="product-status">
{PAGE_TOVAR_STATUS_TITLE}: <strong>{PAGE_TOVAR_STATUS}</strong>
</div>
Теги, которые вы получите автоматически:
- {PAGE_TOVAR_STATUS_TITLE} → «Статус товара»
- {PAGE_TOVAR_STATUS} → «В наличии» (или другое переведённое значение)
Способ Б — если нужен сырой код значения (технический)
Иногда требуется сравнивать или выводить иконки/классы по статусу:
HTML
<!-- Пример с классами для стилизации -->
<div class="status status-{PAGE_TOVAR_STATUS_VALUE|strtolower}">
{PAGE_TOVAR_STATUS}
</div>
Тогда добавьте ещё один тег:
- {PAGE_TOVAR_STATUS_VALUE} → in_stock / out_of_stock и т.д. (сырое значение из базы)
Пример полной стилизации:
HTML
<!-- page.tpl -->
<!-- BEGIN: MAIN -->
<div class="product-info">
<!-- Статус товара -->
<div class="status-line">
<span class="label">{PAGE_TOVAR_STATUS_TITLE}:</span>
<span class="value
<!-- IF {PAGE_TOVAR_STATUS_VALUE} == 'in_stock' -->in-stock<!-- ENDIF -->
<!-- IF {PAGE_TOVAR_STATUS_VALUE} == 'out_of_stock' -->out-of-stock<!-- ENDIF -->
<!-- IF {PAGE_TOVAR_STATUS_VALUE} == 'low_stock' -->low-stock<!-- ENDIF -->
<!-- IF {PAGE_TOVAR_STATUS_VALUE} == 'preorder' -->preorder<!-- ENDIF -->
">
{PAGE_TOVAR_STATUS}
</span>
</div>
</div>
<!-- END: MAIN -->
И CSS (пример):
CSS
.status-line .value.in-stock { color: #28a745; font-weight: bold; }
.status-line .value.out-of-stock { color: #dc3545; text-decoration: line-through; }
.status-line .value.low-stock { color: #fd7e14; }
.status-line .value.preorder { color: #007bff; }
8. Дополнительные проверки и типичные ошибки
- Поле не появилось в форме? → проверьте, включено ли оно (Enabled = 1)
- Значения выводятся как in_stock вместо «В наличии»? → → не добавили строки в main.lang.php → не очистили кеш → неверно назвали ключи в $L[]
- Поле не сохраняется? → проверьте права на запись в базу (чаще всего MySQL user)
- Нужно несколько языков? → создайте аналогичный блок в /lang/en/main.lang.php, /lang/ua/main.lang.php и т.д.
9. Итоговый список файлов, которые вы изменили
- Админка → Extra fields → cot_pages → добавили tovar_status (select)
- /lang/ru/main.lang.php → добавили 5 строк локализации
- Шаблон themes/ВАША_ТЕМА/page.tpl → добавили теги {PAGE_TOVAR_STATUS} и т.д.