ThinkPHP入门(二)
smarty使用
smarty引入流程
1. 控制器IndexAction.class.php
function index()
$this -> display(); (父类Action的display)
2. 父类ThinkPHP/Lib/Core/Action.class.php
function display()
$this->view->display
3. ThinkPHP/Lib/Core/View.class.php
function display()
$this->fetch()
function fetch()
tag('view_parse',$params);
ThinkPHP/Conf/tags.php
view_parse => parseTemplate(Behavior行为)
4. 行为ThinkPHP/Lib/Behavior/parseTempateBehavior.class.php
function run()
$class = "TemplateSmarty";
$tpl = new $class
$tpl -> fetch()
5. TemplateSmarty.class.php
ThinkPHP/Extend/Driver/Template/TemplateSmarty.class.php
function fetch()
vendor('Smarty.Smarty#class');
//ThinkPHP/Extend/Vendor/Smarty/Smarty.class.php
获取真正的smarty
new Smarty();
C()函数会读取配置变量信息(convertion.php config.php)
2.在config.php里边修改smarty的参数信息
3.smarty布局继承效果
布局继承 extends block
{extends file="public/layout.html"}
{block name="main"}
4.模板包含
{include file=”public/ucenterleft.html”}
5.display()显示具体模板
smarty−>display(模板名称);ThinkPHP框架调用模板:①this -> display(); tp框架会自动把摸板名称给拼装好,与操作名一致
② this−>display(模板名);调用当前模块下的指定模板,模板没有后缀名③this -> display(模块/模板名); 调用其他模块下额指定模板
④ $this -> display(相对路径模板); 了解
引入机制import
include() require
通过import引入对应的类文件
import(“hello.world.apple”); hello/world/apple.class.php
1.都可以引入什么地方的类文件
a)本项目的类文件可以引入 import(“@.dir.dir.file”);
i.对应的类文件都需要创建在shop/Lib/XXX目录下边
b)ThinkPHP核心类文件可以引入 import(“think.dir.dir.file”)
i.对应类文件都设置在ThinkPHP/Lib/XXX
c)ThinkPHP/Extend 扩展库类文件可以引入 import(“ORG.dir.dir.file”);
i.对应的类文件在ThinkPHP/Extend/Library/ORG/XXX
d)特殊类引入,#号使用
登陆功能
产生验证码
//生成验证码
function verifyImg(){
import("ORG.Util.Image");
echo Image::buildImageVerify();
}
session操作
//持久化用户信息(id和名字)
session("mg_name",$user_info['mg_name']);
session("mg_id",$user_info['mg_id']);
分页实现
function showlist(){
$goods_model = D("Goods");
//1 引入分页类
import("@.components.Page");
//2 计算当前记录总数目
$total = $goods_model -> count();
$per = 5;
//3. 实例化分页类对象
$page = new Page($total,$per);
//4. 制作一条sql语句获得每页信息
$sql = "select * from sw_goods ".$page->limit;
$info = $goods_model -> query($sql);
//5. 获得页面列表
$page_list = $page->fpage(array(3,4,5,6,7,8));
$this -> assign('info',$info);
$this -> assign('page_list',$page_list);
$this -> display();
}
缓存使用
缓存:把数据库中的信息获取出来,放到一个缓冲介质里边,在相当一段时间之内,重复的数据就去缓存里边读取。
缓存介质:内存、file文件、数据库
不同的缓存介质,操作的方式不一样

