Thinkphp 3.2笔记
重点笔记:
1.再写模板的时候一定要注意大小写 Goods_index.html 正确;goods_index.html 错误 养成程序猿好习惯。linux系统对大小写敏感。
2.基础配置
建立模块(默认访问模块)
define('BIND_MODULE','Login');
define('BIND_MODULE','Admin');
define('BIND_MODULE','User');
1.环境配置
php版本>5.3.0,用wampserver所有条件满足
2.变量
$this->show('111') 同等与echo '1';
$this->display('dd.html') 输出模板,模板位置view/index/dd.html
$this->display() 是输出默认的模板 view/index/index.html
$this->assign($arr)
截取字符串:{$data.name|substr=0,3}和
<?php echo (substr($data['name'],0,3)); ?>
默认值输出:{$user.nickname|default="这家伙很懒,什么也没留下"}
I('post.id',0,'intval')
要尽量避免直接使用$_GET $_POST $_REQUEST 等数据,这些可能会导致安全的隐患。 就算你要获取整个$_GET数据,我们也建议你使用 I('get.')
的方式
3.where方法使用字符串条件的时候,支持预处理(安全过滤),并支持两种方式传入预处理参数,例如:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
4.连接数据库www\erp\App\Common\Conf,不需要单独去mysql_connect
<?php return array( //'配置项'=>'配置值' 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'erp', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => 'root', // 密码 'DB_PORT' => 3306, // 端口 'DB_PREFIX' => 'tp_', // 数据库表前缀 'DB_CHARSET'=> 'utf8', // 字符集 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增* 'DB_TYPE' => 'mysql' );
5.设置__ROOT__过滤
第一个位置(默认位置):
protected function templateContentReplace($content) { // 系统默认的特殊变量替换 $replace = array( '__ROOT__' => __ROOT__, // 当前网站地址 '__APP__' => __APP__, // 当前应用地址 '__MODULE__' => __MODULE__, '__ACTION__' => __ACTION__, // 当前操作地址 '__SELF__' => htmlentities(__SELF__), // 当前页面地址 '__CONTROLLER__'=> __CONTROLLER__, '__URL__' => __CONTROLLER__, '__PUBLIC__' => __ROOT__.'/Public',// 站点公共目录 ); // 允许用户自定义模板的字符串替换 if(is_array(C('TMPL_PARSE_STRING')) ) $replace = array_merge($replace,C('TMPL_PARSE_STRING')); $content = str_replace(array_keys($replace),array_values($replace),$content); return $content; }
第二个位置www\erp\App\Common\Conf
第三个位置www\erp\App\Home\Conf
<?php return array( //'配置项'=>'配置值' 'TMPL_PARSE_STRING' => array( '__Template__' => '1', ), );
6.模板连接
模板不存在:./App/Home/Template/default/Index/index.html
控制Temloate的属性是:DEFAULT_V_LAYER默认是(View) 默认的视图层名称
控制default的属性是:DEFAULT_THEME 默认为空 默认模板主题名称
控制/index/index.html属性是TMPL_FILE_DEPR默认是'/' //模板文件CONTROLLER_NAME与ACTION_NAME之间的分割符
如'TMPL_FILE_DEPR' => '/' 显示/index/index.html, 'TMPL_FILE_DEPR' => '_' 显示是default/index_index.html 或者是user_index.html,user_add.html
7.Model模块www\erp\App\Home\Model
Model文件写法
<?php namespace Home\Model; use Think\Model; class GoodsModel extends Model { // 商品列表 public function goods_list(){ $m = M('goods'); $goods_list = $m->select(); return $goods_list; } } ?>
在控制器页面调用
<?php namespace Home\Controller; use Think\Controller; class GoodsController extends Controller { public function index(){ $m = D('Goods'); $goods_list = $m->goods_list(); $this->assign('goods_list',$goods_list); echo $this->display(); } }
其他用法
<?php namespace Home\Model; use Think\Model; class GoodsModel extends Model { public $test = '2'; // 公共属性 private $f = '2'; // 私有属性 public function __construct(){ $this->m = M('goods'); // 初始化变量 } public function goods_info(){ print_r($this->m->select()); } } ?>
8.把tp标签传入到js变量里面
<script type="text/javascript"> // 调用模板下的变量 var TEMPLATE ="__Template__"; var PUBLIC = '__PUBLIC__'; var url = "{:U('goods/index')}"; alert(url); </script>
9.把tp标签传入到js的function Ajax里面
<script type="text/javascript"> // 调用模板下的变量 var TEMPLATE ="__Template__"; var PUBLIC = '__PUBLIC__'; var url = "{:U('goods/index')}"; //alert(url); $(document).ready(function(){ Ajax(); }); </script>
function Ajax(){ alert(url); }
10,if语句
<if condition= "$goods_list ">记录列表<else />暂无记录</if>
11.传递参数
html页面
<a href="{:U('goods/info',array('goods_id'=>$vo['goods_id']))}">
php
$url = U('Goods/index');
12.定义define在php文件引用
index.php:define('__UPLOAD__','./Upload/');
php输出:echo __UPLOAD__;
13 多条件查询
$where['_string'] = ' (goods_name like "%'.$files['keywords'].'%") OR ( goods_barcode like "%'.$files['keywords'].'") ';
另一种
$where['add_time'] = array(array('lt',$endtime),array('egt',$starttime));
打印出结果
SELECT * FROM `tp_stock_note` WHERE `depot_id` = 1 AND ( `add_time` < 1466410170 AND `add_time` >= 1466352000 ) ORDER BY id desc LIMIT 0,15
不同字段相同查询
$where['goods_name|barcode|goods_sn'] = array('like','%'.$keywords.'%');
不同字段不同查询
$map['status&title'] =array('1','thinkphp','_multi'=>true); //'_multi'=>true
必须加在数组的最后,表示当前是多条件匹配
等同于
$map['status'] = 1; $map['title'] = 'thinkphp';
查询字段支持更多的,例如:
$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);
14,thinkphp3.2 分页的LIST_ROW 不显示问题(增加红色代码),Page.class.php第139行
array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'), array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages),
改为
array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%','%LIST_ROW%'), array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages,$this->listRows),
15,
$g = A('goods') 与$g= new GoodsController(); 效果同等
$goods_list = $g->goods_list();
16.语言包
html页面输出:{:L('serKeywords')}
php:$val = L('serKeywords')
16.输出sql语句
$where['offer_id'] = $id; $arr = $m->field('goods_name,goods_sn,barcode,goods_type,price')->select(); $f = $m->getlastsql(); print_r($f)
17.加载类方式
手动加载:
// 导入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');
如:
Auth.class.php
namespace Org\Util //注意上面不需要这个
class Auth { public function ss(){ echo '22'; } }
import("Org.Util.Auth"); $tt = new \Auth(); //创建PHPExcel对象,注意,不能少了\ echo $tt->ss();
自动加载:
new \Org\Util\Auth();
17.ThinkPHP\Library\Org\Util 命名
在util新建Auth.class.php文件
class Auth { public function ss(){ echo '22'; } }
在控制器页面引用
import("Org.Util.Auth"); $tt = new \Auth(); //创建PHPExcel对象,注意,不能少了\ echo $tt->ss();
18输出模板路径
echo T('Index/index');
19直接输出T模板
$this->display(T('Index/index')
$this->display(T('Admin@Public/menu'));
T('Admin@Public/menu');
// 返回 Admin/View/Public/menu.html