美文网首页
视图和模板

视图和模板

作者: Maiiiiiiiiiiiid | 来源:发表于2019-04-28 12:50 被阅读0次

    视图和模板

    [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']);
    }
    

    相关文章

      网友评论

          本文标题:视图和模板

          本文链接:https://www.haomeiwen.com/subject/pejdnqtx.html