0

我试图将分层导航放置在标题的条带中,以及左侧边栏中。我通过添加<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)

随后是堆栈跟踪。

如何在选择过滤器时多次将分层导航添加到主题而不会破坏?

4

2 回答 2

1

不幸的是,您不能在一页上多次显示分层导航块。每次显示该块时,它都会将过滤器应用于 Product 集合。

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

于 2012-10-01T11:21:15.203 回答
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());
?>

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

于 2012-10-01T15:13:51.957 回答