博主信息
博文 42
粉丝 2
评论 0
访问量 64656
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
模版的渲染 布局 继承 常用标签(模版直接输出 模版赋值 模版的过滤与替换 模版布局 模版继承 常用的循环标签 范围取值标签)2019年3月22日
小明的博客
原创
1194人浏览过

一、模版输出

  • 引入View类 使用视图方法display() 不通过模版  直接渲染内容  可以添加html标签
    return View::display($name);

       return View::display('我的姓名是:<span style="color: red">'.$name.'</span>');

  • fetch(模版表达式)
    //       模版表达式:模块@控制器/操作方法
    //       模版默认目录是  模块/view/控制器名/模版文件名(一般与操作方法同名)
    //       模型文件的后缀一般为html,可以在config/template.php中修改
    //       fetch('模版表达式', [模版变量数组], [模版配置参数数组])
    //       模版参数我们一般不再控制器里动态设定 而是在配置文件里设置
    //       这里的模版表达式可以省略模块和控制器
    //       return View::fetch('index@index/demo1', ['name'=>$name]);

  • 其实在controller类中有一个属性view,保存着视图类的实例化对象
    //       所以要让index类继承controller类 然后实例化他就可以模版输出
    //       return $this->view->fetch('demo1', ['name'=>$name]);
    //       通常可以省略view这个属性
    //       return $this->fetch('demo1', ['name'=>$name]);
    //       框架也内置了助手函数 view()  在任何情况下都可用使用他  不用引入任何类
          return view('demo1', ['name'=>$name]);

    二、模版赋值

  • 1.assign()使用他必须用view类,以后我们统一用cotroller类实例化调用
    //        View::assign('name', $name);
    //        return View::fetch();

  • //        2.传参数fetch() view()刚才演示过了

  • //        3.对象方式  通过controller类中的两个魔术方法实现数据注入
           $this->view->name = $name;
    //        同样的view可以省略
    //        $this->view->assign('name', $name);
    //        如果按照默认规则创建的模版文件  那么就可以省略模版文件名
           return $this->fetch();

三、模版过滤与替换

//    tp51同之前的版本直接删除了模版字符串替换功能,改为模版配置参数来实现
//    congfig/tmplate.php中更改

//字符过滤
//    'tpl_replace_str' => ['ji ming'=>'冀晓明']

$this->view->assign('name', 'ji ming');
$filter = function ($content) {
   return str_replace('ji ming', '冀晓明', $content);
};

return $this->filter($filter)->fetch();

四、模版布局

//1、全局布局
//先在template.php中开启

/*//开启全局布局
'layout_on' => true,
//全局模版名
'layout_name' => 'layout',
//主体占位符
'layout_item' => '{__CONTENT__}'*/

//然后在view下建立public/header和footer  写出html样式  然后在view下新建lauout.html

