分享

微擎模板机制文档

 quasiceo 2017-01-01

微擎模板机制文档

2016-1-28 22:44| 发布者: 商业源码网| 查看: 781| 评论: 0

摘要: 微擎本质是一套后台管理系统, 因此没有预留风格切换的功能(并且也完全没有这个必要). 系统风格定义于 ./themes/default/ 中. 按照功能点不同定义于各自的子文件夹中. 在进行模块开发的过程中尽量不要改动系统风格, ...

微擎本质是一套后台管理系统, 因此没有预留风格切换的功能(并且也完全没有这个必要). 系统风格定义于 ./themes/default/ 中. 按照功能点不同定义于各自的子文件夹中. 在进行模块开发的过程中尽量不要改动系统风格, 以方便升级时保证向后兼容.

所有的模板缓存均被解析成php文件存放在 ./data/tpl 中, 以 “模板标示符.tpl.php”形式保存. 页面缓存刷新原理: 当开发者编辑过模板文件之后, 模板解析器会匹配模板html文件与缓存php文件的最后修改时间, 如过模板html文件较新或无缓存文件, 则更新或生成缓存, 不新, 则不采取任何动作. 手动删除此目录的缓存不会影响系统的整体运行, 模板缓存仍然会进行自动生成.

PHP中使用 template() 函数显示已存在模板

在PHP代码中展示模板页请使用 template() 函数, 在开发模块时模块内部应该使用 $this->template() 函数, 这两个函数是用方式完全相同, 只是开发模块时特定模块的模板定义于当前模块文件夹内部(请参阅 "模块开发指南"). 此方法定义如下:

mixed function template(string $filename, int $flag = TEMPLATE_DISPLAY)
  • 说明: 展示特定模板内容
  • 参数:
    $filename 模板名称, 格式为: '模板文件夹/模板名称无后缀', 如: common/header $flag 模板展示方式
  • $flag含义: TEMPLATE_DISPLAY 导入全局变量, 渲染并直接展示模板内容(默认值)
    TEMPLATE_FETCH 导入全局变量, 渲染模板内容, 但不展示模板内容, 而是将其作为返回值获取. 可用于静态化页面. 
    TEMPLATE_INCLUDEPATH 不导入全局变量, 也不渲染模板内容, 只是将编译后的模板文件路径返回, 返回的模板编译路径可以直接使用 include 嵌入至当前上下文.
  • 示例: 以下三种调用方式效果相同$list = array(); ... // 其他更多上下文数据 template('common/template'); //直接展示模板 $content = template('common/template', TEMPLATE_FETCH); //获取模板渲染出的内容 echo $content; //输出渲染的内容 include template('common/template', TEMPLATE_INCLUDEPATH); //嵌入模板编译路径

微擎模板语法

微擎模板使用模板标记来嵌入变量和实现简单的逻辑语法, 当前支持的模板标记包括以下:

变量输出 - {$var}
  • 说明: 使用花括号包含的变量将直接输出至页面, 功能等同于<?php echo $var;?>
  • 转义: 一般情况模板引擎能自动识别 javascript 中的花括号和变量输入的花括号. 如果遇到程序不能自动分辨的情况可以强制使用 "{##" 符号来代表 "{", 使用 "##}" 符号来代表 "}".
  • 特殊情况: 变量输出语法同时支持直接输出数组元素或嵌套数组元素, 例如:{$row['name']} {$_W['member']['username']}
条件语法 - {if condition}{/if}
  • 说明: 使用条件语法能实现等同于if的条件分支判断.
  • 逻辑语句: if后可以跟使用逻辑运算符连接起来的多条逻辑语句, 例如: {if $row['flag'] == '-1' && $row['role'] != 'admin'}被禁用{/if}
  • else语句: 可以使用 {else} 来扩充条件判断, 例如:
    {if $row['role'] == 'admin'} 管理员 {else} 普通用户 {/if}
  • 多条件判断: 可以使用 {else if condition} 来进行多个条件的判断, 例如:
    {if $row['role'] == 'founder'} 创始人 {else if $row['role'] == 'admin'} 管理员 {else} 普通用户 {/if}
循环语法 - {loop $list $row}
  • 说明: 使用循环语法能够遍历某个集合的内容. 示例:
    {loop $wechats $wechat} <li>Name: {$wechat['name']}</li> {/loop}
  • 扩展语法: 可以使用扩展的语法 {$loop $list $key $wechat} 来遍历集合的键名和键值, 例如:{loop $wechats $weid $wechat} <li>Id: {$key}; Name: {$wechat['name']}</li> {/loop}
模板嵌套 - {template $name}
  • 说明: 在模板的当前位置嵌入另一个模板, 例如: 使用 {template common/header} 来嵌入标准页头.
PHP语法嵌入 - {php statement}
  • 说明: 以上定义的模板语法已经能够实现大部分的页面嵌入情况, 如遇到不能满足需要的情况可以使用 PHP 语法嵌入标记, 例如:{php echo date('Y-m-d H:i:s', $row['dateline']);}
数据获取标签 - {data module="" func="" return="" item="" limit="" assign=""}{/data}
  • func - 指定获取数据的函数,此函数定义在模块目录下的model.php文件中
  • module - 指定获取数据的模块。
  • assign - 指定该标签得到数据后,存入的变量名称。如果为空则存在与func同名的变量中,方便在下方的代码中使用。
  • item - 指定循环体内的迭代时的变量名。相当于foreach ($foo as $i => $row)中 $row变量。
  • limit - 指定获取变量时条数。
  • return - 为true时,获取到数据后直接循环输出,为false时,获取到数据后作为变量返回。默认为false

  • 目前支持的获取数据func
    • {data func="siteslidesearch"} 获取微站幻灯片
      说明: 获取出4条幻灯片数据,示例:
      {data module="" func="site_slide_search" return="" item="row" limit="4"} <li>Name: {$row['name']}</li> {/data}
    • {data func="site_article" cid=$cid return="true" assign="result" iscommend="true" ishot="true"}
      说明: 根据当前分类$cid获取文章列表,把数据存放在result变量中。此数组中包含list数据和pager数据,iscommend 表示推荐文章,ishot表示热门文章。此标签可同时使用,也可单个使用。示例:{data module="site" func="site_article" cid=$cid return="true" assign="result"} {loop $result['list'] $row} <li><a href="{$row['url']}">{$row['title']}</a></li> {/loop} {$result['pager']}
    • {data func="site_category" parentid="0"}
      说明:获取当前分类列表,parentid指定获取某个分类的子类。parentid为0是则获取所有的父分类,默认是获取全部分类,示例:
      {data module="site" func="site_category"}{$row['name']}{loop $row['children'] $item}{$item['name']}{/loop}{/data}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多