我正在尝试将分层导航放置在标题中的条带中以及左侧边栏中。我这样做是通过将<block type="catalog/layer_view" template="catalog/layer/view.phtml"/>
添加到我的page.xml文件的head块中。虽然这有效,但当我点击一个过滤器时,我得到的错误归结为Magento不喜欢多个过滤器的事实:
a:5:{i:0;s:64:"You cannot define a correlation name 'device_idx' more than once";i:1;s:3844:"#0 /home/sitea/subdomains/casefun/trunk/lib/Varien/Db/Select.php(281): Zend_Db_Select->_join('inner join', Array, 'device_idx.enti...', Array, NULL)
随后是堆栈跟踪。
当我选择过滤器时,如何在不破坏主题的情况下多次将分层导航添加到主题?
答案 0 :(得分:1)
很遗憾,您无法在一个页面上多次显示分层导航块。每次显示块时,它都会将过滤器应用于Product集合。
从技术上讲,您可以通过为标题或左侧展示位置扩展标准的Layered Nav块来创建自定义,并将规则添加到 NOT applyFilters
,但这不是一项简单的任务。
答案 1 :(得分:1)
我不得不覆盖Mage_Catalog_Model_Resource_Layer_Filter_Attribute(在我的本地文件夹中)以包含Singleton类:http://codepad.org/i2a1gL8i
这样只允许创建每个过滤器的一个版本。
但是创建了一个新问题。在当前应用的过滤器列表中,每个过滤器出现两次。
对此的修复很简单。
在app/design/frontend/default/{theme}/template/catalog/layer/state.phtml
中添加以下内容:
<?php $appliedFilters = array(); ?>
<?php foreach ($_filters as $_filter): //existing line ?>
<?php
if(in_array(strtolower($_filter->getName()), $appliedFilters))
{
continue;
}
$appliedFilters[] = strtolower($_filter->getName());
?>
如果已经列出了具有相同名称的过滤器,则不要列出任何其他具有相同名称的过滤器。