Модуль пользовательских шаблонов страницы товара в зависимости от категории для ocStore / OpenCart
OpenCart как изменить шаблон страницы товара в зависимости от категории - этот модуль решает вопрос изменения дизайна внешнего вида карточки предложения, учитывая группу.
OpenCart как изменить шаблон страницы товара в зависимости от категории - этот модуль решает вопрос изменения дизайна внешнего вида карточки предложения, учитывая группу.
Утилита кастомизации шаблонов категорий + JSON-LD + Цена для ocStore / OpenCart
Модуль для своих пользовательских шаблонов страниц товаров для разных категорий
Общая информация
Custom Category Template + JSON-LD + Price — это бесплатный модуль на основе OCMOD для ocStore/OpenCart, который улучшает страницы товаров за счёт:
- Назначения кастомных шаблонов для товаров в зависимости от их категории.
- Добавления JSON-LD микроразметки для улучшения SEO.
- Включения информации о цене и валюте для структурированных данных.
- Отображения статуса отсутствия товара на складе.
Модуль модифицирует контроллер страницы товара ( catalog/controller/product/product.php), чтобы динамически выбирать шаблоны для определённых категорий товаров и добавлять JSON-LD структурированные данные для поисковой оптимизации. Модуль протестирован с ocStore 3.0.3.7 + PHP 7.3, но может работать с другими версиями OpenCart 3.x (тестируйте на копии сайта).
Введение для новичков
Модуль Custom Category Template + JSON-LD + Price настраивает отображение страниц товаров в интернет-магазине на ocStore/OpenCart. Он позволяет использовать разные шаблоны для товаров в определённых категориях (например, уникальный шаблон для «Генераторов») и добавляет структурированные данные (JSON-LD) для улучшения восприятия страниц поисковыми системами, такими как Google. Также модуль включает информацию о цене и наличии товаров для улучшения SEO и пользовательского опыта.
Зачем это нужно?
- Кастомные шаблоны: Товары в разных категориях (например, генераторы, электровелосипеды или электросамокаты) могут требовать уникального дизайна или макета. Этот модуль позволяет назначить определённые шаблоны для товаров в зависимости от их категории.
- Улучшение SEO: JSON-LD микроразметка помогает поисковым системам отображать расширенные сниппеты (например, название товара, цена и наличие) в результатах поиска, повышая видимость.
- Цена и наличие: Добавляет цену (включая акционные цены) и статус наличия для отображения или использования в шаблонах.
Важно для новичков: Всегда создавайте резервную копию сайта (файлы и база данных) перед установкой модуля. Используйте FileZilla для файлов и phpMyAdmin для базы данных, чтобы можно было восстановить сайт в случае проблем.
Почему это важно
- Улучшенный пользовательский опыт: Кастомные шаблоны позволяют адаптировать дизайн под разные типы товаров, улучшая взаимодействие клиентов с магазином.
- Преимущества для SEO: JSON-LD микроразметка может улучшить позиции в поисковой выдаче и повысить кликабельность за счёт структурированной информации о товарах.
- Гибкость: Модуль легко расширяем для дополнительных категорий или шаблонов без значительных изменений кода.
Основные возможности
- Динамическое назначение кастомных шаблонов для товаров в зависимости от ID категории.
- Добавление JSON-LD микроразметки для названия товара, описания, цены и валюты.
- Обработка акционных цен (скидок) с возвратом к обычной цене, если акционная отсутствует.
- Индикация статуса отсутствия товара на складе (количество ≤ 0).
- Обработка описаний товаров: удаление HTML-тегов и замена
<br>на пробелы для чистого вывода в JSON-LD. - Использование OCMOD для бесшовной интеграции без переписывания основных файлов.
- Поддержка кодировки UTF-8 для многоязычных магазинов.
- Лёгкий и целенаправленный модуль, изменяющий только контроллер страницы товара.
Структура файлов модуля
Модуль представляет собой OCMOD XML-файл, который изменяет файл catalog/controller/product/product.php. Дополнительных файлов модуль не включает, но он ссылается на кастомные шаблоны, которые должны существовать в директории catalog/view/theme/your_theme/template/product/.
catalog/
├── controller/
│ └── product/
│ └── product.php # Модифицируется OCMOD для добавления логики шаблонов и JSON-LD
├── view/
│ └── theme/
│ └── your_theme/
│ └── template/
│ └── product/
│ ├── product.twig # Шаблон по умолчанию
│ └── product_generator.twig # Пример кастомного шаблона для категории ID 468
Требования
Убедитесь, что ваш магазин соответствует этим требованиям:
- ocStore/OpenCart: Версия 3.0.3.7 (другие версии OpenCart 3.x могут работать, но тестируйте на копии сайта).
- PHP: Версия 7.3. Проверьте в админ-панели: «Система» → «Информация о сервере» → найдите «PHP Version».
- Доступ к файлам: Требуется FTP (через FileZilla) или доступ через панель хостинга (cPanel, DirectAdmin и т.д.) для загрузки OCMOD-файла и кастомных шаблонов.
- Кастомные шаблоны: Файлы кастомных шаблонов (например,
product_generator.twig) должны существовать в директории шаблонов вашей темы. - База данных: MySQL или MariaDB, доступ через phpMyAdmin для резервного копирования.
- Тема: Магазин должен использовать тему, поддерживающую шаблоны Twig.
Как узнать версию PHP?
- Войдите в админ-панель.
- Перейдите в «Система» → «Информация о сервере».
- Найдите строку «PHP Version». Если версия не 7.3, обратитесь к хостинг-провайдеру для обновления.
Подробная инструкция по установке
Следуйте этим шагам, чтобы установить модуль. Инструкция подходит как для новичков, так и для опытных пользователей.
1. Скачивание модуля
- Перейдите на страницу проекта на GitHub: https://github.com/webitproff/oc-custom_category_template_jsonld_price .
- Нажмите «Code» → «Download ZIP» и распакуйте архив или скачайте OCMOD XML-файл напрямую.
- Для продвинутых пользователей: клонируйте репозиторий:
git clone https://github.com/webitproff/oc-custom_category_template_jsonld_price.git.
2. Подготовка кастомных шаблонов
- Убедитесь, что кастомные шаблоны (например,
product_generator.twig) существуют в директории вашей темы:catalog/view/theme/your_theme/template/product/. - Пример: Для категории ID 468 создайте
product_generator.twig, основанный на стандартном шаблонеproduct.twig, и настройте его по вашим требованиям. - Если кастомные шаблоны отсутствуют, модуль вернётся к стандартному шаблону
product/product.twigили выдаст ошибку. Поэтому следует сразу клонировать ваш шублон страницы карточки товараproduct.twigи переименовать его по примеруproduct_cat_name.twig, затем устанавливаем модуль
3. Загрузка OCMOD-файла
- Войдите в админ-панель ocStore/OpenCart.
- Перейдите в Расширения → Установщик расширений.
- Нажмите Загрузить и выберите OCMOD XML-файл (например,
custom_category_template_jsonld_price.ocmod.xml). - Дождитесь успешного завершения загрузки.
4. Установка модуля
- Перейдите в Расширения → Модификаторы.
- Найдите в списке «Custom Category Template + JSON-LD + Price».
- Нажмите кнопку Обновить (иконка с круговыми стрелками), чтобы применить изменения OCMOD.
- Убедитесь, что модификатор включен (зелёная галочка).
5. Очистка кэша
- Перейдите в Система → Инструменты → Менеджер кэша (или аналогичный раздел в вашей админ-панели).
- Очистите кэш системы и кэш шаблонов, чтобы изменения вступили в силу.
6. Проверка установки
- Откройте страницу товара, принадлежащего категории с кастомным шаблоном (например, категория ID 468).
- Проверьте исходный код страницы (ПКМ → «Просмотреть код страницы»), чтобы найти JSON-LD микроразметку в теге
<script type="application/ld+json">. - Убедитесь, что загружается правильный шаблон (например,
product_generator.twigдля категории ID 468).
Использование модуля
1. Назначение кастомных шаблонов
- Модуль получает категории товара с помощью
$this->model_catalog_product->getCategories($product_id). Использует предопределенный массив для сопоставления ID категорий с кастомными шаблонами:
это пример
// ключ это ID вашей категории товаров и соответственно ему значение как имя вашего реального шаблона карточки товара $custom_templates = [ 468 => 'product/product_generator', 455 => 'product/product_ebike', 785 => 'product/product_escooter' ];- Если товар принадлежит категории, указанной в
$custom_templates, модуль использует соответствующий шаблон (например,product/product_generatorдля категории ID 468). В противном случае используется стандартный шаблонproduct/product. - Чтобы добавить дополнительные шаблоны, отредактируйте массив
$custom_templatesв OCMOD XML-файле, раскомментировав или добавив новые записи для других ID категорий и их шаблонов.
- Если товар принадлежит категории, указанной в
2. JSON-LD микроразметка
- Модуль добавляет следующие данные на страницу товара для JSON-LD:
- Название товара:
$data['oct_micro_heading_title']и его JSON-кодированная версия$data['oct_micro_heading_title_json']. - Описание:
$data['oct_description_microdata'](декодированное HTML) и$data['oct_description_microdata_json'](без HTML-тегов, с заменой<br>на пробелы). - Цена:
$data['oct_price_microdata'](использует акционную цену, если она есть, иначе обычную, приведённую к типу float). - Валюта:
$data['oct_price_currency'](по умолчанию 'UAH', если валюта не установлена в сессии). - Статус наличия:
$data['out_of_stock'](true, если количество товара ≤ 0).
- Название товара:
- Эти переменные доступны в вашем Twig-шаблоне для отображения JSON-LD структурированных данных.
3. Настройка шаблонов
- В кастомном шаблоне (например,
product_generator.twig) вы можете использовать новые переменные:{{ oct_micro_heading_title }}: Название товара.{{ oct_description_microdata }}: Полное описание (с HTML).{{ oct_micro_heading_title_json }}: JSON-кодированное название.{{ oct_description_microdata_json }}: JSON-кодированное описание (без HTML-тегов).{{ oct_price_microdata }}: Цена товара (float).{{ oct_price_currency }}: Код валюты (например, 'UAH').{{ out_of_stock }}: Булево значение, указывающее, отсутствует ли товар на складе.
Пример JSON-LD в шаблоне:
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": {{ oct_micro_heading_title_json|raw }}, "description": {{ oct_description_microdata_json|raw }}, "offers": { "@type": "Offer", "price": {{ oct_price_microdata }}, "priceCurrency": "{{ oct_price_currency }}", "availability": "{{ out_of_stock ? 'https://schema.org/OutOfStock' : 'https://schema.org/InStock' }}" } } </script>
4. Рекомендация по резервному копированию
- Перед внесением изменений или тестированием создайте резервную копию файлов сайта (через FileZilla) и базы данных (через phpMyAdmin).
- Тестируйте кастомные шаблоны на тестовом сайте, чтобы не нарушить работу основного магазина.
Принцип работы модуля
- Выбор шаблона:
- Получает категории товара с помощью
$this->model_catalog_product->getCategories($product_id). - Проверяет, соответствует ли ID категории массиву
$custom_templates. - Устанавливает переменную
$templateс путём к соответствующему шаблону или использует по умолчаниюproduct/product.
- Получает категории товара с помощью
- JSON-LD данные:
- Извлекает название и описание товара из
$product_info. - Очищает описание, заменяя
<br>и<br />на пробелы с помощьюpreg_replace. - Кодирует название и описание в JSON с использованием
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHESдля корректной обработки UTF-8 и URL. - Определяет цену (акционную или обычную) и приводит её к типу float для удаления лишних нулей.
- Получает валюту из сессии, по умолчанию 'UAH'.
- Устанавливает статус отсутствия на складе на основе количества товара.
- Извлекает название и описание товара из
- Вывод:
- Заменяет строку рендеринга шаблона по умолчанию (
$this->response->setOutput($this->load->view('product/product', $data))) на динамическую переменную$template.
- Заменяет строку рендеринга шаблона по умолчанию (
Технические детали
- Версия: 1.5
- Совместимость: ocStore 3.0.3.7, OpenCart 3.x (тестируйте на других версиях).
- PHP: 7.3 или выше.
- OCMOD: Модифицирует
catalog/controller/product/product.phpс помощью двух операций:- Добавляет логику перед строкой вывода для установки шаблона и подготовки JSON-LD данных.
- Заменяет путь к шаблону по умолчанию на динамическую переменную
$template.
- Безопасность: Использует стандартные методы сессий и моделей OpenCart, без дополнительных уязвимостей.
- Кодировка: Поддерживает UTF-8 для многоязычных магазинов.
- Зависимости: Требуется модель
catalog/model/catalog/product.phpдля получения категорий и наличие кастомных шаблонов.
Ограничения
- Кастомные шаблоны должны создаваться вручную и размещаться в директории шаблонов темы.
- Поддерживает только категории, указанные в массиве
$custom_templates(например, ID 468 дляproduct_generator). - Не учитывает кастомные модули или нестандартные поля данных товаров.
- Для эффективного использования JSON-LD требуется правильная интеграция в Twig-шаблон.
- Нет автоматического возврата к запасному шаблону, если кастомный шаблон отсутствует (убедитесь, что он существует).
Структура кода
OCMOD XML: custom_category_template_jsonld_price.ocmod.xml
- Изменяемый файл:
catalog/controller/product/product.php - Операции:
- Перед выводом:
- Добавляет логику для проверки категорий товара и назначения кастомного шаблона.
- Подготавливает JSON-LD данные (название, описание, цена, валюта, статус наличия).
Пример добавленного кода:
$template = 'product/product'; if (isset($product_info)) { $categories = $this->model_catalog_product->getCategories($this->request->get['product_id']); $custom_templates = [ 468 => 'product/product_generator', // 455 => 'product/product_ebike', // 785 => 'product/product_escooter' ]; if ($categories) { foreach ($categories as $category) { if (isset($custom_templates[$category['category_id']])) { $template = $custom_templates[$category['category_id']]; break; } } } // JSON-LD fields $data['oct_micro_heading_title'] = $product_info['name']; $data['oct_description_microdata'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); $clean_description = preg_replace('#<br\s*/?>#i', ' ', $data['oct_description_microdata']); $data['oct_micro_heading_title_json'] = json_encode($data['oct_micro_heading_title'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $data['oct_description_microdata_json'] = json_encode(strip_tags($clean_description), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $data['text_buy_description'] = sprintf( $this->language->get('text_buy_description'), $product_info['name'], $product_info['name'] ); $price = $product_info['special'] ?: $product_info['price']; $data['oct_price_microdata'] = (float) $price; $data['oct_price_currency'] = $this->session->data['currency'] ?? 'UAH'; $data['out_of_stock'] = ($product_info['quantity'] <= 0); }
- Перед выводом:
Замена вывода:
Заменяет
$this->response->setOutput($this->load->view('product/product', $data))на:$this->response->setOutput($this->load->view($template, $data));
-
-
- Использует динамическую переменную
$templateдля загрузки нужного шаблона.
- Использует динамическую переменную
-
Требования
- ocStore/OpenCart 3.0.3.7 (или совместимая версия OpenCart 3.x).
- PHP 7.3 и выше.
- Кастомные шаблоны в директории
catalog/view/theme/your_theme/template/product/. - Включённая система OCMOD в админ-панели.
Автор
- webitproff — GitHub
- Дата: 12 октября 2025
- Проект: oc-custom_category_template_jsonld_price
Лицензия
BSD License
Поддержка и вклад
- Создавайте issue: GitHub Issues
- Pull request приветствуются.
К этому товару прикреплен файл для загрузки.
oc-custom_category_template_jsonld_price-main.zip
Количество скачиваний файла 1
- Доступность
- Бесплатно
- Назначение или категория
- Меню, дизайн и внешний вид
- Версия OpenCart
- 3.0.x.x
Автор контента
Онлайн
webitproff
Последняя авторизация: 19.07.2026 01:57
Чем могу помочь?
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.
Разработки на GitHub бесплатно
Telegram
- 04.12.2025 16:59
- 14.01.2026 01:12
Связанные и похожие товары
Витрина Market PRO
CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.