标题: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>

 

既可以循环显示数组中的nameage

volist还可以结合参数控制开始的序号和显示的数目

如修改为

<volist name='users' id="data" offset=”0” length=”3” key=”k”>

{$k}-{$data.name}-{$data.age}--{$data.sex}</br>

</volist>

主要offsetlength都必须写 并且要带引号

 

 

目的:将方法中获得变量显示在前台,主要是以后学到的数据库中获得的多个数据显示的方法

了解程度:经常修改,重点

 

 

模板传值-判断后显示控制器中变量

 

上面学会了经过控制器给模板传值,显示了单个变量以及多个变量

那么如果输出多个变量中,我需要选择性显示

例如对sexmale 变量需要显示是男,sexfemale的显示是女

 

在控制器中的变量如

      $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 等字段

 

具体方法是在adminconf文件夹中修改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();

 

}

模板文件渲染套用

 

方法是实现数据的处理,而模板则实现处理后的数据如何展示出来,

我们可以把方法和模板结合起来,主要通过函数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>

 

既可以循环显示数组中的nameage

volist还可以结合参数控制开始的序号和显示的数目

如修改为

<volist name='users' id="data" offset=”0” length=”3” key=”k”>

{$k}-{$data.name}-{$data.age}--{$data.sex}</br>

</volist>

主要offsetlength都必须写 并且要带引号

 

 

目的:将方法中获得变量显示在前台,主要是以后学到的数据库中获得的多个数据显示的方法

了解程度:经常修改,重点

 

 

模板传值-判断后显示控制器中变量

 

上面学会了经过控制器给模板传值,显示了单个变量以及多个变量

那么如果输出多个变量中,我需要选择性显示

例如对sexmale 变量需要显示是男,sexfemale的显示是女

 

在控制器中的变量如

      $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 等字段

 

具体方法是在adminconf文件夹中修改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();

 

}