Пользовательский макет Обновляет XML в категории
У меня есть категория на моем веб-сайте, к которой я применяю некоторые пользовательские обновления макета в XML категории. ПРИМЕЧАНИЕ. Я также установил "Применить к продуктам" на "Да":
<reference name="content">
<block type="core/template" name="members.header" template="members/header.phtml" before="-" />
<remove name="product_list" />
<block type="catalog/product_memberscontentlist" name="product_memberscontentlist" template="catalog/product/members-content-list.phtml" />
</reference>
<reference name="right">
<block type="core/template" name="members.sidebar" template="members/sidebar.phtml" before="-" />
</reference>
Я создал файл в app/code/local/Mage/Catalog/Block/Product/Memberscontentlist.php вот как работает product_memberscontentlist
. Содержимое этого файла:
class Mage_Catalog_Block_Product_Memberscontentlist extends Mage_Catalog_Block_Product_List
{
/**
* Retrieve loaded category collection
*
* @return Mage_Eav_Model_Entity_Collection_Abstract
*/
protected function _getProductCollection()
{
$collection = parent::_getProductCollection();
if(isset($_GET['filterID'])) {
$collection->addAttributeToSelect('my_attribute')
->addAttributeToFilter('my_attribute', array('like' => '%'.$_GET['filterID'].'%'));
}
return $collection;
}
}
Это всего лишь фрагмент кода, который добавляет дополнительный фильтр в список категорий. Это прекрасно работает на странице категории, но вызывает какую-то ошибку на странице продукта, что означает, что страница продукта загружается, но по какой-то причине тег 404-Страница не найдена, и внизу страницы есть "Упс, наши плохие... и т. Д.".
Моя теория заключается в том, что код...
<remove name="product_list" />
<block type="catalog/product_memberscontentlist" name="product_memberscontentlist" template="catalog/product/members-content-list.phtml" />
... в пользовательском обновлении макета возникает проблема, поэтому я попытался указать, чтобы этот код применялся только к представлению категории, т.Е.:
<reference name="content">
<block type="core/template" name="members.header" template="members/header.phtml" before="-" />
</reference>
<reference name="right">
<block type="core/template" name="members.sidebar" template="members/sidebar.phtml" before="-" />
</reference>
<catalog_category_default>
<reference name="content">
<remove name="product_list" />
<block type="catalog/product_memberscontentlist" name="product_memberscontentlist" template="catalog/product/members-content-list.phtml" />
</reference>
</catalog_category_default>
Но, похоже, это не работает. Проблема в том, что я нужно оставить "Применить к продуктам" на "Да", потому что некоторые блоки (members.header
и members.sidebar
) также необходимы на страницах продуктов этой категории.
Я также попробовал следующее:
<reference name="category.products">
<action method="unsetChild"><name>product_list</name></action>
<block type="catalog/product_memberscontentlist" name="product_memberscontentlist" template="catalog/product/members-content-list.phtml" />
</reference>
Но это тоже не работает!
По сути, моя проблема заключается в том, что я хочу применить обновление пользовательского макета к категории, и я хочу, чтобы некоторые (но только некоторые) из этого XML также применялись к странице продукта. Если кто-нибудь может помочь с тем, как я могу настроить таргетинг на страницу категории только в пользовательском макете, обновите ее был бы очень признателен. Спасибо!
Я использую Magento 1.8.1
1 answers
Дескрипторы макета <catalog_category_default>
не работают в пользовательском XML-формате макета, поэтому это не тот путь.
Вместо этого оставьте в поле XML пользовательского макета только XML, который вы хотите применить как к продуктам, так и к категориям.
Вы можете поместить XML-формат для конкретной категории в приложение/дизайн/интерфейс/[YOUR_PACKAGE]/[YOUR_THEME]/layout/local.xml следующим образом:
<layout>
<CATEGORY_18> <!-- 18 is category ID -->
<!-- put category specific layout XML here -->
</CATEGORY_18>
</layout>
P.S. <CATEGORY_18>
дескриптор макета применяется перед пользовательским XML-макетом, указанным в панели администратора.