微擎模板机制文档
2018-09-22
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}
Name: {$wechat["name"]} {/loop}扩展语法: 可以使用扩展的语法 {$loop $list $key $wechat} 来遍历集合的键名和键值, 例如:{loop $wechats $weid $wechat}
Id: {$key}; Name: {$wechat["name"]} {/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"}
Name: {$row["name"]} {/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}
{$row["title"]} {/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}
鲜花
握手
雷人
路过
鸡蛋
收藏邀请
上一篇:微擎界面设计规范下一篇:微擎微站风格机制
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。
http://www.pinlue.com/style/images/nopic.gif