具体使用
function s1(){
//缓存设置
//缓存时间默认是永久的,可以设置
S("username","linken");
S("age",25);
S("address","北京".time(),10); //过期自动删除
S("goods_info",array('one'=>'apple','two'=>'htc','three'=>'nokia'));
echo "ok ,success";
}
function s2(){
//读取缓存信息
echo S('username')."<br />";
echo S('age')."<br />";
echo S('address')."<br />";
print_r(S("goods_info"));
}
缓存案例
//获取商品信息
function getInfo(){
//1 首先去缓存里边获得商品信息
$goods = S("info");
//2. 如果缓存里边有商品信息,直接返回,
// 否则去数据库获得数据,并生成缓存供下次调用
if(!empty($goods)){
return $goods;
} else {
$goods = "apple".time(); //从数据获得商品信息
//再把信息放入缓存,供下次调用
S("info",$goods,10);
return $goods;
}
}
多语言设置
1.进行多语言配置config.php
//配置多语言参数
'LANG_SWITCH_ON' => true, // 默认关闭语言包功能
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效
'LANG_LIST' => 'zh-cn,zh-tw,en-us', // 允许切换的语言列表 用逗号分隔
'VAR_LANGUAGE' => 'hl', // 默认语言切换变量
2.配置行为Behavior执行
<?php
return array(
'app_begin' => array(
//以下行为会一次执行,自动加载机制会引入对应的文件
'ReadHtmlCache','CheckLang' // 读取静态缓存
),
);
3.具体语言文件设置:
4.具体语言使用
$this -> assign(‘language’,L());
自动完成
收集表单信息,把数据存入数据库
可以使用”自动完成”机制对即将入库的信息进行二次处理
例如:密码加密、用户注册时间等等。
自动完成 类似 表单验证
表单验证在create()方法内部触发
自动完成 也在create()方法内部触发
//自动完成处理
// 自动完成定义
protected $_auto = array(
//array(填充字段,填充内容,[填充条件,附加规则])
array('password','md5',3,'function'),
array('user_time','time',1,'function'),
//array('user_time','abc',1,'callback'),
//array('user_time','user_qq',1,'field'),
//array('user_time','123456789',1,'string'),
);
自动映射
/进行自动映射,把一个假的表单域名称 与 真实的数据表字段名称对应起来
// 字段映射定义
protected $_map = array(
'email' => 'user_email',
'qq' => 'user_qq',
);
面向切面编程
程序开发、执行不同的环节、不同的功能利用不同的文件进行处理。
把一个大块的功能切割为小块进行开发、执行
ThinkPHP入门(二)的更多相关文章
- Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)
原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...
- Thinkphp入门 五 —模型 (49)
原文:Thinkphp入门 五 -模型 (49) [数据库操作model模型] model 模型 数据库操作 tp框架主要设计模式:MVC C:controller 控制器 shop/Li ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- ThinkPHP框架二
ThinkPHP笔记二 1.1 TP框架的配置文件 在TP框架中,所有的配置文件都是自动加载的,加载的顺序:惯例配置<应用配置<调试配置<模块配置<动态配置 1. 惯例配置(T ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- Thinkphp入门 四 —布局、缓存、系统变量 (48)
原文:Thinkphp入门 四 -布局.缓存.系统变量 (48) [控制器操作方法参数设置] http://网址/index.php/控制器/操作方法 [页面跳转] [变量调节器] Smarty变量调 ...
- Thinkphp入门三—框架模板、变量(47)
原文:Thinkphp入门三-框架模板.变量(47) [在控制器调用模板] display() 调用当前操作名称的模板 display(‘名字’) 调用指定名字的模板文件 控制器调用模板四种方式 ...
- Thinkphp入门 一 (45)
原文:Thinkphp入门 一 (45) 什么是框架? 就是一堆代码的集合,这些代码可以有变量.常量.函数.类等等.这些代码彼此紧密联系,彼此有合作关系.里边还有设计模式:MVC.单例.工厂等等. 为 ...
- DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表
原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...
随机推荐
- 深入理解Java虚拟机之读书笔记四 性能监控与故障处理工具
JDK的bin目录下存在很多有效的命令行工具,它们就是jdk\lib\toos.jar类库的封装. 一.jps:虚拟机进程状况工具,查询出LVMID. 二.jstat:虚拟机统计信息监视工具, 三.j ...
- cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。
cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.
- 如何将jsp页面的table报表转换到excel报表导出
假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...
- Windows 10磁盘占用100%解决办法
开机后磁盘占用高,是因为 windows 10 默认启用了 superfetch 服务. 这个服务的主要功能是加快程序的启动速度.开机以后,系统将那些经常使用的程序,预先从硬盘加载到内存中,这样, ...
- ubuntu 安装mysql
1.检查是否已经安装mysql netstat -tap | grep mysql 2.安装mysql 2.1 先更新下软件列表 :sudo apt-get update 2.2 安装mysql :s ...
- CCF 模拟B 无脑循环+输入输出外挂
http://115.28.138.223:81/view.page?opid=2#code 代码一有WA点80分 #include<iostream> #include<cstdi ...
- 普元部署多个应用的方法(适用EOS6.5以上版本,且无需governor中添加应用)
在EOS下跑default项目之外的另外一个项目,比如defaultNew 步骤1 安装EOS6.5,安装路径如下:E:\program\eos: 启动EOS Eos默认的应用名称为Default 步 ...
- iOS NSObject 的 isa 属性的类型 Class
以前对NSObject的isa属性也知道点,但是了解不深,今天看了这篇博文,感觉很好,总结一下: http://chun.tips/blog/2014/11/05/bao-gen-wen-di-obj ...
- 基于Hadoop 2.6.0运行数字排序的计算
上个博客写了Hadoop2.6.0的环境部署,下面写一个简单的基于数字排序的小程序,真正实现分布式的计算,原理就是对多个文件中的数字进行排序,每个文件中每个数字占一行,排序原理是按行读取后分块进行排序 ...
- Ubuntu 新建swap分区及启用
个人电脑配置:500G机械硬盘+16G NGFF SSD+8G Physical Memory 之前安装Ubuntu16.04,默认装到NGFF的SSD里,/和swap分区一共才16G,于是删除swa ...