Изменение макета страницы для товаров в определенной категории


Я пытаюсь установить 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

Author: Teja Bhagavan Kollepara, 2017-02-23

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>
 6
Author: Murtuza Zabuawala, 2017-02-23 09:39:01

Использовать 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);
      }
    }
}
 1
Author: Gopal Patel, 2017-02-23 08:14:41

Вы можете установить макет для любой конкретной категории в соответствии с вашими требованиями администратора.

Выполните следующие действия:

Войдите в систему администратора >> каталог>> Управление категориями>> выберите свою категорию>> вкладка "Пользовательский дизайн">> изменить макет страницы>> сохранить категорию.

 1
Author: Vinod Kumar, 2017-02-23 09:00:18

Должна работать следующая настройка:

Перейдите в раздел Администратор > Управление категориями > Выберите категорию > Пользовательский дизайн, затем выберите

  1. Макет страницы в 2 столбца-справа.phtml и
  2. В обновлении пользовательского макета введите следующий код.

    <reference name="product.info">
      //put the child block here that you want call.
    </reference>
    
 0
Author: Prasanta Hatui, 2017-02-23 07:33:09

Найдено гораздо более простое решение, если вам нужно изменить только пару продуктов:

Создайте 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>
 0
Author: Rechtsamwald, 2017-08-22 09:01:42