教程栏目

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升级