当前位置: 首页 > article >正文

ThinkPHP 5.1 的模板布局功能

ThinkPHP 5.1 的模板布局功能,包括全局配置、模板标签以及动态方法布局三种方式。以下是对这三种方式的要点概括和补充,以便于更好地理解和使用:


方式一:全局配置方式

适用于全站使用相同布局的情况,配置简单且统一。

配置步骤:

  1. 修改配置文件
    在项目的配置文件(config/view.php)中添加:

    return [
        'layout_on'    => true,         // 开启布局
        'layout_name'  => 'layout',    // 布局模板文件名称
        'layout_item'  => '{__CONTENT__}', // 替换内容占位符(可选)
    ];
    

    默认会使用 application/index/view/layout.html 作为布局模板。

  2. 布局模板文件
    创建 layout.html 文件,包含公共结构和 {__CONTENT__} 占位符。例如:

    {include file="public/header" /}
    <main>{__CONTENT__}</main>
    {include file="public/footer" /}
    
  3. 控制器渲染
    控制器中无需额外设置,直接返回子模板文件即可:

    return $this->fetch('add'); // 自动嵌套到 layout.html 中
    
  4. 可选功能

    • 局部关闭布局: 在子模板中添加 {__NOLAYOUT__}
    • 使用自定义替换占位符: 修改 layout_item 配置。
    • 指定其他布局路径:
      return [
          'layout_on'   => true,
          'layout_name' => 'layout/newlayout',
      ];
      


方式二:模板标签方式

适用于在模板中灵活控制布局,更加直观,但需要显式声明。

使用方法:

  1. 子模板添加布局标签
    在需要布局的模板文件(如 add.html)头部添加:

    {layout name="layout" /}

    表示使用 layout.html 作为布局模板。

  2. 可选功能:

    • 指定其他布局:
      {layout name="Layout/newlayout" /}
    • 自定义替换占位符:
      {layout name="layout" replace="{__REPLACE__}" /}

注意事项:

  • 不依赖全局配置文件中的 layout_on 设置。
  • 同一个模板文件中只能使用一个布局模板。

方式三:动态方法布局

适用于在代码中灵活控制布局,特别是局部启用或关闭布局的场景。

使用方法:

  1. 动态开启布局:

    $this->view->engine->layout(true); // 启用默认布局 return $this->fetch('add');
  2. 指定布局模板:

    $this->view->engine->layout('layout/newlayout'); 
    return $this->fetch('add');
  3. 关闭布局: 如果全局启用了布局,但需要在某个页面关闭:

    $this->view->engine->layout(false); 
    return $this->fetch('add');


三种方式的对比

方式特点适用场景
全局配置方式统一配置,自动套用布局模板,支持全局关闭或子模板局部关闭布局整站使用同一个布局框架,开发维护成本低。
模板标签方式灵活直观,在模板中显式声明布局,标签形式简单易懂局部使用布局模板,不依赖全局配置。
动态方法布局在控制器中动态控制布局,支持灵活启用/关闭或切换布局模板页面布局复杂多变,需要动态调整布局的场景。

建议

  • 全站统一布局: 使用 全局配置方式,维护方便,代码更简洁。
  • 局部布局需求: 可以结合 模板标签方式动态方法布局 灵活控制。
  • 特殊场景调整: 使用 动态方法布局 动态开启或关闭布局,尤其适合复杂项目中。

http://www.kler.cn/a/441424.html

相关文章:

  • 网络安全大模型和人工智能场景及应用理解
  • Alibaba Spring Cloud 六 Seata 的核心组件:RM
  • 保健食品注册数据库<一键查询保健食品信息>
  • 【C语言】预处理详解
  • 【JAVA 基础 第(20)课】JDBC JAVA 连接 MySql 数据库
  • 微调Qwen2:7B模型,加入未知信息语料
  • CentOS7源码编译安装nginx+php+mysql
  • 前端单元测试实战:从零开始构建可靠的测试体系
  • vue2项目中如何把rem设置为固定的100px
  • Linux:进程通信、管道通信
  • MFC CMDIChildWnd
  • 【Linux】socket编程1
  • jmeter后端监视器
  • selenium 在已打开浏览器上继续调试
  • C/S软件授权注册系统-轻量级WebApi服务器介绍
  • 【Python爬虫系列】_034.抓包工具_Charles
  • AI大模型学习笔记|多目标算法梳理、举例
  • 【Excel】单元格分列
  • webSokect安卓和web适配的Bug 适用实时语音场景
  • 优化算法更新 | 基于WOA-CNN-BiLSTM的多步预测模型
  • C#/Winfrom -文件操作
  • Unity中展示当前时间
  • 使用 rvest 包快速抓取网页数据:从入门到精通
  • .NET6 WebAPI从基础到进阶--朝夕教育
  • Kubernetes Service 详解:如何轻松管理集群中的服务
  • 什么是MyBatis?