ThinkPHP架构新手入门专业知识

<就可以,不用一定有Public控制模块

$this- display(别的主题风格下的 文档夹下的 模版文档);//必须打开主题风格适用
$this- display( my:Index:index );

$this- display(一个url相对路径);
$this- display( ./ );

$this- display( ./ , utf-8 , text/xml );

$this- show($content);
3.fetch方式
得到模版文档中的內容,以标识符串方式回到
$content=$this- fetch( Public:error );
4.show方式
不用模版文档,能够立即輸出模版內容
$content=$this- fetch( Public:error );
dump($content);
$content=str_replace( h1 , i ,$content);
$this- show($content);
模版中的取值
//$this- assign( name , 赵桐正 );
$this- name= 赵桐正2
$this- display();
模版更换
__PUBLIC__:会被更换成当今网站的公共性文件目录 一般是 /Public/
__ROOT__: 会更换成当今网站的详细地址(没有网站域名)
__APP__: 会更换成当今新项目的URL详细地址 (没有网站域名)
__GROUP__:会更换成当今排序的URL详细地址 (没有网站域名)
__URL__: 会更换成当今控制模块的URL详细地址(没有网站域名)
__ACTION__:会更换成当今实际操作的URL详细地址 (没有网站域名)
__SELF__: 会更换成当今的网页页面URL

拆换模版自变量标准,改动配备项
TMPL_PARSE_STRING = array(  //加上自身的模版自变量标准
__CSS__ = __ROOT__. /Public/Css ,
__JS__ = __ROOT__. /Public/Js ,
),

模版中的自变量
自变量輸出
1.标量輸出
2.数字能量数组輸出
{$name[1]}  //数据库索引数字能量数组
{$name['k2']}  //关系数字能量数组
{$name.k1}
3.目标輸出
{$name:k}
{$name- k}
系统软件自变量
{$Think.get.id}
应用涵数
{$name|strtoupper} 转化成的编译程序后文档是 ?php echo (strtoupper($name)); ?
{$name|date= Y m d H:i:s ,###}
默认设置值
{$name|default= 这儿是默认设置值 }
计算符
+ * / % ++
{$name++}

模版中的基本英语的语法
导进CSS和JS文档
1、css link
js  scr
link rel= stylesheet type= text/css href=jzxy/201410/’__PUBLIC__/Css/test.css’/>
script src=jzxy/201410/’__PUBLIC__/Js/test.js’>
2.import
import type= js file= Js.test / //导进Public文档夹下边的Js文件目录中的test.js文档,import标识能够省去type特性,默认设置便是js的
import type= css file= Css.test /
//能够变更默认设置文档夹 设定basepath特性
import type= js file= Js.my basepath= ./Other /
3.load
//方式能够全自动检验导进的文档种类
load href=jzxy/201410/’__PUBLIC__/Js/test.js’ />
支系构造
1、if
if condition= $sex eq 男
男生是泥巴做的
else /
女性是水做的
/if

if condition= $age lt 18
未满十八岁
elseif  condition= $age eq 18 /
青春年少青春年少
else /
成年人
/if
  gt
  lt
== eq
= elt
= egt
!= neq
=== heq
!== nheq

switch name= number
case value=jzxy/201410/’1′>一个僧人抬水吃
case value=jzxy/201410/’2′>2个僧人台水吃
case value=jzxy/201410/’3′>三个僧人没水吃
default/ 这儿是默认设置值
/switch
循环系统构造
1.for
table border= 1 width= 500
for start= 10 end= 00 name= j step= -2 comparison= gt
tr td {$j} /td td abc /td /tr
/for
/table

2.volist
volist name= list id= v
{$v.username} br/
/volist
3.foreach
foreach name= list item= v key= k
{$k} -{$v} br/
/foreach
独特标识
1、较为标识
eq或是 equal 相当于
neq 或是notequal 不一于
gt 超过
egt 超过相当于
lt 低于
elt 低于相当于
heq 恒相当于
nheq 不恒相当于

2.范畴标识
in
in name= n value=jzxy/201410/’9,10,11,12′>在这里些数据里边没有这种数据的范畴内
notin name= n value=jzxy/201410/’9,10,11,12′>在这里些数据里边没有这种数据的范畴内
between
notbetween name= n value=jzxy/201410/’1,10′>{$n}在1-10中间{$n}没有1到10中间
3.present
标识来分辨模版自变量是不是早已取值,
present name= m m有取值 else/ m沒有取值 /present
4.Empty
empty标识分辨模版自变量是不是为空,
empty name= n n为空取值 else/ n有值 /empty
5.Defined
分辨变量定义是不是早已界定
6.Define
在模版中界定变量定义
7.Assing
模版中自变量取值

别的标识应用
1、在模版中立即应用PHP编码
php echo 我是赵桐正 /php
2、提议变更上下定界符
在配备文档中更改
TMPL_L_DELIM = ' { , //改动左定界符
TMPL_R_DELIM = } , //改动右定界符

