微擎本质是一套后台管理系统, 因此没有预留风格切换的功能(并且也完全没有这个必要). 系统风格定义于 ./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}
|