1,d盘www文件下引入ThinkPHP文件,项目中引入index.php引入thinkphp,include("../ThinkPHP/ThinkPHP.php");
几种路由:
1, http://网址/index.php?m=分组&c=控制器&a=操作方法
该方式是最底层的get形式、传统的参数传递方式、不安全。
get参数传递: m(moduel) c(controller)a(action)
http://localhost/shop/index.php?m=Home&c=Index&a=index
2,pathinfo路径形式[默认方式]
http://网址/index.php/分组/控制器/操作方法
http://localhost/shop/index.php/Home/Index/index
3, rewrite重写形式(伪静态技术)省略index.php入口文件
http://网址/Home/Index/index
.view视图模板
1. 简单模板view调用
在控制器的方法中调用如下方法:/diaplay()是父类controller的一个方法
$this -> display(); //模板名称与当前操作方法的名称一致
$this -> display(模板名称); //调用当前控制器对应目录指定名称的模板
$this -> display(控制器/模板名称); //调用其他控制器下的具体模板文件
在模板中引入静态资源文件
相对路径:相对index.php入口程序文件设置
http://localhost/shop/index.php?m=Home&c=Index&a=index
利用get访问可以访问,但是用pathinfo访问失败
绝对路径:从虚拟主机根目录(d:/www/)设置
在模板中需要通过绝对路径方式引入静态资源文件(css/img/js),绝对路径信息的编写、升级、维护不方便,就给其设置常量进行使用。
在index.php设置全局路径
//给系统静态资源文件请求路径设置常量
define('CSS_URL', '/shop/Home/Public/css/');
define('IMG_URL', '/shop/Home/Public/images/');
define('JS_URL', '/shop/Home/Public/js/');
在D:wwwshopHomeViewIndex 中修改index.html中文件资源的引用地址
<link href="<?php echo CSS_URL;?>style.css" rel="stylesheet" type="text/css" />
img和js资源与css同理进行修改
同理修改 Goods商品模块的showlist.html detail.html User模块中的login模块和register.html
创建加载Admin后台文件目录 和资源文件
2. 后台“品字”首页面搭建
控制器:IndexController.class.php
操作方法:function head() left() right() index()
View视图模板:Admin/View/Index/head.html left.html right.html index.html
2.3 搭建商品相关页面
控制器:GoodsController
操作方法:showlist()、tianjia()、upd()
view视图模板: showlist.html tianjia.html upd.html
列表展示、添加、修改
frame的src属性值需要通过“绝对路径”设置
需要设置一个具体的路由地址
获得当前请求的全部常量信息:
tp框架提供了常量:
http://网址/shop/index.php/分组/控制器/操作方法/名称1/值/名称2/值
__MODULE__: 路由地址分组信息 (/shop/index.php/分组)
__CONTROLLER__: 路由地址控制器信息 (/shop/index.php/分组/控制器)
__ACTION__:路由地址操作方法信息 (/shop/index.php/分组/控制器/操作方法
)
__SELF__: 路由地址的全部信息(/shop/index.php/分组/控制器/操作方法/名称1/值/名称2/值)
MODULE_NAME: 分组名称
CONTROLLER_NAME:控制器名称
ACTION_NAME: 操作方法名称
例如:
1,http://网址/index.php/Admin/Order/showlist
__CONTROLLER__:/index.php/Admin/Order
__MODULE__ :/index.php/Admin
__ACTION__ :/index.php/Admin/Order/showlist
2,http://网址/index.php/Admin/Goods/detail
__CONTROLLER__:/index.php/Admin/Goods
__MODULE__ :/index.php/Admin (模块)
__ACTION__ :/index.php/Admin/Goods/detail
以上表示,不同路由地址对应的常量要发生变化。
_blank : 新标签打开连接地址
_self : 本标签打开连接地址
_top : 全部frame标签的上边打开连接地址
frame 的 name属性,在指定的frame标签里边打开连接地址
当前访问路由:/shop/index.php/Admin/Index/left
<a class=menuchild
href="__MODULE__/Goods/showlist"
target="right">产品展示</a>
<!-- target=_blank/_self/_top/frame的name属性值
_blank:新标签打开连接地址
_self:本标签打开连接地址
_top:全部frame标签的上边打开连接地址
frame的name属性值:在指定的frame标签里边打开连接地址
-->
配置文件介绍
① ThinkPHP/Conf/convention.php 系统主要配置文件,集中90%以上的配置变量
② shop/Common/Conf/config.php 当前shop项目的配置文件
针对各个分组起作用
③ shop/Home/Conf/config.php 当前shop项目Home分组的配置文件
以上三个配置文件,如果存在同名的配置变量,后者会覆盖前者。
② 和 ③配置文件的具体配置变量都是从① 来的
页面底部设置跟踪信息
需要在配置文件里边定义配置变量(SHOW_PAGE_TRACE)
在 config.php文件中 'SHOW_PAGE_TRACE' => true, 开启跟踪信息调试, false则关闭;
默认分组设置 :
5. 开启Smarty模板引擎
二 、 数据库模型操作
第一次使用GoodsModel,在实例化的时候报错,
$goods = new GoodsModel();报错
$goods = new ModelGoodsModel();不报错
设置操作的数据库数据库复制操作语言:
1,备份一个数据库:
mysqldump -u root -p111111 shop > d:/20151012shop.sql
(意思是打印 shop 这个数据库到新建创的文件 20151012shop.sql 中)
2,创建一个 dbshop数据库,把备份的数据还原到dbshop
create database dbshop;
3,在新的dos命令窗口,把刚才备份好的数据库还原到 dbshop 数据库:
mysql -u root -p111111 dbshop < d:/20151012shop.sql
实例化基类Model对象
可以实现对数据库的基本操作
$model = D(); //实例化基类Model,没有关联任何表
可以执行原生sql语句
$model = D(‘Goods’); //实例化基类Model对象,并操作xx_goods业务数据表
(该方式允许我们即使不创建具体的model模型类文件,也可以直接操作某个数据表)
如果一个数据表没有特殊方法要求,就可以通过D(XXX)的方式进行操作。
如果数据表有特殊方法要求(例如用户名和密码判断需要一个特殊方法),就需要在普通model模型类里边定义好,通过new ModelXXXModel()形式实例化对象,进而操作特殊方法。
三. 数据基本操作
1. 数据查询操作
调用方法:model对象->select()
具体使用:
$model -> select(); //查询并返回数据表的全部记录信息
$model -> select(主键id值); //查询主键信息等于条件id值的一条记录
$model -> select(‘id1,id2,id3...’); //查询主键信息在条件范围内的记录
//where id in (10,12,35)
(使用select()方法会始终返回一个二维数组信息)
模板中通过foreach遍历数据、展示数据:
具体数据操作方法使用
① where()条件
$model -> where(条件值); //条件值就是sql语句where后边的条件信息
② limit()限制条数
$model -> limit(数字); //严格查询数字条数的记录
③ field ()限制查询字段
$model -> field(字段1,字段2,字段3);
④ order() 排序
$model -> order(‘排序条件字段asc/desc’);
⑤ group() 分组查询group by
$model -> group(分组条件);
group by 分组查询的具体应用
⑥ having()条件设置方法
having设置查询条件的效果 与 where使用效果类似
区别:
where:语句条件字段,必须是“数据表中存在的”字段
having:语句条件字段 必须是查询结果集中存在的字段
- 数据库设置、连接配置、model模型类文件创建
- 实例化model对象
两种方式:new ModelXXXModel();
D(); 实例化父类model
D(表唯一标识名字参数);
- 查询数据
select()
select(数字)
select(“数字,数字,数字”)
返回二维数组
- 辅助方法
where() limit() field()
order() group() having()
数据添加操作
调用方法:model对象->add()
具体两种方式使用:
① 数组方式
$数组 = array(
元素(键名=>值),
元素(键名=>值),
。。。。
)
$model(普通对象) -> add($数组);
注意:数组的元素键名与数据表字段的名称必须一致
(不正确的键名会被自动过滤掉,完全过滤字段,则记录的添加操作失败)。
② AR(Active Record活跃记录)方式
$model -> 属性 = 值;
$model -> 属性 = 值;
。。。。
$model ->add();
注意:属性值 与 数据表字段一致,否则不给写入数据
AR规范要求:
A.一个model模型类与一个具体的数据表对应
B.model模型类实例化的对象 与 数据表的一条记录对应
C.model对象的属性 与 记录的字段对应
TP框架的AR是仿真产品,因为在每个业务/普通Model模型类里边并不存在对应数据表的字段信息。
add()方法返回新记录的主键id值
添加数据的两种方式:
数据修改操作
调用方法:model对象->save()
与add添加一致具体两种方式使用:
① 数组方式
$model -> save(数组);
② AR方式
$model -> 属性(字段) = 值;
$model -> 属性(字段) = 值;
$model ->save();
注意:数组的元素下标(属性字段)必须与数据表字段保持一致
save()方法返回受影响的记录条数
mysql本身的语法规则允许一次性修改一个表的全部记录结果
在实际的项目里边,一般禁止修改数据表的全部数据
注意:数据修改必须设置条件: 主键id 或 where()方法,二选一即可,否则执行失败。
在tp框架中不允许一次性修改数据表的全部记录信息:
4.在后台实现商品添加逻辑
把常量的访问设置为smarty方式:
1) 制作添加表单
跳转方法:redirect(地址分组/控制器/操作方法, 参数,间隔时间,提示信息);
$this ->redirect('showlist',array(),2,'添加商品成功');
5.1 数据修改的实现步骤
给“修改”按钮制作修改页面的连接地址:
在修改按钮上边通过get方式传递被修改商品的主键id信息
在控制器 upd()方法中
根据$goods_id 获得被修改商品的信息
$info = D('Goods') -> select($goods_id);
//select() 以二维数组返回一条记录信息
$info = D('Goods') -> find($goods_id);
//find() 通过一维数组返回一条记录信息
// 设置隐藏域input,把要修改的商品信息id传递过来,