模版的应用方法
模版包括
include file= 详细模版文档名 /
include file= ./Tpl/default/ /
include file= read /
include file= Public:header /
include file= blue:User:read /
include file= $tplName /
include file= header title= ThinkPHP架构 keywords= 开源系统WEB开发设计架构 /
在模版中自变量用[自变量]接纳
include file= file1,file2 /
模版3D渲染
1、全自动打开模版3D渲染 设定配备文档
LAYOUT_ON = true,//打开模版3D渲染
提前准备一个模版3D渲染网页页面,在网页页面中应用{__CONTENT__}接纳实际模版网页页面的內容
假如在摸一个实际模版中不期待应用3D渲染模版,能够在页首加上{__NOCONTENT__}
2、不动启全自动模版3D渲染能够在每个实际网页页面的页首加上
layout name= layout /
3.应用方法
在3D渲染模版文档中还可以应用别的模版文档的內容
include file= Public:header /
body
p 这儿是3D渲染网页页面!!! /p
{__CONTENT__}
/body
/html
模版的承继 

 操纵器的控制模块和实际操作
空控制模块和空实际操作
1、空实际操作
function _empty($name){
$this- show( $name 不会有 a href=jzxy/201410/’__APP__/Index/index’>回到”);
}
2.空控制模块
class EmptyAction extends Action{
function index(){
$city=M( City );
$arr=$city- select();
$this- assign( list ,$arr);
$name=MODULE_NAME;
$this- display( City:$name );
}
}

外置实际操作和后置实际操作
1、外置实际操作: _before_实际操作名
2、后置实际操作: _after_实际操作名

 URL
URL标准
1、默认设置是区别尺寸写的
2、假如大家不愿区别尺寸写能够改配备文档
URL_CASE_INSENSITIVE = true,//url不区别尺寸写
3、假如控制模块名叫 UserGroupAction
那麼url找控制模块就必需要写出

/user_group/index

4、假如 URL_CASE_INSENSITIVE = false
那麼url还可以写为

/UserGroup/index

URL伪静态数据
URL_HTML_SUFFIX = html|shtml|xml ,//限定伪静态数据的后缀名
URL路由器
1、起动路由器
要在配备文档中打开路由器适用
2、应用路由器
1.标准表述式配备路由器
my = Index/index ,//静态数据详细地址路由器
:id/:num = Index/index ,//动态性详细地址路由器
year/:year/:month/:date = Index/index ,//动态性和静态数据混和详细地址路由器
year/:yeard/:monthd/:dated = Index/index ,//动态性和静态数据混和详细地址路由器
再加 d意味着种类只有是数据
my/:id$ = Index/index ,// 再加$表明详细地址中只有是 my/1000 后边不可以有别的內容了
2.正则表达式表述式配备路由器
/^year/(d{4})/(d{2})/(d{2})/ = Index/index?year=:1 month=:2 date=:3
3、留意事宜:
1.越繁杂的路由器越向前面放
URL_ROUTE_RULES = array(
my/:year/:month:/:day = Index/day ,
my/:idd = Index/index ,
my/:name = Index/index ,
)
2.可使用$做为彻底配对的路由器标准
URL_ROUTE_RULES = array(
my/:idd$ = Index/index ,
my/:name$ = Index/index ,
my/:year/:month:/:day$ = Index/day ,
),
3.用正则表达式配对的方法
URL_ROUTE_RULES = array(
/^my/(d+)$/ = Index/index?id=:1 ,
/^my/(w+)$/ = Index/index?name=:1 ,
/^my/(d{4})/(d{2})/(d{2})$/ = Index/day?year=:1 month=:2 day=:3 ,
),

