为magento的目录产品列表增加A-Z的产品首字母过滤功能

2,960 人次阅读
2 条评论

共计 2127 个字符,预计需要花费 6 分钟才能阅读完成。

如何才能为magento的目录产品列表增加A-Z的产品首字母过滤功能,官方有一个插件,我把代码抽像出来供大家使用
效果图如下:

为magento的目录产品列表增加A-Z的产品首字母过滤功能

首先将
app/code/core/Mage/Catalog/Block/Product/List/Toolbar.php
拷到
app/code/local/Mage/Catalog/Block/Product/List/Toolbar.php
然后增加一个函数

public function str_replace_once($needle , $replace , $haystack){
    // Looks for the first occurence of $needle in $haystack
    // and replaces it with $replace.
		$pos = strpos($haystack, $needle);
		if ($pos === false) {
			// Nothing found
		return $haystack;
    	}
   return substr_replace($haystack, $replace, $pos, strlen($needle));
}

然后将以下函数换在如下代码

public function setCollection($collection)
    {
        $this->_collection = $collection;

        $this->_collection->setCurPage($this->getCurrentPage());

        // we need to set pagination only if passed value integer and more that 0
        $limit = (int)$this->getLimit();
		$postData = '';
        if ($limit) {
            $this->_collection->setPageSize($limit);
        }
        if ($this->getCurrentOrder())
		{
			/////Alphabate search Code Start From here.
			$postData = Mage::app()->getRequest()->getParam('alpha').'%';
			$postData_all = Mage::app()->getRequest()->getParam('alpha');
			if(isset($postData_all) && $postData_all!= '' && trim($postData_all) !='ALL')
			{

            $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection())->addAttributeToFilter(array(
                    array('attribute'=>'name', 'like'=>$postData)
                ));
			}else
			{

				   $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());

			}

			////Code End
        }
        return $this;
    }

在app/design/frontend/default/default/template/catalog/product/list/toolbar.phtml
尾部增加如下代码如可:

<div>

        <p>

            <?php
			$postData = Mage::app()->getRequest()->getParam('alpha');
			foreach ($search_array  as $search_array_value):
			if (strstr( $this->helper('core/url')->getCurrentUrl(), "?" ) )
			{
				$final_Url =  $this->str_replace_once('&','?',str_replace("?alpha=".trim($postData['alpha']),'',str_replace($make_nbsp."alpha=".trim($postData['alpha']),'',$this->helper('core/url')->getCurrentUrl())));

			}else
			{

				$final_Url = str_replace("?alpha=".trim($postData['alpha']),'',str_replace($make_nbsp."alpha=".trim($postData['alpha']),'',$this->helper('core/url')->getCurrentUrl()));
			}
			?>

            <a href="<?php echo $final_Url.$make_nbsp.'alpha='.$search_array_value;?>" title="<?php echo $_label ?>"><?php echo $search_array_value; ?></a>&nbsp;&nbsp;

            <?php endforeach; ?>

        </p>

    </div>

其实还是比较简单的,不好的地方就是要修改核心代码!

正文完
 0
评论(2 条评论)
再见流星
2011-07-22 10:28:24 回复

博主您好,怎么把它改成全站过滤呢? 小弟是菜鸟、请您指点一下。 谢谢哈。

 Windows  Chrome  中国广东省深圳市电信
    2011-07-23 11:07:00 回复

    你放在别的地方试试呢,原理应该是一样的

     Windows  MSIE