Таблица oc_product_to_layout
Таблица oc_product_to_layout является вспомогательной таблицей, которая устанавливает связь между товарами и макетами (шаблонами страниц) в OpenCart. Она позволяет назначить для конкретного товара индивидуальный макет отображения на разных страницах сайта (например, на странице товара, в категории и т.д.), переопределяя макет, установленный по умолчанию.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
product_id |
int |
Идентификатор товара. Внешний ключ, который связывает запись с конкретным товаром из таблицы oc_product.
|
store_id |
int |
Идентификатор магазина в мультисторе. Внешний ключ для таблицы oc_store. Значение 0 означает, что настройка макета применяется ко всем магазинам.
|
layout_id |
int |
Идентификатор макета (шаблона страницы). Внешний ключ для таблицы oc_layout. Определяет, какой именно макет будет использоваться для отображения страниц, связанных с этим товаром.
|
Как это работает
В админ-панели OpenCart, в карточке редактирования товара, существует вкладка "Дизайн". На этой вкладке можно для каждого товара индивидуально указать макет (Layout), который будет использоваться вместо макета, установленного по умолчанию для маршрута страницы товара (например, product/product).
Когда пользователь открывает страницу товара, система ищет в этой таблице запись с product_id текущего товара и store_id текущего магазина (или запись с store_id = 0). Если такая запись найдена, то для построения страницы будет использован макет с layout_id из найденной записи. Если запись не найдена, система использует макет по умолчанию для данного типа страницы.
Этот механизм предоставляет разработчикам и администраторам гибкость в изменении внешнего вида отдельных страниц товаров без необходимости правки исходного кода системы. Например, для акционного товара можно создать особый макет с выделенной областью для акции и назначить его через эту таблицу.
Приоритет при выборе макета определяется следующим образом: сначала ищется запись для конкретного store_id, если не найдена - ищется запись с store_id = 0, и только если ничего не найдено, используется макет по умолчанию.
Пример SQL-запроса
Выбрать все кастомные макеты для товара с ID 42:
SELECT p2l.*, l.name as layout_name
FROM oc_product_to_layout p2l
LEFT JOIN oc_layout l ON (p2l.layout_id = l.layout_id)
WHERE p2l.product_id = 42;
Смотрите также
-
таблицу
oc_product,
которая содержит основную информацию о товарах -
таблицу
oc_layout,
которая хранит определения макетов -
таблицу
oc_category_to_layout,
которая реализует аналогичный механизм для категорий -
таблицу
oc_information_to_layout,
которая реализует аналогичный механизм для информационных страниц