隐藏或显示magento中某些类别中的过滤器

时间:2014-01-08 11:44:25

标签: magento attributes categories

在我们的最高级别类别中有大约50个购物选项,我试图在自定义类别布局中隐藏xml代码的属性过滤器。使用此代码

<reference name="em.catalog.leftnav">
<action method="setData">
    <instruction>hide_attribute_code</instruction>
    <value>1</value>
</action>

但是不要隐藏该类别中的过滤器属性,请在图像http://i.imgur.com/UHrHe.png

上进行检查

3 个答案:

答案 0 :(得分:3)

在catalog.xml中

 <catalog_category_layered translate="label">
    <label>Catalog Category (Anchor)</label>
    <reference name="left">
        <block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml"/>
    </reference>
  <catalog_category_layered translate="label">

按照模板... catalog / layer / view.phtml

打开此文件并在条件或条件

上显示过滤器出现在前端的条件
           <?php $_filters = $this->getFilters() ?>
            <?php foreach ($_filters as $_filter): ?>

                       <?php if($_filter->getName() == 'Price' || $_filter->getName() == 'Category' || $_filter->getName() == 'Manufacturer' ): ?>   
                              <?php if($_filter->getItemsCount()): ?>
                                   <dt><?php echo $this->__($_filter->getName()) ?></dt>
                                   <dd><?php echo $_filter->getHtml() ?></dd>
                               <?php endif; ?>
                       <?php endif; ?>

            <?php endforeach; ?>

答案 1 :(得分:0)

您需要在视图图层上取消设置属性名称,因此请找到此文件:

magento/app/design/frontend/base/default/template/catalog/layer/view.phtml

编辑:

<?php if($this->canShowBlock()): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Shop By') ?></span></strong>
    </div>
    <div class="block-content">
        <?php echo $this->getStateHtml() ?>
        <?php if($this->canShowOptions()): ?>
            <p class="block-subtitle"><?php echo $this->__('Shopping Options') ?></p>
            <dl id="narrow-by-list">
                <?php $_filters = $this->getFilters() ?>
                <?php foreach ($_filters as $_filter): ?>
                <?php if($_filter->getItemsCount()): ?>
                <!--  add this line  start-->
                <?php if($_filter->getName() != "Color"): ?>
                <!--  add this line end-->
                <dt><?php echo $this->__($_filter->getName()) ?></dt>
                <dd>
                <?php echo $_filter->getHtml() ?>
                </dd>
                <!--  add this line  start-->
                <?php endif; ?>
                <!--  add this line end-->
                <?php endif; ?>
                <?php endforeach; ?>
            </dl>
            <script type="text/javascript">decorateDataList('narrow-by-list')</script>
        <?php endif; ?>
    </div>
</div>
<?php endif; ?>

希望你现在可以开始工作!

答案 2 :(得分:0)

我不知道您的分机导航可靠的扩展程序,但这应该有效:

<reference name="em.catalog.leftnav">
    <action method="hideAttributes">
        <code>hide_attribute_code</code>
    </action>
</reference>

转到构建过滤器的app/code/POOL/YOUR/MODULE/Blocks/...中的文件。如果您的模板具有getFilters()之类的内容,则可以尝试使用echo get_class($this)来获取正确的类/文件。在那里你必须做两件事:

1。)添加一个新方法(在这种情况下你可以设置逗号分隔属性代码)

public function hideAttributes($attributeCodes)
{
    $attributeCodes = array_map('trim', explode(',', $attributeCodes));
    $this->setData('hide_attributes', $attributeCodes);
}

2。)搜索收集过滤器的功能,例如getFilters()并添加

$filterableAttributes = // some code
foreach ($filterableAttributes as $attribute) {
    if (!in_array($attribute->getAttributeCode(), $this->getHideAttributes())) {
        ...
    }
}