Blogger Information
Blog 42
fans 2
comment 0
visits 53964
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
模版的渲染 布局 继承 常用标签(模版直接输出 模版赋值 模版的过滤与替换 模版布局 模版继承 常用的循环标签 范围取值标签)2019年3月22日
小明的博客
Original
958 people have browsed it

一、模版输出

  • 引入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>

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments