教程栏目

joomla中文网出品的官方教程

这篇文章的目标是在你自己的组件中加上一个分页条。

在joomla中 我们可以用JPagination来实现分页功能。

 

JPagination 的实现文件在/libraries/joomla/html/pagination.php文件中,可以在查看实现的源码。

 

在pagination中实现一个分类 ,至少需要3个变量

$total : 在列表中的总数目.也就是你在数据库中读取到的记录的总数。

$limitstart: 从哪一条记录开始显示。从第0条表示从数据库中读取到的第一条记录

$limit:每页显示的最多的记录数量。

 

 

 

我们如果想在自己的组件中实现分页。我们需要通过几个步骤:

1,改变模型层的设计

 1,声明两个变量。$_total 和 $_pagination,作为这个类的两个属性值。我们用这两个变量来接收getTotal()函数和getPagination()函数的返回值。

2,在构造函数中为$limitstart 和$limit赋值。

function __construct()

{

     parent::__construct();

    $mainframe = JFactory::getApplication();//得到主框架

   //得到实现JPaination 对象要求的变量

  $limit = $mainframe->getUserStateFromRequest('global.list.limit','limit',$mainframe->getCfg('list_limit'),'int');

关于getUserStateFromRequest这个函数的详细介绍。请参看相关文档。

这个的意义是系统为我们维护$limit变量。

$limitstart = JRequest::getVar('limitstart',0,'','int');

//当用户调整了limit之后 我们也需要进行相应的调整。

$limitstart = ($limit !=0?(floor($limitstart /$limit) * $limit) :0 );


$this->setState('limit',$limit);

$this->setState('limitstart',$limitstart);

 

}

 

2,调整getData()函数。添加$limitstart和$limit值到_getList()查询语句中。这样我们就会至返回需要的行数。而不是返回所有的记录。

function getData()

{

  // if data hasn't already been obtained .load it.

if(empty($this->_data))

{

  $query = $this->_buildQuery();

  $this->_data= $this->_getList($query,$this->getState('limitstart'),$this->getState('limit'));

}

  return $this->_data;

}

3,添加getTotal函数。返回所有查询的结果的总数。我们将会在getPagination()函数中使用这个值。

function getTotal()

{

  if(empty($this->_total))

{

    $query = $this->_buildQuery();

   $this->_total = $this->_getListCount($query);

}

 return $this->_total;

}

 4 添加 getPagination()函数。这个函数将创建一个新的Pagination对象。这个对象可以被视图访问。

   function getPagination()

 {

     if(empty($this->_pagination))

   {

    jimport('joomla.html.pagination');

   $this->_pagination = new JPagination($this->getTotal().$this->getState('limitstart'),$this->getState('limit'))

  }

 return $this->_pagination;

}

 

5 改变视图类。

 在这个类中我们要获得pagination对象 并且将他和模版关联起来。这样我们可以在模版中使用。

$pagination = & $this->get('Pagination');

$this->assignRef('pagination',$pagination);

 

6,改变模版

 添加一个footer区域去展示pagination对象。我们通过调用getListFooter()函数产生next/previous这些按钮。

<tfoot>

    <tr>

                <td colspan="6"><?php echo $this->pagination->getListFooter(); ?></td>

    </tr>

</tfoot>

 

7,添加另外一个隐藏的提交按奶,我们在这个按钮中设置我们要显示的视图。

<input type="hidden" name="view" value="your_view_name" />
当我们改变了pagination后。 上面这段代码就是告诉joomla去重定向到我们自己的视图。

评论 (0)

  • 最新在前
  • 最佳在前

第1章 Joomla入门教程

第3章 C计划

第5章 E计划

第6章 H计划

第7章 G计划

第9章 运行环境

第11章 主从与集群

第12章 模块开发

第13章 插件开发

第14章 j2.x组件开发教程

第15章 页面定制教程

第16章 页面构造器

第17章 joomla升级

第18章 其他系统迁移

第19章 流量翻倍计划