Magento 1.7在同一页面上显示多个分层导航过滤器?

时间:2012-10-01 11:16:04

标签: magento magento-1.7

我正在尝试将分层导航放置在标题中的条带中以及左侧边栏中。我这样做是通过将<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)

随后是堆栈跟踪。

当我选择过滤器时,如何在不破坏主题的情况下多次将分层导航添加到主题?

2 个答案:

答案 0 :(得分:1)

很遗憾,您无法在一个页面上多次显示分层导航块。每次显示块时,它都会将过滤器应用于Product集合。

从技术上讲,您可以通过为标题或左侧展示位置扩展标准的Layered Nav块来创建自定义,并将规则添加到 NOT applyFilters,但这不是一项简单的任务。

答案 1 :(得分:1)

我不得不覆盖Mage_Catalog_Model_Resource_Layer_Filter_Attribute(在我的本地文件夹中)以包含Singleton类:http://codepad.org/i2a1gL8i

这样只允许创建每个过滤器的一个版本。

但是创建了一个新问题。在当前应用的过滤器列表中,每个过滤器出现两次。

http://i.imm.io/Gk4w.png

对此的修复很简单。

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());
?>

如果已经列出了具有相同名称的过滤器,则不要列出任何其他具有相同名称的过滤器。