博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
magento 产品列表排序、分页功能
阅读量:5037 次
发布时间:2019-06-12

本文共 3816 字,大约阅读时间需要 12 分钟。

我们以 catalog_category_layered 控制器为例说明

在catalog.xml 找到catalog_category_layered配置段

empty
6
one_column
5
two_columns_left
4
two_columns_right
4
three_columns
3
product_list_toolbar

其中catalog/product_list是产品显示的block,而catalog/product_list_toolbar是控制产品排序和分页功能的Block,而把这两个block联系起来的关键就是

 

 
product_list_toolbar

 

下面来看下实现排序、分页功能的步骤

1、根据配置文件实例化catalog/product_list Block并调用setToolbarBlockName方法设置ToolbarBlock的名字

2、在catalog/product_list block类(Mage_Catalog_Block_Product_List)的_beforeToHtml()方法中实例化ToolbarBlock,并对产品做排序和分页

protected function _beforeToHtml()          {              $toolbar = $this->getToolbarBlock();//实例化ToolbarBlock                    // called prepare sortable parameters              $collection = $this->_getProductCollection();//获取产品集合              // use sortable parameters              if ($orders = $this->getAvailableOrders()) {                  $toolbar->setAvailableOrders($orders);              }              if ($sort = $this->getSortBy()) {                  $toolbar->setDefaultOrder($sort);              }              if ($dir = $this->getDefaultDirection()) {                  $toolbar->setDefaultDirection($dir);              }              if ($modes = $this->getModes()) {                  $toolbar->setModes($modes);              }                            // set collection to toolbar and apply sort              $toolbar->setCollection($collection);//用ToolbarBlock实例对产品集合排序和分页                          $this->setChild('toolbar', $toolbar);//设置ToolbarBlock实例为当前Block的Child,在显示的时候会有用                    Mage::dispatchEvent('catalog_block_product_list_collection', array(                  'collection' => $this->_getProductCollection()              ));                    $this->_getProductCollection()->load();                    return parent::_beforeToHtml();          }
$toolbar->setCollection($collection);

是如何实现排序和分页功能呢,来看这个方法就知道了,打开Mage_Catalog_Block_Product_List_Toolbar类

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();              if ($limit) {                  $this->_collection->setPageSize($limit);              }//分页功能              if ($this->getCurrentOrder()) {                  $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());              }//排序功能              return $this;          }

3、显示

在product list 的phtml文件中调用Mage_Catalog_Block_Product_List类的getToolbarHtml()方法

getToolbarHtml() ?>
public function getToolbarHtml()          {                  return $this->getChildHtml('toolbar');//显示它的Child Block 与_beforeToHtml()中的$this->setChild('toolbar', $toolbar);相对应          }

 

转载于:https://www.cnblogs.com/zhengyanbin2016/p/5724830.html

你可能感兴趣的文章
Linux make语法
查看>>
用户体验之认知地图、思维导图和概念图
查看>>
bzoj3389 [Usaco2004 Dec]Cleaning Shifts安排值班
查看>>
bzoj3173 [Tjoi2013]最长上升子序列
查看>>
第八周作业
查看>>
spring事务隔离级别
查看>>
JavaEE:Eclipse开发工具的相关使用和XML技术
查看>>
LR_问题_如何将场景中的用户设置为百分比形式
查看>>
OpenShift-OKD3.10基础环境部署
查看>>
工程师淘金:开发Android主攻四大方向
查看>>
ASP.NET MVC——Controller的激活
查看>>
javascript中Array对象
查看>>
SQLSERVER中查看谁占用了Buffer Pool
查看>>
lamp环境安装shell脚本
查看>>
ASP.NET MVC使用jQuery实现Autocomplete
查看>>
model中字段格式验证
查看>>
host路径
查看>>
查看linux 内存
查看>>
HTTP 状态码
查看>>
Ubuntu 14.10 下卸载MySQL
查看>>