标题:Thinkphp 3.2.3 零基础入门教程-模板和数据库篇
-------------------------------------------------------------------------------------------------------------------------------
时间:2018/2/16 18:53:46
-------------------------------------------------------------------------------------------------------------------------------
内容:
模板文件渲染套用
方法是实现数据的处理,而模板则实现处理后的数据如何展示出来,
我们可以把方法和模板结合起来,主要通过函数display
我们在admin模块下的login控制器类的loginhistory方法中再增加一行
$this->display();
该方法是默认调用/tp/app/admin/view/login/loginhistory.html这个模板(login对应控制器,loginhistory对应方法)
然后我们去创建这个html模板,然后写上一句话,this
is from /tp/app/admin/model/login/loginhistory.html
然后访问网址tp/admin/login/loginhistory
即可
this is from /tp/app/admin/view/login/loginhistory.html
多个方法使用同一个模板
如我们想在loginhisotry这个方法中使用
文件/tp/app/admin/model/login/login.html这个模板
可以加上$this->display(“login”);
或者模板在与控制名称不同文件夹下的
/tp/app/admin/model/index/index.html
$this->display("./index/index");
目的:在方法中调用模板渲染展示
了解程度:经常修改,重点
模板传值-显示单个控制器中变量
在控制器的方法中学会使用display套用模板以后,我们需要把方法中的变量传递给模板显示在前台该怎么操作呢
在loginControll.class.php文件中
例如在display函数上方有一个变量name,
$name=”cotine”;
….
$this->display();
我们可以使用一个控制器类的模板赋值函数$this->assign
$this->assign(“name”,$name);
既
$name=”cotine”;
….
$this->assign(“name”,$name);
….
$this->display();
注意变量先赋值,再使用控制器类中的方法$this->display
在模板loginhistory.html中增加
<?php echo $name;?>// php原生方法调用数据 不推荐
<br>
{$name}//模板方法调用数据 推荐
前者是使用 php的方式显示变量
后面那个是使用模板标签方式显示变量,可以看出来后者更方便
以上是字符串变量 如果是数组呢
在控制器方法中是
$user[‘name’]=”stephen”;
$user[‘age]=23;
$teachers=array(“peter”,”sunny”,”patrick”,”stephen”);
$this->assign(“user”,$user);
$this->assign(“teachers”,$teachers);
$this->display();
在模板文件中
<br>
{$user.name}
{$user['age']}
<br>
{$teachers.1
}
{$teachers[0]
}
即可访问
目的:将方法中获得变量显示在前台,主要使用$this->assign
了解程度:经常修改,重点
模板传值-循环显示控制器中数组变量
如果在控制器方法中使用是二维素组
$users=array(
array("name"=>"stephen","sex"=>"male","age"=>"23",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
);
$this->assign("users",$users);
$this->display();
在模板文件index.php使用需要使用模板标签 <volist>来循环
显示数组中每个元素 其中 i是默认的volist计数器
<volist name='users'
id="data">
{$i}-{$data.name}-{$data.age}--{$data.sex}</br>
</volist>
既可以循环显示数组中的name和age了
volist还可以结合参数控制开始的序号和显示的数目
如修改为
<volist name='users'
id="data" offset=”0” length=”3” key=”k”>
{$k}-{$data.name}-{$data.age}--{$data.sex}</br>
</volist>
主要offset和length都必须写 并且要带引号
目的:将方法中获得变量显示在前台,主要是以后学到的数据库中获得的多个数据显示的方法
了解程度:经常修改,重点
模板传值-判断后显示控制器中变量
上面学会了经过控制器给模板传值,显示了单个变量以及多个变量
那么如果输出多个变量中,我需要选择性显示
例如对sex是male的 变量需要显示是男,sex是female的显示是女
在控制器中的变量如
$users=array(
array("name"=>"stephen","sex"=>"male","age"=>"23",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
array("name"=>"elaine","sex"=>"female","age"=>"21",),
);
$this->assign("users",$users);
$this->display();
在模板中
<volist name='users' id="data">
{$i}-{$data.name}-{$data.age}—
<eq name="data.sex"
value="female">女<else/>男</eq></br>
</volist>
其中根据data.sex 感觉值的不同 显示不同的结果
目的:根据不同的变量 显示不同的值
了解程度:偶尔修改,一般掌握
数据库的配置和调用
上面学会了从控制器中取变量给模板传值,但是实际情况里 更多是通过控制器的方法从数据库中取数据然后传递给模板,在使用控制器的方法前 需要先配置数据库
例如本地我有一家设置了一个msyql数据库,数据库名称是test,用户名是root密码是111111 表的名称是blog_user,里面存有字段 id,name,password,sex 等字段
具体方法是在admin的conf文件夹中修改config.php 增加数据库配置信息
前缀是blog_
'DB_TYPE' => 'mysql',
// 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'test', // 数据库名
'DB_USER' => 'root',
// 用户名
'DB_PWD' => '111111', // 密码
'DB_PORT' => '3306',
// 端口
'DB_PREFIX' => 'blog_',
// 数据库表前缀
之后就可以在控制器中调用数据库的数据
再/admin/controller/ 的index
控制器中写
//get data from database
$user=M("user");
$data=$user->select();
dump($data);
既通过M方法创建 blog_user 这个表的对象(注意因为设置表的前缀,所以这里用的user,如果没有设置表的前缀 使用BlogUser
表示blog_user 这个个表)
然后使用select这个方法后 将获得的数据赋值给data
通过dump既可以看到blog_user里面的各个数据集的值
创建方法查询数据库-模板显示
既通过M对象的select方法我们可以筛选全部的数据
但是实际情况下 我们要有选择性的筛选 比如
sex=female,
age<20 maxium 20 results, order by age desc
主要sex=female xu要爽引号
where里面写单引号
function
user_show(){
$user=M("user");
$data=$user->where(“sex=’female’
and age>20”)-order(“age desc”)->limit(20)->select();
dump($data);
$this->assign(“data”,$data);
display();
}
然后在模板中使用volist即可显示
<volist
name='data' id="data">
{$i}-{$data.name}-{$data.age}—
<eq
name="data.sex" value="female">女<else/>男</eq></br>
</volist>
前面使用里筛选条件可以控制结果,但是有时候需要多结果进行分页
所以在上面的基础上 我们引入一个分页类,利用这个类里面的各种方法控制结果
$User
= M('User'); // 实例化User对象
$count = $User-> count();// 查询满足要求的总记录数
$Page
= new \Think\Page($count,10);// 实例化分页类 传入总记录数和每页显示的记录数$show =
$Page->show();// 分页显示输出
$list=$User->where(sex=female)->
limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);//
赋值数据集
$this->assign('page',$show);//
赋值分页输出
$this->display();
// 输出模板
注意 3.2.3 版本有个bug 不显示最后结果数
'theme'=>'
%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE%
%DOWN_PAGE% %END%',
在模板中增加一个变量即可{$page}
创建方法增加数据库-模板操作
既通过M对象的add方法操作 创建一个数组$user1
function
user_add(){
$user=M("user");
$user1["name"]="good11";
$user1["age"]=21;
$user1["password"]=123456;
dump($user1);
$user->add($user1);
}
如果我们要结合模板和方法
在模板中我们使用表单并且文本框名字用表中字段名称
<form
action=”user_add1” method=”POST”>
<input
name=”name”>
<input
name=”age”>
<input
type=”password”>
</form>
则用户添好表单后会将变量传递给方法user_add1
控制器方法修改为
function
user_add1(){
$user=M("user");
$user1["name"]= $_POST["NAME"];
$user1["age"]=$_POST["AGE"];
$user1["password"]=$_POST["PASSWORD"];
$user->add($user1);
}
创建方法更改数据库-模板操作
既通过M 的方法save 来才做 为了防止误操作 必须使用where命令
function
user_update(){
$user=M("user");
$user1["name"]="good41";
$user1["age"]=21;
$user1["password"]=123456;
dump($user1);
$user->where(“id=44”)->save($user1);
}
如果我们要结合模板和方法
在模板中我们使用表单并且文本框名字用表中字段名称
<form
action=”user_update1” method=”POST”>
<input
name=”name” value=”{$name}”>
<input
name=”age” value=”{$age}”>
<input
type=”password” value=”{$password}”>
<input
type=”hidden” name=”id” value=”$id”>
</form>
function
user_update1(){
$user=M("user");
$user1["name"]="good41";
$user1["age"]=21;
$user1["password"]=123456;
dump($user1);
$user->where(“id=44”)->save($user1);
}
创建方法删除数据库-模板操作
既通过M 的方法delete 来才做 为了防止误操作 必须使用where命令
function
user_del(){
$user=M("user");
$user->where(“id=3”)->delete();
}