URL重新写过
URL转化成

 排序、网页页面自动跳转与ajax
多运用配备方法
应用排序
网页页面自动跳转
$this- success( 查寻取得成功 ,U( User/test ));
$this- redirect( User/test , ,5, 网页页面已经跳 );
Ajax方法
大C方式  获得配备文档中数字能量数组名字和值
echo C( DB_USER );

大F方式  文档解决
写:F( 文档名 , 数字能量数组 , 文件目录 );
读:F( 文档名 , , 文件目录 );

大U方式  URL解决
在PHP里
U( 方式名 )
在模版中
当今涵数{:U( 方式名 )}
别的涵数{:U( 涵数/方式名 )}

*文档引进
css file= __PUBLIC__/css/base.css /
js file= __PUBLIC__/js/base.js /

*表格解决
方式1 $this- _post( );
获得递交表格,会应用涵数htmlspecialchars()过虑
$username=$this- _post( username );

方式2  I( username );  [3.1.3新作用]
大I,全自动分辨post和get
$username=I( username );
echo I( username , 不会有值时的默认设置值 , 应用涵数 );

查询是不是了解据递交:
print_r(I( post. ));

严禁表格解决涵数的浏览,提高安全性性
方式1
if(!$this- isPost()) _404( 网页页面不会有 ,U( index ));
echo 一切正常递交';

方式2 (强烈推荐)  halt 网页页面能够订制不正确网页页面:
if(!IS_POST) halt( 网页页面不会有 );
echo 一切正常递交';

制订方式: 加上: TMPL_EXCEPTION_FILE = ./Public/ ,
文档接纳不正确內容:./Public/,只有写原生态php,适用变量定义,如__APP__
?php echo $e['message']; ?

//回到插进的ID值,数据信息库从1刚开始
if(M( user )- data($data)- add()){
$this- success( 加上取得成功 , index );
}else{
$this- error( 加上不成功 );
}

*輸出到模版

1,数据信息提前准备
方式1
$this- assign( 自变量名 , 自变量值 )

方式2
$this- 自变量名= 自变量值';

方式3(新版本本,减少了编码)
$this- assign( 自变量名 , 自变量值 )- display();

方式4(一行拿下)
$this- assign( data ,M( User )- select())- display();

