ThinkPHP快速入门实例教程之数据分页


Posted in PHP onJuly 01, 2014

数据分页可能是web编程里最常用到的功能之一。ThinkPHP实现分页功能十分简洁。只需要定义几个参数就可以实现。并且扩展也十分方便。

下面让我们从零开始实现ThinkPHP的分页程序吧。

1.首先,我们得创建一个用于分页测试的数据库 test.sql代码如下。

CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` char(100) NOT NULL,
`content` varchar(300) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;
INSERT INTO `test` (`id`, `name`, `content`) VALUES
(19, '123', '123'),
(20, '1231', '123123123'),
(21, '123123', '123123123'),
(26, '24', '123123'),
(25, '321123', '321123'),
(24, 'age', 'age'),
(23, '123123', '123123'),
(22, '213', '123');

2.接着,我们得新建一个ThinkPHP项目。新版tp已经内置了项目自动生成目录功能。
在htdocs(也就是你的网站根目录)下新建一个test文件夹,把THINKPHP核心文件夹放进test根目录,并在test根目录新建文件index.php,加入如下代码:

// 定义ThinkPHP框架路径
define('THINK_PATH', './Thinkphp');
//定义项目名称和路径。这2句是重点。
define('APP_NAME', 'test');
define('APP_PATH', './test');
// 加载框架入口文件
require(THINK_PATH."/ThinkPHP.php");
//实例化一个网站应用实例
$App = new App();
//应用程序初始化
$App->run();

运行“http://localhost/test/index.php”.会看到ThinkPHP的欢迎页面。再打开你的test目录看看,发现在根目录下多了一个test文件夹,此时,你的项目目录已经生成了。
打开/test/test/conf/目录,新建“config.php” ,配置好你的数据库连接。

<?php
return array(
'DB_TYPE'=>'mysql',
'DB_HOST'=>'localhost',
'DB_NAME'=>'test', //新建的数据库名test
'DB_USER'=>'root', //数据库用户名
'DB_PWD'=>'', //数据库密码
'DB_PORT'=>'3306',
);
?>

如果你想打开调试模式,请在数组中加入

"debug_mode"=>true

3.基本页面输入与输出的实现。
(1)打开/test/test/lib/action/IndexAction.class.php,会发现以下代码

<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action{
public function index(){
header("Content-Type:text/html; charset=utf-8");
echo "<div style='font-weight:normal;color:blue;float:left;width:345px;text-align:center;border:1px solid silver;background:#E8EFFF;padding:8px;font-size:14px;font-family:Tahoma'>^_^ Hello,欢迎使用<span style='font-weight:bold;color:red'>ThinkPHP</span></div>";
}
}
?>

由系统自动生成的indexaction类中的index()函数是默认的首页调用函数。你可以使用http://localhost/test/index.php或者http://localhost/test/index.php/index来访问他

(2)我们暂时不管他。首先我们需要一个表单提交的页面。打开“/test/test/tpl/default/index/”,新建一个文件add.html.

<form method="post" action="__URL__/insert">
<p>姓名:<input name="name" type="text" ></p>
<p>内容:<input name="content" type="text"></p>
<p>提交:<input type="submit" value="submit"></p>
</form>

保存后,输入 http://localhost/test/index.php/index/add,你就能看到你新增的页面了。其中,__URL__(url要大写)被转换为相应地址/test/index.php/Index/.
这里简单说一下模板和action之间的关系。每一个action,对应的模板是与之名字相同的html文件。例如index类下的index(),对应default/index/index.html,而add.html,则显然对应的是index类下的add()。
我们甚至可以在只有add.html而没有相应的add()动作情况下,用访问add()的形式(http://localhost/test/index.php/index/add)来访问add.html模板。add.html模板下的占位符会被替换成相应的数据。效果如下。

(3)从form的“action=__URL__/insert”中可以看出,进行表单处理的动作是/test/index.php/index/insert,所以我们得新增insert动作来处理表单提交数据。在此之前,我们还有一件重要的事情要做,那就是新增model文件。通过model文件的建立,我们将能在insert动作中使用便捷的方法来操作数据库了
打开/test/test/lib/model/文件夹,新建文件TestModel.class.php.打开他,输入并保存以下代码

<?php
class TestModel extends Model {
}
?>

简单的说,这是ActiveRecord实现的基本文件。命名规则是你数据库中的表后面加Model.例如我们将要使用到的表是test,我的文件命名必须是TestModel.class.php,而文件下的类命名必须是TestModel.

接着,我们回到indexaction.class.php文件,删除原来的代码,加入如下代码。

class IndexAction extends Action{
//表单数据添加到数据库
public function insert() {
//实例化我们刚才新建的testmodel.
$test = D('Test');
if ($test->create()) {
//保存表单数据就这一步。thinkphp已经全部做完了。
$test->add();
$this->redirect();
}else{
exit($test->getError()。'[ <A HREF="javascript:history.back()">返 回</A> ]');
}
}
}

(4)接下来,我们需要在IndexAction类中增加一个首页默认显示动作index()来调用表单数据。

public function index() {
//依旧是实例化我们新建的对应相应表名的model.这是我们进行快捷表操作的重要关键。
$test = D('Test');
//熟悉这段代码么?计算所有的行数
$count = $test->count('','id');
//每页显示的行数
$listRows = '3';
//需要查询哪些字段
$fields = 'id,name,content';
//导入分页类 /ThinkPHP/lib/ORG/Util/Page.class.php
import("ORG.Util.Page");
//通过类的构造函数来改变page的参数。$count为总数,$listrows为每一页的显示条目。
$p = new Page($count,$listRows);
//设置查询参数。具体见“ThinkPHP/Lib/Think/Core/Model.class.php”1731行。
$list = $test->findall('',$fields,'id desc',$p->firstRow.','.$p->listRows);
//分页类做好了。
$page = $p->show();
//模板输出
$this->assign('list',$list);
$this->assign('page',$page);
$this->display();
}

我们该设置一个模板了。在/test/test/tpl/default/index/下新建index.html(因为默认对应了index()。所以程序中可以直接assign.而不用去指定模板文件。当然,这是可以配置的。)

<hr><a href="__URL__/add">填写</a>
//分页显示,这一行
<hr>{$page}<hr>
//数据显示。下面的参数很快会再进行详解。它很好理解。
<volist name="list" id="vo">
<p>姓名:{$vo.name}</p>
<p>内容:{$vo.content}</p>
<hr>
</volist>

保存他。接着输入 http://localhost/test/
恭喜你。你已经学会了如何利用thinkphp制作分页了!

PHP 相关文章推荐
用PHP实现WEB动态网页静态
Oct 09 PHP
php获得当前的脚本网址
Dec 10 PHP
基于PHP常用函数的用法详解
May 10 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
跟我学Laravel之路由
Oct 15 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 PHP
thinkphp5 路由分发原理
Mar 18 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 #PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 #PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 #PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 #PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 #PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 #PHP
PHP远程采集图片详细教程
Jul 01 #PHP
You might like
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
php 猴子摘桃的算法
2017/06/20 PHP
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
vue实现扫码功能
2020/01/17 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
Python 文件重命名工具代码
2009/07/26 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
Python运算符重载详解及实例代码
2017/03/07 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
Python生成词云的实现代码
2020/01/14 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
交通法规咨询中心工作职责
2013/11/27 职场文书
军神教学反思
2014/02/04 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
灵能百分百第三季什么时候来?
2022/03/15 日漫