Skip to main content

Module layout

Module layout 

Source
Expand description

模板布局 — 对齐 PHP think\Template 的布局(layout)机制

实现对齐 PHP Template::compiler()Template::parseLayout() 的布局功能。

§PHP 对齐说明

§配置模式(对齐 compiler() 中的 layout_on 检查)

  • layout_on=true + layout_name='layout' + layout_item='{__CONTENT__}'
  • 编译时自动读取布局模板,将 {__CONTENT__} 替换为当前模板内容
  • {__NOLAYOUT__} 标签可单独禁用布局

§标签模式(对齐 parseLayout()

  • {layout name="layout" replace="{__CONTENT__}"}
  • parseLayout() 解析标签并替换
  • 如果 layout_on=truelayout_name == 标签 name,则跳过(已由 compiler() 处理)

§PHP 解析顺序

  1. compiler() — 配置模式布局(在 parse() 之前)
  2. parse():
    • parseLiteral — 暂存 literal
    • parseExtend — 继承
    • parseLayout — 标签模式布局
    • parseInclude — 包含

§PHP str_replace 行为

  • str_replace($search, $replace, $subject) — 单次遍历,非递归
  • 如果 $replace 包含 $search,不会再次替换
  • Rust String::replace 行为一致

§PHP 源码参考

  • think-template\src\Template.phpcompiler() (389-432), parseLayout() (529-551), layout() (316-336), getRegex('layout') (1306-1319), parseAttr() (816-833), parseTemplateFile() (1238-1259)

Functions§

apply_layout
应用布局(对齐 PHP compiler() + parseLayout()