Шаблон модели продукта Magento, основанный на категории
Мы работаем над интернет-магазином Magento, который имеет две категории.
Мы хотели бы использовать шаблон представления продукта по умолчанию для первой категории и шаблон пользовательского вида продукта для второй категории.
Возможно ли это и как мы можем это достичь?
* РЕДАКТИРОВАТЬ - РЕШЕНИЕ *
Для тех, кто интересуется этим. Решение было намного проще, чем я думал.
Мне нужно было разместить этот фрагмент кода в разделе обновления пользовательского макета соответствующей категории, и мне пришлось установить для параметра "Применить к продуктам" значение "Да"
<reference name="product.info">
<action method="setTemplate"> <template>catalog/product/view-recipe.phtml</template></action>
</reference>
* РЕДАКТИРОВАТЬ *
Я попытался добавить этот код в файл catalog.xml.
<CATEGORY_5>
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/view-recipe.phtml</template></action>
</reference>
</CATEGORY_5>
* РЕДАКТИРОВАТЬ *
Я попытался добавить этот код в каталог .xml:
<CATEGORY_5>
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/view-recipe.phtml</template></action>
</reference>
</CATEGORY_5>
И этот код в разделе "Обновление пользовательского макета":
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/view-recipe.phtml</template></action>
</reference>
Я установил патч, но, к сожалению, результатов не удалось.
Ответы
Ответ 1
Вы имели в виду список каталогов категорий? Затем вы можете попробовать "Custom Layout Update".
- Каталог → Управление категориями
- Выберите пользовательский макет из "Макет страницы"
- Добавьте в "Custom Layout Update" следующее:
<reference name="product_list">
<action method="setTemplate">
<template>catalog/product/custom-theme.phtml</template>
</action>
</reference>
Конечно, вы должны создать первый custom layout
, вы можете взять ссылку из базы list.phtml
* РЕДАКТИРОВАТЬ *
Если вы хотите настроить определенные продукты/категории, вы можете использовать custom layout handle
. Рассмотрим следующие ссылки.
* РЕДАКТИРОВАТЬ *
Сначала вы должны изменить метод CategoryController.php
viewAction()
из папки /app/code/core/Mage/Catalog/Controllers
(как указано в примере Inchoo).
Затем вы должны сделать что-то вроде этого:
<CATEGORY_20>
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/custom-theme.phtml</template></action>
</reference>
</CATEGORY_20>
* РЕДАКТИРОВАТЬ *
У Magento есть ошибка об обновлении пользовательского макета, который является номером 7625. Они указали исправленную в следующей версии по Bug Track, но все еще есть проблема. Итак, Ingo Weseloh
сделал патч, который вы можете найти по следующей ссылке.
Exanto Reclayup
7625
* РЕДАКТИРОВАТЬ *
Майкл, не могли бы вы попробовать это (это Алан Шторм sugestion)
<CATEGORY_20>
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/custom-theme.phtml</template></action>
<action method="setIsHandle"><applied>1</applied></action>
</reference>
Ответ 2
$category_id = 14; // if you know static category then enter number
$catagory_model = Mage::getModel('catalog/category')->load($category_id); //where $category_id is the id of the category
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->addCategoryFilter($catagory_model); //category filter
$collection->addAttributeToFilter('status',1); //only enabled product
$collection->addAttributeToSelect(array('name','url','small_image')); //add product attribute to be fetched
//$collection->getSelect()->order('rand()'); //uncomment to get products in random order
$collection->addStoreFilter();
if(!empty($collection))
{
foreach ($collection as $_product):?>
<a href="<?php echo $_product->getProductUrl();?>"><img src="<?php echo Mage::helper('catalog/image')->init($_product, 'small_image')->resize(197, 167); ?>" /> </a>
<?php endforeach;
}else
{
echo 'No products exists';
}