{//网站头部}
{include file="public/header" /}
{//网站主体}
{__CONTENT__}
{//网站尾部}
{include file="public/footer" /}

//其中{__CONTENT__}是占位符  demo4里面的html内容重写网站主题内容

//2、模版标签
//不需要在配置中开启全局布局 也不需要配置任何
//需要在布局模版的模版文件中添加标签{layout name="layout" /}

//3、在控制器动态配置
       //不需要配置  不需要添加任何标签
       //布局模版还是要实现准备好的
       //直接调用:$this->view->engine->layout(true);
       //需要所有都是默认的   'layout_item'=>'{__CONTENT__}'  'layout_name'=>'layout'
//        $this->view->engine->layout(true);
//        return $this->view->fetch();
//        可以简化成一行 但是没有参数是错误的
//        return $this->view->engine->layout(true)->fetch();
//        参数应该是完整的模版表达式
//        return $this->view->engine->layout(true)->fetch('index@index/demo4');
//        表达式可以简写  但是不可以省略控制器
//        return $this->view->engine->layout(true)->fetch('index/demo4');
//        关闭模版布局
//        return $this->view->engine->layout(false)->fetch('index/demo4');
       //自定义模版  layout可以是任意的布局模版  被替换的内容标识符也可以替换

       return $this->view->engine->layout('layout')->fetch('index@index/demo4');

五、模版继承

//在view层下新建base.html作为父模版
//在父模版里只有{block name=""}{/block}里面的才能显示
//子模版中直接用{extend name="" /}
return $this->view->fetch();

六、常用标签及分页功能

{// 模版中两种注释的区别}
{// 这种在源码中看不到}
<!--这种在源码中可以看到哦-->
{//其实模板可以绕过控制器,直接获取数据}
{//assign标签可以在模板中直接定义变量}
{//assign name="staffs" value=":\app\index\model\Staff::where('salary', '<', 3000)->select()" /}
{//name值的获取过程可以用助手函数model进行简化,这也是推荐的方式}
{assign name="staffs" value=":model('staff')::where('salary', '<', 1)->select()" /}
{//assign name="staffs" value=":model('staff')::all()" /}
{// 一、 foreach标签 类似于原生的foreach语句}
<!--{//foreach $staffs as $staff}
<tr>
   <td>{//$staff.id}</td>
   <td>{//$staff.name}</td>
   <td>{//$staff.sex}</td>
   <td>{//$staff.age}</td>
   <td>{//$staff.salary}</td>
</tr>
{// /foreach}-->
{//二、volist循环标签  使用最广泛 参数最多  功能强大}
{//基本用法 name="变量名,与控制器相符不可更改" id="循环变量 可自定义"}
{//volist name="staffs" id="staff"}
{//扩展用法  获取指定范围内的数据信息 offset="起始索引" length="数据数量"}
{//volist name="staffs" id="staff" offset="0" length="2"}
{//扩展用法  获取数据的奇偶行 mod="2" 数据索引除以2得到的商在判断}
{//eq 上面除以2得到商为1是偶数  例如3为第四个数据 余数是1}
{//volist name="staffs" id="staff" length="10" mod="2"}
{//eq name="mod" value="1"}
<!--<tr>
   <td>{//$staff.id}</td>
   <td>{//$staff.name}</td>
   <td>{//$staff.sex}</td>
   <td>{//$staff.age}</td>
   <td>{//$staff.salary}</td>
</tr>-->
{///eq}
{///volist}
{//三、 扩展用法  数据集合为空}
{//volist name="staffs" id="staff" empty="没有数据"}
{//这种的很少用 一般都用的是empty标签}
{empty name="staffs"}
<h3 style="color: #c7254e">没有任何数据</h3>
{else /}
{volist name="staffs" id="staff"}
<tr>
   <td>{$staff.id}</td>
   <td>{$staff.name}</td>
   <td>{$staff.sex}</td>
   <td>{$staff.age}</td>
   <td>{$staff.salary}</td>
</tr>
{/volist}
{/empty}
{///volist}

  • 范围取值及分页

  • {foreach name="staffs" id="staff"}
       <tr>
           <td>{$staff.id}</td>
           <td>{$staff.name}</td>
           <td>
               {// in 里面的值是离散的 意思就是一个个的}
               {in name="staff.sex" value="0,1"}
                   {if $staff.sex == 1}
                       男
                   {else /}
                       女
                   {/if}
               {/in}

           </td>
           <td>
               {//$staff.age}
               {// between 里面的值是连续的}
               {between name="staff.age" value="20, 30"}
                   很年轻
               {/between}

               {between name="staff.age" value="31, 55"}
                   正值壮年
               {/between}
               {between name="staff.age" value="56,70"}
                   最美夕阳红
               {/between}
               {between name="staff.age" value="70,100"}
                   不服老不行
               {/between}
           </td>
           <td>{$staff.salary}</td>
       </tr>
       {/foreach}
    </table>
    <div class="text-center">{$page|raw}</div>

批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学