如何手动绕过或重置过滤器?

时间:2016-01-22 22:21:44

标签: magento filter submenu

我想在子菜单上显示类别的过滤器,我的代码可以工作!!

我的问题是,如果页面已经过滤,我的代码不会返回选项

我相信它必须在代码中做一些绕过过滤器页面的东西,并再次在子菜单中显示选项,即使页面上已经有过滤器

子菜单的HTML:

text.tag_configure("highlight", background="yellow")
for start, end in offsets:
    text.tag_add("highlight", "1.0 + %sc"%start, "1.0 + %sc"%end)

页面内容icons_submenu.phtml:

  {{block type="core/template" category="3" template="page/html/icons_submenu.phtml"}}

实施例:enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我真的建议你把所有的逻辑移动到一个合适的模块,一个合适的块和一个合适的模型中,而不是像你现在正在做的模板一样。

如果您真的需要进一步的帮助,请随意提问,根据Magento的编码指南制作一些东西会让您对工作更加满意,我可以向您保证。

这就是说,你真正想要的是一个基于当前类别和指定属性的当前过滤器模型。

您无需通过块catalog/layer_filter_attribute来执行此操作,您可以根据已加载的图层直接浏览模型。

所以,这样做的方式应该有效,尽管它不应该再次出现在模板或视图中:

<?php
    $category = Mage::getModel('catalog/category')
                     ->load($this->getCategory());
    $layer = Mage::getModel('catalog/layer')
                 ->setCurrentCategory($category);
    $attributes = $layer->getFilterableAttributes();

    foreach ($attributes as $attribute) {
        if ($attribute->getAttributeCode() == 'color') {
            // $filterBlockName = 'catalog/layer_filter_attribute';
            /** This is actually your only problem in your code **/
            // $result = Mage::app()->getLayout()->createBlock($filterBlockName)->setLayer($layer)->setAttributeModel($attribute)->init();
            /** But would work with this line **/
            $result  = Mage::getModel('catalog/layer_filter_attribute')
                           ->setLayer($layer)
                           ->setAttributeModel($attribute);

            echo '<strong>Color:</strong><br />';

            foreach($result->getItems() as $option) {
               echo '&nbsp; &nbsp; &nbsp; <a href="' . $category->getUrl() . '/?color=' . $option->getValue() . '">' . $option->getValue() . ' - ' . $option->getLabel() . '</a><br />';
            }
        }
    }
?>

然后你可以看到它仍然仅基于我当前类别中的颜色

Working without the filtering

但是当类别已经按特定颜色过滤时

Working with the filtering