2,模版輸出
方式1(.英语的语法会分辨是目标還是数字能量数组,配备主要参数:TMP_VAR_IDENTIFY= array , 那样便会觉得是数字能量数组,以提升速率)
foreach name= data item= v
{$v.username} {$v.password} {$v.time|date= y-m-d H:i:s,### }
/foreach

应用涵数 {:phpinfo()}

方式2
volist

*排序运用(运用组)前后左右台仅用一个通道文档
idnex.php (默认设置)
?php
define( APP_NAME , App );
define( APP_PATH , ./App/ );
define( APP_DEBUG , TRUE );
require ./';
?

App/
?php
return array(
//打开排序
APP_GROUP_LIST = Index,Admin ,
DEFAULT_GROUP = Index ,

TMPL_FILE_DEPR = _ , //默认设置模版隔开符为_并非文档夹方式
);

自定操纵器
1,在Action文档夹删掉原先的默认设置操纵器
2,创建2个文档夹,各自为前台接待和后台管理如Index Admin
浏览: /Index  /Admin

自定配备文档(相互之间不可以浏览,但公共性配备能够相互之间浏览)
1,在host/App/Conf/创建2个文档夹,各自为前台接待和后台管理如Index Admin
配备: 前台接待host/App/Conf/
后台管理host/App/Conf/

自定涵数
1,在host/App/Common/创建2个文档夹,各自为前台接待和后台管理如Index Admin
配备: 前台接待host/App/Common/
后台管理host/App/Common/

留意:排序运用不兼容{:U( form_save )}立即应用,即当今操纵器当今方式,那样写:
{:U( /Index/Index/form_save )}
*排序运用[结束]

**单独排序配备
打开:
1,先配备运用排序
2,加上主要参数
APP_GROUP_MODE = 1,  //打开单独排序
APP_GROUP_PATH = Modules , //默认设置排序相对路径,默认设置:Modules

常见相对路径自变量:__ROOT__. / .APP_NAME. / .C( APP_GROUP_PATH ). / .GROUP_NAME. /
新的文件目录构造:
ThinkPHP  //系统软件文件目录
App  //新项目文件目录
Public  //静态数据文档文件目录
index.php //全部新项目的通道文档

App:
Modules  //新项目控制模块  == Admin/Action,Tpl,Model,Conf,Common; Index/Action,Tpl,Model,Conf,Common;
Common  //公共性Common
Conf  //公共性Conf
Lib  //公共性Lib
Tpl  //公共性Tpl
Runtimes  //运作时

Public:
css js img

**JQuery 多线程递交
$( #send-btn ).click(
function(){
var username=$( input[username=username] );
var password=$( input[password=password] );

if(username.val()== ){
alert( 客户名不可以为空 );
username.focus();
//让客户名获得聚焦点
return;
}

if(password.val()== ){
alert( 登陆密码不可以为空 );
password.focus();
//让客户名获得聚焦点
return;
}

//刚开始多线程传送(要在模版内才能够分析php,不能以在独立js文档实际操作)
var sendUrl='{:U( Index/Index/form_save , , )}';

$.post(sendUrl,{username:username.val(),password:password.val()},function(data){}, json );
}
);

**php多线程表格解决:
Public function form_save(){
//var_dump($this- isAjax());  //分辨是不是了解据递交
//var_dump(IS_AJAX);  //[新版本本]分辨是不是了解据递交
if(!$this- isAjax()) halt ( 网页页面不会有 );
$data=jzxy/201410/array(
username = $this- _post( username ),
password = $this- _post( password ),
time = time()
);
//p($data);

}

11课刚开始没纪录

*引进控制模块
1,认证码控制模块,关键包里沒有,必须手动式加上,放到ThinkPHP/Extend/Library/ORG/Util/Image.class.php
import( ORG.Util.Image );
Image::BuildImageVerify(4,5, png );
浏览:该方式详细地址就可以
换认证码,应用一个JS任意数涵数:Math.random();
留意:假如出現伪静态数据后缀名名,必须在{:U( Admin/Login/index ), , } 提升两个空主要参数
混和方式区别尺寸写

认证码后台管理认证
if(md5($_POST[code])!= session('verify')){ $this- error('认证码不正确');}
if(md5($this- _post[code])!= session('verify')){ $this- error('认证码不正确');}
if(I('code','','md5')!= session('verify')){ $this- error('认证码不正确');}

2,分页查询类
import('ORG.Util.Page');  //导进类
$max=M('User')- count();  //查寻总总数
$page=new Page($max,5,'','Index/Index/index/p/');
//案例化目标,主要参数:1总总数,2每张总数,3分页查询自动跳转的主要参数,4设定URL相对路径,在排序时有效,由于少个运用组名
$limit=$page- firstRow.','.$page- listRows;  //获得第一页和总页数并设定为limit值
$m=M('User')- order('time DESC')- limit($limit)- select(); //查出来第一页的数据信息
$this- User=$m;  //把数据信息分派给前台接待模版,用以foreach解析xml
$this- page=$page- show();  //把分页查询內容分派给前台接待模版

模版里分页查询数据信息启用:{$page}

**SESSION  储存到数据信息库
1, 配备文档加上: 'SESSION_TYPE'= 'Db',

相关阅读