Модуль пользовательских шаблонов страницы товара в зависимости от категории для 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 приветствуются.
A downloadable file is attached to this product.
oc-custom_category_template_jsonld_price-main.zip
Number of downloads 1
- Availability
- Free
- Purpose or Category
- Menu, Design & Appearance
- OpenCart Version
- 3.0.x.x
Content author
Online
webitproff
Last logged: 2026-07-19 00:35
Чем могу помочь?
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.
Разработки на GitHub бесплатно
Telegram
- 2025-12-04 16:59
- 2026-01-14 01:12
Related and similar products
Market PRO Showcase
CMS, Script and Engine for an online storefront, infoproduct shop and digital goods store. Different prices in different currencies. Online cryptocurrency payments for goods and services.