视图和模板

视图和模板

[TOC]


控制器(在php文件)使用模板:

VIew模板输出:

$this->assign('name','value');   //定义view里的变量$name的值
return $this->fetch('index/index');//参数为空时默认当前控制器对应的view

相应的html文件下使用name变量:{$name}

<span style='color:#fb7299'>eg1:展示用户数据</span>

输出用户列表

控制器中:<a name='con'></a>

$list = User::all();  //返回User对象数组
$this->assign('list',$list);
$this->assign('count',count($list));
return $this->fetch('index/index');//参数为空时默认当前控制器对应的view

模板视图:

<h1>用户列表  {$count}</h1>
{volist name="list" id="user"}
<!--name="list"将$list数组传了过来,$user是每次遍历的数组的元素-->
    <div class="container" style="border: 1px black dashed">
        <ul>
            <li>id:{$user.id}</li>
            <li>名字:{$user.name}</li>
            <li>生日:{$user.birthday}</li>
            <li>邮箱:{$user.email}</li>
        </ul>
    </div>
{/volist}

渲染模板是会在runtime的temp生成临时文件

对应生成的临时文件片段:

<?php if(is_array($list) || $list instanceof \think\Collection || $list instanceof \think\Paginator): $i = 0; $__LIST__ = $list;if( count($__LIST__)==0 ) : echo "" ;else: foreach($__LIST__ as $key=>$user): $mod = ($i % 2 );++$i;?>
<!--name="list"将$list数组传了过来,$user是每次遍历的数组的元素-->
    <div class="container" style="border: 1px black dashed">
        <ul>
            <li>id:<?php echo $user['id']; ?></li>
            <li>名字:<?php echo $user['name']; ?></li>
            <li>生日:<?php echo $user['birthday']; ?></li>
            <li>邮箱:<?php echo $user['email']; ?></li>
        </ul>
    </div>
<?php endforeach; endif; else: echo "" ;endif; ?>

<span style='color:#fb7299'>eg2:分页展示用户数据</span>

在以上的 控制器代码中,将第一行改为:

$list = User::paginate(2);     //每页展示两条数据

view在{/volist}末尾加:

{$list->render()}

会在下面生成页面跳转底部导航

​ 另一种方式:$page = ​$list->render();

临时文件:

<?php echo $list->render(); ?>

url会在后面自动加上?page=1 ?page=2...
最后生成的html元素:

<ul class="pagination">
    <li class="disabled"><span>«</span></li> 
    <li class="active"><span>1</span></li>
    <li><a href="/tp5_02/public/index?page=2">2</a></li> 
    <li><a href="/tp5_02/public/index?page=2">»</a></li>
</ul>

配置文件中对于分页的配置在代码最下面:

//分页配置
'paginate'               => [
    'type'      => 'bootstrap',
    'var_page'  => 'page',
    'list_rows' => 15,

其实的type是指分页的样式文件在这个文件夹下

"D:\code\phpSstudy\WWW\tp5_02\thinkphp\library\think\paginator\driver\Bootstrap.php"

官方关于分页的文档:https://www.kancloud.cn/manual/thinkphp5/154294

一个分页样式:http://www.thinkphp.cn/code/3000.html

<div style='border: 1px black dashed;'>
1.假设这里有3数据,当前展示第一页时,paginate获取的是前两条数据,因此count为2,页面就显示:用户列表 2
当前展示第二页时页面就显示:用户列表 1



2.list = User::paginate(5);list返回的是配置中type对应的thinkphp\library\think\paginator\driver\Bootstrap.php的类
</div>

公共模板:

1.

加载头部模板和尾部模板

{include file="index/header"/}
//html+php代码
{include file="index/footer"/}

生成的临时文件就是将文件代码拼切起来在第一行写上:

<?php if (!defined('THINK_PATH')) exit(); /*a:3:{s:78:"D:\code\phpSstudy\WWW\tp5_02\public/../application/index\view\index\index.html";i:1555132297;s:69:"D:\code\phpSstudy\WWW\tp5_02\application\index\view\Index\header.html";i:1555132224;s:69:"D:\code\phpSstudy\WWW\tp5_02\application\index\view\Index\footer.html";i:1555132265;}*/ ?>

模板路径配置:将默认的路径'../application/index/view/'改为'../template/home/'

// 模板路径
//'view_path'    => '',
'view_path'    => '../template/home/',

PS:其下(这里的是home)的文件夹首字母一般大写

模板传参:

​ 模板变量声明[title]

​ 引用:

{include file="index/header" title="maid"/}

2.使用布局

(1).直接使用布局

在view下直接加一个html文件:

{include file="index/header"/}
{__CONTENT__}
{include file="index/footer"/}

使用布局:

{layout name="layout"}   //name是html文件名
(2).全局配置,默认加载布局文件
//没有选项就添加
'layout_on'     =>  true,
'layout_name'   =>  'layout',
'layout_item'   => '{__CONTENT__}',

这种情况下某个页面排除默认布局:

{__NOLAYOUT__}

标签定制

// 标签库标签开始标记
'taglib_begin' => '{',
// 标签库标签结束标记
'taglib_end'   => '}',

如果换成“<”和">",那么模板引擎需要这么写:

<volist name="list" id="user">
<!--todo-->
</volist>

一般不建议修改

输出替换

在控制器中模板解析之前:

$this->view->replace(['__PUBLIC__' => '/static'])//解析时将模板中的'__PUBLIC__'替换成'/static'
return $this->fetch();

加到控制器中可以自动在本控制器的每个方法使用:

public function __construct()
{
    parent::__construct();
    $this->view->replace(['用户列表' => 'maid']);
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • Thinkphp5.0 视图和版本的学习记录总结,详细内容参看官方提供的完全开发手册(虽然文档写的很烂,看一遍还不...
    Light413阅读 7,372评论 0 5
  • 视图是Django应用程序中Web页面的“类型”,它通常提供特定的功能,并且有一个特定的模板。例如,在博客应用程序...
    Mlotjve阅读 669评论 0 0
  • 首先,先简单理解下django的MTV模式。 M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)...
    JOooo_阅读 539评论 0 1
  • 一、session数据存储在客户端 1、session数据存储在客户端的概念Flask采用'secure cook...
    xdxh阅读 407评论 0 0
  • (1)Http Get和Post方法 GET:无副作用,幂等,不可带 Request BodyPUT:副作用,幂等...
    shuixingge阅读 166评论 0 1