Изменение макета страницы для товаров в определенной категории
Я пытаюсь установить 2columns-right.phtml
макет для продуктов определенной категории, в то время как по умолчанию используется 1 столбец.phtml.(Пожалуйста, обратите внимание, что я не хочу менять макет страницы категории, но макеты товаров в этой категории)
Я попробовал Администратор > Управление категориями> Выбрать категорию > Пользовательский дизайн> Изменить "Применить к продуктам" на "да" и в "Обновления пользовательского макета" ввел
<reference name="product.info">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
</reference>
Не сработало
Затем я перешел к rwd/default/layout/catalog.xml
и добавил после
<!--
Product view
-->
Введено
<CATEGORY_3>
<reference name="product.info">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
</reference>
</CATEGORY_3>
Но даже это не сработало, любые идеи по этому поводу были бы очень полезны. Magento CE версии 1.9.1
5 answers
Создайте небольшой модуль
Ваш config.xml
должен выглядеть как
app/code/codePool/Package/Extension/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Package_Extension>
<version>0.1.0</version>
</Package_Extension>
</modules>
<global>
<events>
<controller_action_layout_load_before>
<observers>
<categoryhandle>
<class>Package_Extension_Model_Observer</class>
<method>cateHandle</method>
</categoryhandle>
</observers>
</controller_action_layout_load_before>
</events>
</global>
</config>
Ваш наблюдатель должен выглядеть так
app/code/codePool/Package/Extension/Model/Observer.php
<?php
class Package_Extension_Model_Observer
{
public function cateHandle(Varien_Event_Observer $observer)
{
$product = Mage::registry('current_product');
/**
* Return if it is not product page
*/
if (!($product instanceof Mage_Catalog_Model_Product)) {
return;
}
$category= 3;
$categories=$product->getCategoryIds();
if(in_array($category, $categories)){
$update = $observer->getEvent()->getLayout()->getUpdate();
$update->addHandle('PRODUCT_CATEGORY_'.$category);
}
}
}
И в ваших темах local.xml
добавьте код ниже или, как вы упомянулиrwd/default/layout/catalog.xml
добавьте код ниже
<PRODUCT_CATEGORY_3>
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
</reference>
</PRODUCT_CATEGORY_3>
Использовать controller_action_layout_generate_xml_before
Событие
<events>
<controller_action_layout_generate_xml_before>
<observers>
<add_Customer_handler>
<class><VENDOR_NAME>_<MODULE_NAME>_Model_Observer</class>
<method>changeTemplate</method>
</add_Customer_handler>
</observers>
</controller_action_layout_generate_xml_before>
</events>
Наблюдатель
public function changeTemplate($observer)
{
$action = $observer->getEvent()->getAction();
$fullActionName = $action->getFullActionName();
$category=<YOUR CATEGORY ID>;
if($fullActionName=='catalog_product_view')
{
$product=Mage::getModel('catalog/product')->load(Mage::registry('current_product')->getId());
$categories=$product->getCategoryIds()();
if(in_array($category, $categories);){
$layout = $observer->getEvent()->getLayout();
$update = $layout->getUpdate();
$xml = "<reference name='root'><action method='setTemplate'><template>page/2columns-right.phtml</template></action></reference>";
$update->addUpdate($xml);
}
}
}
Вы можете установить макет для любой конкретной категории в соответствии с вашими требованиями администратора.
Выполните следующие действия:
Войдите в систему администратора >> каталог>> Управление категориями>> выберите свою категорию>> вкладка "Пользовательский дизайн">> изменить макет страницы>> сохранить категорию.
Должна работать следующая настройка:
Перейдите в раздел Администратор > Управление категориями > Выберите категорию > Пользовательский дизайн, затем выберите
- Макет страницы в 2 столбца-справа.phtml и
-
В обновлении пользовательского макета введите следующий код.
<reference name="product.info"> //put the child block here that you want call. </reference>
Найдено гораздо более простое решение, если вам нужно изменить только пару продуктов:
Создайте fancy_name.файл phtml в your_theme/по умолчанию/шаблон/страница/ (из копии 1 столбца-product.phtml или что-то в этом роде).
Редактируйте имя fancy_name.phtml, пока оно не станет действительно модным.
Перейдите в серверную часть magento, перейдите к своему продукту, перейдите в раздел дизайн -> Обновление пользовательского макета. Вставьте следующий код и сохраните:
<reference name="root">
<action method="setTemplate"><template>page/fancy_name.phtml</template></action>
</reference>