<?php
//============================================================
//----------------------自动加载------------------------------
// 命名空间自动加载
/*
1.一般写法 */
new \dir1\dir2\test();
// 可以自动加载test.class.php文件,这个文件必须使用命名空间
/*
2.文件在 ThinkPHP/Library 这个目录下的可以自动识别和定位 */
new Think\Cache\Driver\File();
new Org\Util\Auth();
// 在Library目录下新增目录,就会自动注册新的根命名空间
/*
注册新的命名空间
详见:架构 > 自动加载
类库映射:加快命名空间效率
详见:架构 > 自动加载 */
/*
3.不符合命名规范和后缀的类库、没有使用命名空间或者命名空间
和路径不一致的类库 */
// 导入Org类库包 Library/Org/Util/Date.class.php类库
import("Org.Util.Date");
// 导入Home模块下面的 Application/Home/Util/UserUtil.class.php类库
import("Home.Util.UserUtil");
// 导入当前模块下面的类库
import("@.Util.Array");
// 导入Vendor类库包 Library/Vendor/Zend/Server.class.php
import('Vendor.Zend.Server');
// 导入Library/Test/Test.class.php
import('Test.Test');
/*
4.导入其他不规则的类库,不是以class.php结尾的等用Vendor()方法 */
// Library\Vendor\Zend\Filter\Dir.php
Vendor('Zend.Filter.Dir');
//============================================================
//-------------------------自定义常量------------------------
// 在config中定义 必须在return之前定义
// 在入口文件中定义
//------------------------------------------------------------
//----------------------信息提示模板-------------------------
// 默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH.'Tpl/dispatch_jump.tpl',
// 默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH.'Tpl/dispatch_jump.tpl',
//============================================================
//---------------------自动生成模块--------------------------
// 在 index.php 文件中加入
// 自动生成模块
define('BIND_MODULE','h');
// 自动生成控制器
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
// 使用后删除即可
//============================================================
//----------------------pc与手机端模板切换-------------------
/* 在view目录中新建default与mobile文件夹,
将pc端的模板放入default中,手机端的放入mobile中 */
// 前台配置文件中
return array(
'DEFAULT_THEME' => 'default',
// 'THEME_LIST' => 'default,mobile',//3.2之前好像要加
'TMPL_DETECT_THEME' => true,
);
// 前台的主控制器中
if (ismobile()) {//这个函数判断是否为手机端
C('DEFAULT_THEME','mobile');// 设置默认默认主题为 Mobile
}
//========================项目分组设置=======================
//------------------------------------------------------------
// 前台分组叫Home,后台分组叫Admin,目录结构一样
前台:
namespace Home\Controller;
use Think\Controller;
后台:
namespace Admin\Controller;
use Think\Controller;
//========================跨控制器调用=======================
//------------------------------------------------------------
// 如何在前台调用后台Admin\Common\Fun\hello.class.php类:
// 1.hello.class.php的书写规则
namespace Admin\Common\Fun;
class hello{}
// 2.在前台调用后台hello类
$hello = new \Admin\Common\Fun\hello();
$hello->hehe();
// 后台调用前台同理
//------------------------------------------------------------
//-----------------------调用公共方法------------------------
// 调用app\Common\Fun目录下的类
$hello = new \Common\Fun\hello();
$hello->hehe();
// 在 手册>扩展>类库扩展 有说明
//------------------------------------------------------------
//------------------------快捷调用----------------------------
class GoodsController extends Controller{
function showlist(){
// 实例化User控制器与调用方法
$user = A('User');//通过快捷函数实例化控制器对象
echo $user->number();
}
}
//------------------------------------------------------------
//----------------------调用公共函数-------------------------
// 在commom/common/function.php中放入函数
// 在前台或者后台可直接调用,如:
hello();
//------------------------------------------------------------
//------------------------------------------------------------
A('User'); //跨控制器
A('Admin/User'); //跨模块
A('shop://Admin/User'); //跨项目
//------------------实例化控制器并调用方法------------------
//------------------------------------------------------------
//User为控制器 number为方法
R('User/number');
R('Admin/User/number');
R('shop://Admin/User/number');
// 同如下方法:
$user = A('User');
echo $user->number();
//=======================Model设置============================
//------------------------------------------------------------
一般情况下在Admin与Home平级的目录下新建一个Model文件夹
在此文件夹里面创建Model类文件
namespace Model;
use Think\Model;
class GoodsModel extends Model{
}
//-------------------在控制器中调用Model类-------------------
//------------------------------------------------------------
class GoodsController extends Controller{
function showlist(){
// 调用Model类
$goods = new \Model\GoodsModel();
var_dump($goods);
}
}
/* 在使用外部数据表时表前缀与本地表前缀不同,此时需要使用
到真实的数据表名 */
class QqModel extends Model{
//定义当前模型操作真实的数据表
protected $trueTableName = 'tencent_qq';
或者:
//定义表前缀
protected $tablePrefix = 'tencent_';
}
//======================实例化Model方法======================
//------------------------------------------------------------
// 方法一:
class GoodsController extends Controller{
$goods = new \Home\Model\GoodsModel();
}
// 方法二:(3.2版本以前的使用方法,同M()方法)
class GoodsController extends Controller{
//此方法实例化父类Model类,但操作的还是原来Goods的数据表
$goods = D('Goods');
}
// 方法三:
class GoodsController extends Controller{
$goods = M('Goods');
}
//============================================================
//------------------------------------------------------------
// 系统函数库 ThinkPHP/Common/functions.php
/*
R() 调用指定控制器下的指定方法
U() 制作url地址的快捷函数
C() 获得或设置配置变量
L() 获得语言变量信息
E() 给页面输出错误信息
A('模块/控制器') 实例化控制器对象
A('Home/User') 实例化User控制器对象
*/
//============================================================
//=======================主入口文件配置======================
//创建项目目录(必须)
define('APP_PATH','./app/');
//开启调试模式
define('APP_DEBUG',true);
//引入ThinkPHP(必须)
require('./ThinkPHP/ThinkPHP.php');
//===================访问方法路径书写方法====================
//------------------------------------------------------------
// localhost/Think/index.php/目录名/模块名/方法名
localhost/Think/index.php/home/index/index
//=========================配置文件===========================
//------------------------------------------------------------
//系统默认配置文件(不修改)
ThinkPHP/Conf/convention.php
//开启debug模式时加载的配置文件
ThinkPHP/Conf/debug.php
//关闭或开启右下角小图标
'SHOW_PAGE_TRACE' => false,
C('SHOW_PAGE_TRACE','');
//=======================配置书写目录========================
//------------------------------------------------------------
app/Common/Conf/config.php 或者 app/Home/Conf/config.php
// 前者作用范围大后者优先级高
// 写入以下内容
'SHOW_PAGE_TRACE' => true; //开启右下角的调试信息小图标
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'userhead', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '', // 密码
'DB_PORT' => '', // 端口
'DB_PREFIX' => '', // 数据库表前缀
//------------------------------------------------------------
//----------------------通常写入内容-------------------------
return array(
//'配置项'=>'配置值'
//url模式设置
//'URL_MODEL' => 0,
'URL_MODEL' => 1, //1为pathinfo模式
//让页面显示追踪日志信息
'SHOW_PAGE_TRACE' => true,
//url地址大小写不敏感设置
'URL_CASE_INSENSITIVE' => true,
);
//============================================================
//====================实例化一个数据库连接===================
/* 无论是M()方法还是D()方法都可以自动找表前缀,但之
前必须在配置文件中定义了表前缀,如表“test_user”我们
要在配置文件中先写'DB_PREFIX'=>'test_', 在使用方法时
只需要M('user')或D('user') */
$user = new \Think\Model('head');
$userlist = $user->select();
// dump()用于调试
dump($userlist);
// M()实例化一个基类对象
$user = M('head');
// D()实例化一个对象(先去找自定义Model类,如userModel等类)
$user = D('head');
//========================空操作处理=========================
//------------------------------------------------------------
// 如:页面请求的地址为:xxx/xxx/user/hello,而hello方法不存在
//think内置的方法
public function _empty(){
echo '404';
}
//利用__call方法(优先级高于_empty)
public function __call($a,$b){
echo '访问的页面不存在';
}
// 方法二:
// 在对应的模板区建立一个与该空操作同名的模板
// 如:请求的方法为hello 那门对应的模板为hello.html
//-----------------------空控制器处理------------------------
//------------------------------------------------------------
处理空控制器文件 ThinkPHP/Library/Think/App.class.php
如:页面请求的地址为:xxx/xxx/User/hello,而User控制器不存在
// 方法一:
写一个 EmptyController.class.php 为名的控制器,在该控制器下
制作一个_empty() 方法即可
//============================================================
//=======================页面跳转=============================
//跳转方法
$this->redirect('Index/index');
$this->redirect('控制器/方法名');
$this->redirect('Admin-Index/view', array('uid'=>1), 3,'页面跳转中~');
// 跳转到 其他OtherApp项目(非分组)的Admin项目分组User模块view操作
$this->redirect('OtherApp://Admin-User/view');
$this->redirect('http://www.chuxiangyi.com/');
$User = M('User'); //实例化User对象
$data['username'] = $_POST['username'];
$data['password'] = $_POST['password'];
$result = $User->add($data);
if($result){
//设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']
// $this->success('操作完成','/Article/index',3);
$this->success('新增成功', 'User/list');
} else {
//错误页面的默认跳转页面是返回前一页,通常不需要设置
// $this->error('操作失败','/Article/error',5);
$this->error('新增失败');
}
//============================================================
//========================架构-URL模式========================
// rewrite模式
// 1.将以下内容写入.hataccess 文件
<IfModule mod_rewrite.c>
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
// 2.在配置文件中开启 mod_rewrite.so模块
// 3.在配置文件中设置 AllowOverride 为 All(约255行)
//======================U()自动产生URL地址===================
//------------------------------------------------------------
// U(模块/控制器/方法);
// echo U(控制器/方法);
echo U(Index/index);
// PATHINFO模式下的URL
/Think2/index.php/Home/Index/add.html
http://localhost/web/shop/index.php/Home/user/login
// 用C('URL_MODEL')方法输出路径模式
echo C('URL_MODEL');
// 在配置文件中设置 'URL_MODEL' => 2,
// 设置后的模式为 rewrite
/Think2/Home/Index/add.html
// URL生成
U('User/add') // 生成User控制器的add操作的URL地址
U('Blog/read?id=1') // 生成Blog控制器的read操作 并且id为1的URL地址
U('Admin/User/select') // 生成Admin模块的User控制器的select操作的URL地址
// U方法的第二个参数支持数组和字符串两种定义方式,
// 如果只是字符串方式的参数可以在第一个参数中定义
U('Blog/cate',array('cate_id'=>1,'status'=>1))
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate?cate_id=1&status=1')
// 锚点支持
U('Blog/read#comment?id=1')
//============================================================
//=====================自定义函数目录========================
// 自定义函数写在
/app/Common/Common/function.php
//============================================================
//==================在某方法之前与之后执行===================
// public function _before_方法名(){}
public function _before_hello(){
echo '_before_hello';
}
public function _after_hello(){
echo '_after_hello';
}
//------------------------------------------------------------
//-----------------------注册自动验证------------------------
// 自定义数据Model模型类实现具体的验证规则
// Step 1
// 模型文件中Model/UserModel.class.php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
//一次性获得全部验证错误
protected $patchValidate = true;
//实现表单项目验证
//通过重写父类属性_validate实现表单验证
protected $_validate = array(
//验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]
// 账户 用户名
//验证用户名,require必须填写项目
array('username','require','用户名必须填写'),
array('password','require','密码必须填写'),
//可以为同一个项目设置多个验证
array('repassword','require','确认密码必须填写'),
//与密码的值得是一致的
array('repassword','password','与密码的信息必须一致',0,'confirm'),
// 其他
//邮箱验证
array('email','email','邮箱格式不正确'),
//验证qq
//都是数字的、长度5-10位、 首位不为0
//正则验证 /^[1-9]\d{4,9}$/
array('qq',"/^[1-9]\d{4,9}$/",'qq格式不正确'),
//学历,必须选择一个,值在2,3,4,5范围内即可
array('xueli',"2,3,4,5",'必须选择一个学历',0,'in'),
//爱好项目至少选择两项以上
//爱好的值是一个数组,判断其元素个数即可知道结果
//callback利用当前model里边的一个指定方法进行验证
array('hobby','check_hobby','爱好必须两项以上',1,'callback'),
// 手机
array('phone','require','手机不可为空'),
array('phone',"/^1[34578]{1}\d{9}$/",'手机格式错误',2),
);
//自定义方法验证爱好信息
//$name参数是当前被验证项目的信息
//$name = $_POST['user_hobby']
function check_hobby($name){
if(count($name)<2){
return false;
}else{
return true;
}
}
}
// Step 2
// 控制器文件中Controller/RegisterController.class.php
namespace Home\Controller;
use Think\Controller;
class RegisterController extends Controller{
public function index(){
$this->display('Register/index');
}
public function register(){
//实例化上面定义的UserModel类
// \Home\Model\UserModel() 使用绝对路径
$user = new \Home\Model\UserModel('user');
if($user->create()){ //create集成表单验证
echo '验证通过';
$user->atime = time();
$user->add();
}else{
// 如果错误输出不来用print_r(),getError为父类Model方法
dump($user->getError());
}
}
}
//============================================================
//=======================控制器-伪静态=======================
'URL_HTML_SUFFIX'=>'shtml'
//=========================模板==============================
//======================指定显示模板=========================
$this->display('User/add'); // View/user/add.html
$this->display('模板文件夹/具体模板');
/* T函数作用:
生成模板文件名
返回值是一个完整的模板文件名 */
$this->display(T('Public/menu'));// 返回当前模块/View/Public/menu.html
//-------------------------变量解析---------------------------
//------------------------------------------------------------
{$time|date='Y-m-d',###} // “|” 前后不可有空格
{:date('Y-m-d',$time)}
//---------------------视图-模板引擎的切换-------------------
//------------------------------------------------------------
'TMPL_ENGINE_TYPE' =>'PHP'
//---------------------模板中使用框架结构--------------------
//------------------------------------------------------------
// 模板中
<frameset cols="200px,*" frameborder="yes">
<frame src="__CONTROLLER__/left" noresize scrolling="yes" />
<frame src="__CONTROLLER__/right" name="right" />
</frameset>
// 控制器中
class IndexController extends Controller {
public function index(){
$this->display('Index/index');
}
public function left(){
$this->display('index/left');
}
public function right(){
$this->display('index/right');
}
}
//------------------------模板替换----------------------------
//------------------------------------------------------------
// 不含域名
__ROOT__ 指定到站点 /web/shop
__APP__ 指定到应用 /web/shop/index.php
__MODULE__ 指定到模型 /web/shop/index.php/home
__CONTROLLER__ (__或者__URL__ 兼容考虑)
指定到控制器 /web/shop/index.php/home/user
__ACTION__ 指定到方法 /web/shop/index.php/home/user/useradd
__SELF__ 当前的页面URL /web/shop/index.php/Home/user/userAdd
__PUBLIC__ 指定到公共目录 /web/shop/Public
// 常量 php中使用
CONTROLLER_NAME //正在访问的控制器
ACTION_NAME //正在访问的方法
IS_CGI 是否属于 CGI模式
IS_WIN 是否属于Windows 环境
IS_CLI 是否属于命令行模式
__ROOT__ 网站根目录地址
__APP__ 当前项目(入口文件)地址
__GROUP__ 当前分组的URL地址
__URL__ 当前模块的URL地址
__ACTION__ 当前操作的URL地址
__SELF__ 当前URL地址
__INFO__ 当前的PATH_INFO字符串
__EXT__ 当前URL地址的扩展名
APP_NAME 当前项目名
GROUP_NAME 当前分组名
MODULE_NAME 当前模块名
ACTION_NAME 当前操作名
APP_DEBUG 是否开启调试模式
MODE_NAME 当前模式名称
APP_PATH 当前项目路径
THINK_PATH 系统框架路径
MEMORY_LIMIT_ON 系统内存统计支持
RUNTIME_FILE 项目编译缓存文件名
THEME_NAME 当前主题名称
THEME_PATH 当前模板主题路径
APP_TMPL_PATH 当前模板URL路径
LANG_SET 当前浏览器语言
MAGIC_QUOTES_GPC MAGIC_QUOTES_GPC
NOW_TIME 当前请求时间(3.1新增)
IS_GET 当前是否GET请求(3.1新增)
IS_POST 当前是否POST请求(3.1新增)
IS_PUT 当前是否PUT请求(3.1新增)
IS_DELETE 当前是否DELETE请求(3.1新增)
IS_AJAX 当前是否AJAX请求(3.1新增)
//===========================内置标签========================
//----------------------用foreach显示数组--------------------
// 1.在控制器中分配变量
$user = M('user_head');
$list = $user->select();
$this->assign('list',$list);
$this->display('Index/index');
// 2.在模板中显示变量
<foreach name="被分配的变量名" item="书写代号">
{$key}//这个$key变量可以输出0 1 2 3 4 5
{$书写代号.id}<br />
{$书写代号.name}<br />
</foreach>
//----------------------用volist显示数组---------------------
//------------------------------------------------------------
<volist name="被分配的变量名" id="书写代号"
offset="第几条开始显示" length='显示多少条'>
{$书写代号.name}
</volist>
//============================================================
//----------------------增删改查通用语句---------------------
$model = M('demo');
$model ->execute();//insert update delete
$model ->query();//select
//========================插入数据============================
//------------------------create()----------------------------
/* create方法并不算是连贯操作,因为其返回值可能是布尔值,
所以必须要进行严格判断 */
// 方法一
// create()创建数据对象,可进行自动验证和过滤操作
// step1
$user = M('demo');
// step2
$data['name'] = 'Stephen';
$data['sex'] = '1';
$data['age'] = '22';
// step3 创建数据对象
$user->create($data);
// 把用户对象写入数据库
$user->add();
// 方法二
$user = M('user'); //创建数据模型
$user->create(); //创建数据,接收post表单提交的数据
$user->atime = time(); //修改属性,向数据里添加内容或修改内容
$user->add(); //将创建好的数据添加到数据库
//------------------------------------------------------------
//------------------------data()------------------------------
// 用data()方法插入数据 data()不会进行自动验证和过滤操作
// step1
$user = M('demo');
// step2
$data['name'] = 'Anna';
$data['sex'] = '0';
$data['age'] = '12';
// step3
$user->data($data)->add();
//------------------------------------------------------------
//--------------------field()限制创建的字段------------------
$data['name'] = 'hello';
$data['sex'] = '1';
$data['age'] = '23';
$user = M('demo');
// 在create之前加入field()方法可限制创建的数据对象
$d = $user->field('name,sex')->create($data);
dump($d);
// 不查询某个字段,如text字段不查询
$user = field('text,content',true)->select();
// 只查询出field括号内的字段
$user->field('id,name,sex')->select();
//------------------------------------------------------------
//------------------------add()数据写入-----------------------
$user = M('demo');
$data['name'] = 'xiaoming';
$data['sex'] = '1';
$data['age'] = '23';
// 使用add()方法将数据写入数据库
// 返回 Id
$insertId = $user->add($data);
//------------------------------------------------------------
//----------------filter(函数)字段内容过滤-------------------
$data['name'] = '<b>thinkphp</b>';
$data['sex'] = '1';
$User = M('demo');
// 写入数据库的时候会把name字段的值转化为thinkphp。
$User->data($data)->filter('strip_tags')->add();
//------------------------------------------------------------
//------------------------addAll()批量添加数据---------------
// 批量添加数据
$dataList[] = array('name'=>'one','sex'=>'1');
$dataList[] = array('name'=>'two','sex'=>'0');
$User->addAll($dataList);
//=======================数据读取=============================
//-----------------------获取字段名---------------------------
$user = M('user');
$user->getDbFields();
//---------------------select()查询出数据集------------------*
//------------------------------------------------------------
// 将所有数据查出,失败返回 false,无结果返回 null
$user = M('demo');
$data = $user->select();
dump($data);
// 加入条件
$user->field('name,sex')->where('id > 2')->order('age')->limit(3)->select();
//查询主键值为30的信息
$user->select('30');
// 查询主键为21,23,27的值
$user->select('21,23,27');
//----------------find()查询出一条数据数据-------------------*
//------------------------------------------------------------
// 查询出一条数据
$user = M('demo');
// 失败返回false
if($data = $user->find()){
dump($data);
}
// 加入where条件
$user = M('demo');
$data = $user->field('name,sex')->where('id > 2')->find();
dump($data);
// 返回一维数组
$data->find('30');
$manager->where("username = '$username' and password = '$password'")->find();
//---------------getField()获取一列或一个数据----------------
//------------------------------------------------------------
// 获取列数据中的第一条
$user = M('demo');
$data = $user->getField('name');//默认第一个
// 第二个参数位true 则获取整列数据
$user->where("id = 3")->getField('name',true);
// 限制显示条数
$nickname = $User->where('status=1')->getField('nickname',8);
$nickname = $User->where('status=1')->limit(8)->getField('nickname',true);
// 返回二维数组,键名为第一个
$nickname = $User->where('status=1')->getField('id,nickname,sex');
// 使用连接符':' 键名是id值,键值则是account:nickname连接组成的字符串
$result = $User->where('status=1')->getField('id,account,nickname',':');
//=========================数据更新==========================
//-----------------------更新指定记录------------------------*
$user = M('demo');
$data['name'] = 'one';
$data['sex'] = '1';
// 使用save
$user->where('id=5')->save($data);
//------------------------------------------------------------
//-------------------------更新整张表------------------------
$user = M('demo');
$data['name'] = 'one';
$data['sex'] = '1';
// 未加where条件
$user->save($data);
//------------------------------------------------------------
//-----------------------setField()更新某个字段--------------
$user = M('demo');
$user->where('id=5')->setField('name','Stephen');
//更新多个字段
$User = M("User");
$data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
$User-> where('id=5')->setField($data);
//-------------------------批量更新---------------------------
//------------------------------------------------------------
$id = isset($_GET['select'])? implode(',',$_GET['select']):$_GET['id'];
$article->where("id in ({$id})")->setField('del',1);
$article->where("id in ({$id})")->save(array('del'=>1));
//------------------------------------------------------------
//----------------------setInc()自加自减----------------------
$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('字段',3); // 用户的积分加3
$User->where('id=5')->setInc('字段'); // 用户的积分加1
$User->where('id=5')->setDec('字段',5); // 用户的积分减5
$User->where('id=5')->setDec('字段'); // 用户的积分减1
//=============================删除============================
//-------------------------删除单个数据-----------------------
$user = M('demo');
$user->delete(3);
$user->delete(1,2,3);
$user->where('name=one')->delete();
//==========================模型==============================
//----------------------查询出某个字段-----------------------
$this->getByUsername($username);//getBy后面的Username为数据表的字段名
//==========================where特点=========================
//------------------------------------------------------------
// 用数组作为查询条件
$User = M("User");
$map['name'] = 'thinkphp';
$map['sex'] = 'man';
$User->where($map)->select();
// 表达式查询
$map['字段1'] = array('表达式','查询条件1');
$map['id'] = array('in','12,13,23');//表达式不分大小写
$Model->where($map)->select();
// 下面是表达式
/*
表达式 含义
EQ 等于(=)
NEQ 不等于(<>)
GT 大于(>)
EGT 大于等于(>=)
LT 小于(<)
ELT 小于等于(<=)
LIKE 模糊查询
[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN 查询
EXP 表达式查询,SQL语法 */
// where可以多次调用
//===========================专题=============================
//===========================分页=============================
// 方法一
$user = M('demo');
// step1
$page = new \Think\Page($user->count(),2);
// step2
$data = $user->limit($page->firstRow .','.$page->listRows)->select();
// step3
$this->assign('datalist',$data); //显示数据
$this->assign('page',$page->show()); //显示分页
// 方法二
$user = M('demo');
// 进行分页数据查询 注意page方法的参数的前面部分是当前的页数
// 使用 $_GET[p]获取
$list = $user->page($_GET['p'].',2')->select();
$this->assign('datalist',$list);
$Page = new \Think\Page($user->count(),2);
$show = $Page->show();
$this->assign('page',$show);
//============================================================
//---------------------Ajax返回的数据形式--------------------
//返回格式有:JSON、JSONP、XML、EVAL
// 返回JSON格式
$arr = array('name'=>'Stephen','age'=>'23');
$this->ajaxReturn($arr,'JSON');//返回json格式 {"name":"Stephen","age":"23"}
// 返回普通数据
$this->ajaxReturn($arr,'EVAL');
//------------------------------------------------------------
//----------------------Ajax动态请求数据---------------------
// 模板中的书写方式
$(function (){
// {name:'jack',age:'23'}这样的方式传过去的其实是一个post数组
$.post('__MODULE__/Sort/check',{name:'jack',age:'23'},function (data){
alert(data.name);
alert(data.age);
},"json");
});
// 框架中的书写方式
public function check($name,$age){
$json = array('name'=>$name,'age'=>$age);
$this->ajaxReturn($json,'JSON');
}
//============================================================
//------------------------文件上传----------------------------
// 详见手册专题文件上传
$upload = new \Think\Upload();
$upload->maxSize = 3145728;
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');
$upload->rootPath = './Public';
$upload->savePath = '/uploads/';
$upload->autoSub = true; //是否开启子目录(日期目录)保存,默认开启
$info = $upload->upload();
if(!$info){
$this->error($upload->getError());
}else{
foreach ($info as $key => $value){
$savePath = $value['savepath'];
$saveName = $value['savename'];
}
$picPath = $savePath.$saveName;
}
//============================================================
//------------------------图像处理----------------------------
// 详见手册专题图像处理
$image = new \Think\Image();
$image->open($upload->rootPath.$picPath);
$image->thumb(400, 400)->save($upload->rootPath.$savePath.'logo_'.$saveName);
//============================================================
//-------------------------验证码-----------------------------
// 模板中写入
<img onClick="this.src=this.src+'?'+Math.random()" src="__MODULE__/login/checkCode" />
// 被调用的后台验证码方法
public function checkCode(){
$config = array(
'fontSize' => 30,
'length' => 3,
'useNoise' => false, // 关闭验证码杂点
);
$verify = new \Think\Verify($config);
$verify->entry();
}
// 检查验证码
$verify = new \Think\Verify();
if(!$verify->check($_POST['checkcode'])){
$this->error('验证码错误');
}
//============================================================
//------------------------多表查询----------------------------
// 1、原生查询示例:
$Model = new Model();
$sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.','.$p->listRows;
$voList = $Model->query($sql);
// 2、join()方法示例:
$user = new Model('user');
$list = $user->join('RIGHT JOIN user_profile ON user_stats.id = user_profile.typeid' );
M("user u")->join("{$per}user_info x ON x.uid = u.id")->where("u.id = $uid")->find();
// 3、table()方法示例:
$list = $user->table('user1 a, user2 b')->where('a.id = b.id')
->field('name,sex')->order('id desc' )->select();
//============================================================
//------------------------模板中使用函数---------------------
{:htmlspecialchars_decode($data['data'])}
//============================================================
//--------------------------路由------------------------------
// 开启路由
'URL_ROUTER_ON' => true,
//定义路由规则
'URL_ROUTE_RULES' => array(
'index' =>array('index/index','',array('ext'=>'html')),
'p' =>array('product/index','',array('ext'=>'html')),
'plist' =>array('product/plist','',array('ext'=>'html')),
'slist' =>array('product/slist','',array('ext'=>'html')),
'details/:id\d' =>array('product/details','',array('ext'=>'html')),
'/^alist\/(.*\d)_(.*\d)$/' =>array('article/alist?id=:1&p=:2','',array('ext'=>'html')),
'alist/:id\d' =>array('article/alist','',array('ext'=>'html')),
'article/:id\d' =>array('article/article','',array('ext'=>'html')),
'category' =>array('product/category','',array('ext'=>'html')),
),
//============================================================
//---------------------------静态缓存-------------------------
// 静态缓存
// 'HTML_PATH' 缓存目录,这是个常量不是配置项,在入口文件中定义
// 'HTML_CACHE_ON' => true, // 开启静态缓存
'HTML_CACHE_TIME' => 3600, // 全局静态缓存有效期(秒)
'HTML_FILE_SUFFIX' => '.html', // 设置静态缓存文件后缀
'HTML_CACHE_RULES' => array( // 定义静态缓存规则
// 定义整个文章控制器
'Article:' => 'Article/{:action}_{id}',
// 对商品进行缓存
'Product:plist' => 'Product/plist_{id}_{pid}',
// 对单个操作进行缓存
'Index:index' => 'Index/index',
'Product:category'=>array('Product/category',0),
),
//------------------------------------------------------------
//---------------------数据缓存(通用缓存)--------------------
// 查询缓存,快速缓存
// 数据缓存
// 缓存的文件在 Runtime/Temp中
'DATA_CACHE_TYPE' => 'File',
'DATA_CACHE_PREFIX' => 'Kangku_',
'DATA_CACHE_TIME' => 600,
//------------------------------------------------------------
//-----------------------快速缓存-----------------------------
// 永久缓存
// 缓存数据
F('data',$Data);
// 指定目录 默认DATA_PATH
F('data',$Data,TEMP_PATH);
// 删除缓存
F('data',NULL);
//------------------------------------------------------------
//-----------------------查询缓存-----------------------------
// 查询时缓存
// 只要加上cache(true)后第一次查询后就从缓存数据中取值,不用其他判断
// 1.默认缓存
$Model->cache(true)->where('status=1')->select();
// 2.给缓存取名,可用此名称读值
$Model->cache('cache_name')->select();
// 读值
$value = S('cache_name');
// 3.设置缓存方式与时间
$Model->cache(true,60,'file')->select();
//------------------------------------------------------------
//--------------------SQL解析缓存-----------------------------
//开启缓存
'DB_SQL_BUILD_CACHE' => true,
//缓存方式
'DB_SQL_BUILD_QUEUE' => 'file',
// SQL缓存的队列长度
'DB_SQL_BUILD_LENGTH' => 20,Think.php
选择阅读主题色