这篇文章的目标是在你自己的组件中加上一个分页条。
在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)