我想在子菜单上显示类别的过滤器,我的代码可以工作!!
我的问题是,如果页面已经过滤,我的代码不会返回选项
我相信它必须在代码中做一些绕过过滤器页面的东西,并再次在子菜单中显示选项,即使页面上已经有过滤器
子菜单的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"}}
答案 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 ' <a href="' . $category->getUrl() . '/?color=' . $option->getValue() . '">' . $option->getValue() . ' - ' . $option->getLabel() . '</a><br />';
}
}
}
?>
然后你可以看到它仍然仅基于我当前类别中的颜色
但是当类别已经按特定颜色过滤时