доброго времени суток!
вот какой вопрос:
предположим есть две категории товаров: телевизоры и телефоны.
как сделать так, что бы все товары из категории "телевизоры" показывались одной схемой, а все "телефоны" другой схемой. тоесть что бы можно было менять внешний вид страниц каждого товара по своему усмотрению.
создание новой схемы (с созданием файлов в контроллере и темплейте), набросом на товары этих схем не помогло, всеравно все товары показываются схемой product/product
заранее благодарен
вот какой вопрос:
предположим есть две категории товаров: телевизоры и телефоны.
как сделать так, что бы все товары из категории "телевизоры" показывались одной схемой, а все "телефоны" другой схемой. тоесть что бы можно было менять внешний вид страниц каждого товара по своему усмотрению.
создание новой схемы (с созданием файлов в контроллере и темплейте), набросом на товары этих схем не помогло, всеравно все товары показываются схемой product/product
заранее благодарен
Я сейчас всё проверил, и сделал вывод, что авторы ОпенКарта эту функциональность до конца не доделали. (но с ними я это ещё не уточнял).
1. Создаём новую схему (с созданием файлов в контроллере и темплейте).
controller\product\product_tv.php
view\product\product_tv.tpl
2. Заходим в отдел схемы и добавляем новую схему: 3. Пристёгиваем новую схему к продукту. 4. Теперь, что-бы это всё работало добавляем код:
Файл: controller/product/product.php
Файл: model/catalog/product.php
1. Создаём новую схему (с созданием файлов в контроллере и темплейте).
controller\product\product_tv.php
view\product\product_tv.tpl
2. Заходим в отдел схемы и добавляем новую схему: 3. Пристёгиваем новую схему к продукту. 4. Теперь, что-бы это всё работало добавляем код:
Файл: controller/product/product.php
Code: Select all
$layout_route = $this->model_catalog_product->getProductLayout($this->request->get['product_id']);
if(!empty($layout_route) && $layout_route != 'product/product')
{
$this->redirect($this->url->link($layout_route, $url . '&product_id=' . $this->request->get['product_id']));
}
Code: Select all
public function getProductLayout($product_id)
{
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_layout INNER JOIN " . DB_PREFIX . "layout_route ON " . DB_PREFIX . "product_to_layout.layout_id = " . DB_PREFIX . "layout_route.layout_id WHERE product_id = '" . (int)$product_id . "' AND " . DB_PREFIX . "product_to_layout.store_id = '" . (int)$this->config->get('config_store_id') . "'");
if ($query->num_rows) {
return $query->row['route'];
} else {
return '';
}
}
Я задал этот вопрос в другом отделе форума, и мне объяснили что "layout overwrite" позволяет определять какие модули будут отображаться на странице продукта или категории, а не для того что бы полностью сменить шаблон.
Когда мы создаём новую схему (layout) (назовём её Product TV и прописываем рут (route) как product/product), то в отделе модулей теперь можно пристёгивать определённые модули к этой новой схеме.
Допустим к стандартной схеме Product у нас пристёгнуты модули А,Б,В.
К новой схеме Product TV мы пристёгиваем модули А,Г,Д.
То-есть если у нас продукт А находится под стандартной схемой то на его странице будут отображаться модули А,Б,В.
А если продукт Б находится под новой схемой то на его странице будут отображаться модули А,Г,Д.
Вот оригинальный ответ:
Когда мы создаём новую схему (layout) (назовём её Product TV и прописываем рут (route) как product/product), то в отделе модулей теперь можно пристёгивать определённые модули к этой новой схеме.
Допустим к стандартной схеме Product у нас пристёгнуты модули А,Б,В.
К новой схеме Product TV мы пристёгиваем модули А,Г,Д.
То-есть если у нас продукт А находится под стандартной схемой то на его странице будут отображаться модули А,Б,В.
А если продукт Б находится под новой схемой то на его странице будут отображаться модули А,Г,Д.
Вот оригинальный ответ:
Если вы всё же хотите полностью сменить шаблон определенного типа продукта то я так понял что этой функции в стандартном ОпенКарте нет. По хорошему, что бы не нарушать оригинальное назначение схем ОпенКарта, нужно писать новую функциональность для смены шаблона продукта.You are using it wrong.
All layout override actually does is give you a different named layout to assign modules to. It DOES NOT change templates. So if your main product page say always has a bestsellers module in your right hand column, but you have a single product you do NOT want to show that module on for some reason.
You would go to layouts, create a new one called say "nobestsellers" with the same route as the product layout has and save.
Then when you add that product you don't want it on, you select layout override on the design table from edit > product and select "no bestsellers". And save.
So then the bestseller mod would show on every page that uses the standard product layout but NOT the product you selected the layout override on.
Naturally, you could target different modules, banners, whatever, on that product by editing the banners module and adding one to the "nobestsellers" layout, etc.
Layouts are actually pretty powerful once you wrap your head around how they work, but if you want totally different templates, it takes more work.
Who is online
Users browsing this forum: No registered users and 6 guests