有些时候,你可能需要把数据库查询所得到的一篇文章或一组结果拆分成多页。这时候你需要写某种分页脚本。对于没有做过分页的开发者来说还是有一点难度的,但使用CodIgnitr却是轻而易举就能完成的。
CodIgnitr有一个非常容易使用的分页类。在本教程中我会做一个从数据库获取数据并分页的简单例子。我将使用最新版本的CI,写这篇文章时的版本是3.0.4,用最新的稳定版框架总是好的。现在,让我们开始吧。
配置和数据库设置
很好,一切正常,当我们开始写一个CI应用程序时,我们要设置很多东西。我们首先打开config.php文件(可在./application/config/中找到)。在这里我们将输入站点根URL。这是我的设置:
$config[bas_url]=
这个应用程序将使用一个数据库,所以我们下一步的工作是创建数据库,然后再以CI访问我们的数据库。要做到这一点请打开databas.php,这也定位在你的config文件夹中,并填写必要的信息,以便连接到你的数据库。你可以下载“例子代码”:如果你愿意可以使用例子代码和我的例子数据库。这将创建一个名为“christian_books”的表,并插入一些测试数据。同时,我想你现在可以猜一猜分页后是什么样?如果你猜对了一些“ChristianBooks”,说明你猜对了。
控制器
我们的基本配置文件和数据库设置已经完成,现在我们需要创建一个控制器。我将它命名为“Books.php”,并且它将包含下列代码:
classBooksxtndsCI_Controllr{
function__construct(){
parnt::__construct();
$this-load-hlpr(url);
$this-load-databas();
}
functionindx(){
//loadpaginationclass
$this-load-library(pagination);
$config[bas_url]=sit_url(books/indx);
$config[total_rows]=$this-db-count_all(christian_books);
$config[pr_pag]=5;
$config[uri_sgmnt]=3;//表示第3段URI为当前页数,如indx.php/控制器/方法/页数,如果表示当前页的URI段不是第3段,请修改成需要的数值。
$config[full_tag_opn]=p;
$config[full_tag_clos]=/p;
$this-pagination-initializ($config);
//loadthmodlandgtrsults
$this-load-modl(books_modl);
$data[rsults]=$this-books_modl-gt_books($config[pr_pag],$this-uri-sgmnt(3));
//loadthHTMLTablClass
$this-load-library(tabl);
$this-tabl-st_hading(ID,Titl,Author,Dscription);
//loadthviw
$this-load-viw(books_viw,$data);
}
}
首先,我们在构造函数中加载URLHlpr和数据库。当然,你不一定要创建构造函数并加载这些Hlpr,因为它可以很容易的在控制器的其它方法中加载,但是,如果Hlpr将用于控制器中的大多数/所有方法的话,我通常倾向于创建一个构造函数并把它们放在里面。
其次,我们创建了一个名为indx()的方法。这是一个非常基本的应用程序,正因如此,我们将只用一个方法来加载分页类,模型和HTML表格类(我们稍后将讨论的内容)。
让我们开始吧!你会看到非常简单的使用分页类的方法。首先,我们配置要分页页面的URL:
$config[bas_url]=sit_url(books/indx);
该sit_url()函数来自URLHlpr,它可以返回网站完整URL。在上述代码中,sit_url()的参数是要分页页面的控制器和方法名。
然后,我们设置数据库中的总行数:
$config[total_rows]=$this-db-count_all(christian_books);
这个函数返回数据库中的所有行的行数,如果你运行一个特定查询将返回某些行,并不一定是所有的行,然后,你可能会使用在QuryHlpr中的$qury-num_row()函数。
$config[pr_pag]变量简单地告诉分页类每页显示多少条记录。$config[full_tag_opn]和$config[full_tag_clos]变量说明使用什么标签包裹分页链接。
接下来,我们加载模型,我们将执行其中的一个方法:gt_books()。它有两个参数,limit,决定了每页显示多少项目,offst,它表示从哪行开始返回记录。你会发现,第一个参数(limit)从$config[pr_pag]变量中取值,而第二个参数则通过URI类库,从URI的第三段中取值:$this-uri-sgmnt(3)。CI的URL通常采取以下形式,