Magento 分层导航“您不能多次定义相关名称‘mycustomattribute’”

Posted

技术标签:

【中文标题】Magento 分层导航“您不能多次定义相关名称‘mycustomattribute’”【英文标题】:Magento Layered Navigation "You cannot define a correlation name 'mycustomattribute' more than once " 【发布时间】:2012-05-18 10:28:15 【问题描述】:

我正在使用 Magento 的分层导航以及我的自定义属性和价格。如果我按价格过滤它会起作用;但是当按我的自定义属性过滤时,它显示:

您不能多次定义关联名称“mycustomattribute”

追踪:

#0 /home/coloresh/public_html/ColoreSG.com/lib/Varien/Db/Select.php(281):
Zend_Db_Select->_join('inner join', Array, 'metal_idx.entit...', Array, NULL)
#1 /home/coloresh/public_html/ColoreSG.com/lib/Zend/Db/Select.php(336):          Varien_Db_Select->_join('inner join', Array, 'metal_idx.entit...', Array, NULL)
#2 /home/coloresh/public_html/ColoreSG.com/lib/Zend/Db/Select.php(315): Zend_Db_Select->joinInner(Array, 'metal_idx.entit...', Array, NULL)
#3 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Catalog/Model/Resource/Layer/Filter/Attribute.php(70): Zend_Db_Select->join(Array, 'metal_idx.entit...', Array)
#4 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Catalog/Model/Layer/Filter/Attribute.php(94): Mage_Catalog_Model_Resource_Layer_Filter_Attribute->applyFilterToCollection(Object(Mage_Catalog_Model_Layer_Filter_Attribute), '49')
#5  /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Catalog/Block/Layer/Filter/Abstract.php(91): Mage_Catalog_Model_Layer_Filter_Attribute->apply(Object(Mage_Core_Controller_Request_Http), Object(Mage_Catalog_Block_Layer_Filter_Attribute))
#6 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Catalog/Block/Layer/Filter/Abstract.php(73): Mage_Catalog_Block_Layer_Filter_Abstract->_initFilter()
#7 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Catalog/Block/Layer/View.php(136): Mage_Catalog_Block_Layer_Filter_Abstract->init()
#8 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Block/Abstract.php(238): Mage_Catalog_Block_Layer_View->_prepareLayout()
#9 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Model/Layout.php(456): Mage_Core_Block_Abstract->setLayout(Object(Mage_Core_Model_Layout))
#10 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('catalog/layer_v...', 'catalog.leftnav')
#11 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('catalog/layer_v...', 'catalog.leftnav')
#12 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Model/Layout.php(205): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#13 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Model/Layout.php(210):  Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#14 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Controller/Varien/Action.php(344): Mage_Core_Model_Layout->generateBlocks()
#15 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Catalog/controllers/CategoryController.php(146): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#16 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Catalog_CategoryController->viewAction()
#17 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('view')
#18 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#19 /home/coloresh/public_html/ColoreSG.com/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#20 /home/coloresh/public_html/ColoreSG.com/app/Mage.php(683): Mage_Core_Model_App-    >run(Array)
#21 /home/coloresh/public_html/ColoreSG.com/index.php(87): Mage::run('', 'store')
#22 main

【问题讨论】:

【参考方案1】:

这是因为catalog/layer_view 模块被调用了两次。 您可以通过 xml 文件搜索 'type="catalog/layer_view"'。删除不需要的块。或者将类型更改为另一个类

【讨论】:

仅供参考:就我而言,我的班级有一个自定义的_getCount() 方法,它执行与apply() 相同的过滤逻辑,以便我可以在分层导航菜单中提供值计数。这在应用任何其他过滤器(或没有过滤器)时有效,但是一旦我应用了我的自定义过滤器,逻辑就会重复。不必复制该块即可遇到此问题。【参考方案2】:

我有<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml"/> 两次。 删除了一行并修复了它。

【讨论】:

【参考方案3】:

我的情况是,我必须从 local.xml 和 catalog.xml 中获取 type="catalog/layer_view" 的块,然后放入我修改后的 type="catalog/layer_view" 块。确保只有一个块包含 type="catalog/layer_view"。

【讨论】:

【参考方案4】:

对我来说 Dubbo 的回答是对的,但更具体地说我发现 Magento Enterprise 触及了 enterprise_search.xml 文件中的 catalog_category_layered xml 节点

【讨论】:

我也在使用企业版,我的自定义产品属性 Colors 也遇到了类似的问题。您是否有机会提供有关您为解决问题所采取的步骤的详细信息?任何帮助将不胜感激。 修复可以在这里找到:aceph.tumblr.com/post/21851233473/…【参考方案5】:

这会导致同样的问题。 - 在构建集合时将相同的属性添加到两次排序中:

...
    ->addAttributeToSort('color', 'asc')
    ->addAttributeToSort('color', 'asc');

注意:调用 setCollection($this->getMyCollection);在模板上导致我的错误, 因为“颜色”已作为默认排序顺序添加到排序顺序中。

解决方案:解决此问题的快速方法是在获取值后从请求中删除默认排序顺序:

$this->getRequest()->setParam('order','');

否则扩展 Block 并覆盖 setCollection() 方法以满足您的特定需求。

【讨论】:

【参考方案6】:

对于正在 Magento Enterprise Edition 中寻找解决此问题的方法的任何人,请检查您的 catalog.xml 或 local.xml 模板是否具有目录搜索分层导航。如果有,请从企业主题中覆盖当前主题中的 search.xml,并清空其中的所有块引用。

【讨论】:

【参考方案7】:

在 Enterprise 版本中遇到了类似的问题,因此发布给其他需要它的人 - 结果我必须使用以下内容才能使其正常工作:

<remove name="enterprisecatalog.leftnav" />

【讨论】:

以上是关于Magento 分层导航“您不能多次定义相关名称‘mycustomattribute’”的主要内容,如果未能解决你的问题,请参考以下文章

改进Magento中的分层导航

Magento添加分层导航

自定义产品集合上的 Magento 分层导航

从Magento中的分层导航取消设置类别

Magento 2 Amasty分层导航。删除当前应用的过滤器的显示

获取magento类别view.phtml的特定属性