Magento:文本框而不是分层导航中的多选

时间:2013-01-23 13:12:28

标签: magento attributes multi-select layered-navigation

Magento中是否有可能具有多选属性,我会在分层导航中使用文本框而不是显示多选中的所有项目?

我有一个属性,我将有数百个选项,需要在分层导航中使用它。

当客户使用无效值时,应显示错误。


编辑:在FlorinelChis的帮助下,我在filter.phtml中有以下代码:

<ol>
<?php foreach ($this->getItems() as $_item): ?>
  <?php
  $attributeModel = $this->getAttributeModel();    
  $attribute_code =  $attributeModel->getAttributeCode();
  ?>
    <li>
      <?php if ($attribute_code != 'available_zip'): ?>
        <?php if ($_item->getCount() > 0): ?>
        <a href="<?php echo $this->urlEscape($_item->getUrl()) ?>"><?php echo $_item->getLabel() ?></a>
        <?php else: echo $_item->getLabel() ?>
        <?php endif; ?>
        <?php if ($this->shouldDisplayProductCount()): ?>
        (<?php echo $_item->getCount() ?>)
        <?php endif; ?>
      <?php endif; ?>
    </li>
<?php endforeach ?>
</ol>
  <?php
    if ($attribute_code == 'available_zip'): 
          $cat =  Mage::registry('current_category')->getUrlPath() ;
          $url = Mage::getBaseUrl();
          /*$sendUrl = $this->urlEscape($_item->getUrl()).'+'.$url.$cat.'?'.$attribute_code.'='.$_item->getValue();*/
        echo '<form action="" method="get">';
        echo '<input type="text" size="5" maxlength="5" name="'.$attribute_code.'" />';
        echo '<button type="submit">OK</button>';
        echo '</form>';
  endif; ?>

我现在还有一件事: 如何发送带有属性id而不是值的表单?

1 个答案:

答案 0 :(得分:1)

首先,让我们了解Magento如何在左侧导航中显示过滤器

1)启用模板路径提示: Magento Enable Template Path Hints

以下是结果:

magento layered navigation filter

2)让我们看看app/design/frontend/base/default/template/catalog/layer/filter.phtml(您应该在主题文件夹结构中复制此文件)

3)块(模板文件中的$ this是Mage_Catalog_Block_Layer_Filter_Attribute的一个实例,扩展了Mage_Catalog_Block_Layer_Filter_Abstract

4)您可以看到Mage_Catalog_Block_Layer_Filter_Abstract中存在getName()方法,因此您可以依赖此函数来识别何时显示属性。别!标签可以更改,您的代码将不再有用。 回到我们的模板文件,您可以获得attribute_code(可靠)

//$this is instance of Mage_Catalog_Block_Layer_Filter_Attribute 
$attributeModel = $this->getAttributeModel();    
$attribute_code =  $attributeModel->getAttributeCode();

5)在您的模板上,您可以根据属性代码进行检查,因此您可以使用textarea而不是大型列表显示标准列表或自定义html代码。