微擎模板引擎标签整理

前边老杨分享过微擎人人商城模板文件目录,那这些模板修改过程中,如何互相调用,以及数据的输出呢?今天老杨来整理一下微擎模板引擎标签,看完就明白了。

PHP代码调用系统模板文件

在任何php代码中可以使用 template() 函数来渲染一个视图文件。例如:

//渲染 web/themes/default/user/login.html 文件
template('user/login');

app端与web端类似,只不过是app端起始目录为

/app/themes/default/xxx/yyyy.html

调用模块中的模板文件

同生成URL函数一样,微擎也同样为模块封装了单独的模板调用函数,调用格式:

include $this->template('index');

例如:

class We7_demoModuleSite extends WeModuleSite {
	public function doMobileIndex1() {
		global $_W, $_GPC;
		$title = '支付测试';
		//将渲染模块目录下的app端的模板文件
		// addons/we7_demo/template/mobile/index1.html
		include $this->template('index1');
	}

	public function doWebManage() {
		global $_W, $_GPC;
		//将渲染模块目录下的web端的模板文件
		// addons/we7_demo/template/manage1.html
		include $this->template('manage1');
	}
}

模块中的template函数,分为app端与web端的调用,开发时请大家注意各自的目录。如果是调用插件模板,相应目录如下:

/Addons/插件名称/template/mobile/index.html //app前端
/Addons/插件名称/template/index.html //web后端

微擎模板标签

微擎的模板文件本质上就是一个php文件,所以支持直接书写php代码,但是为了增加开发效率和非php人员的使用,微擎系统定了了一套类似于 Smarty 的模板引擎标签,输出标签是由一对花括号 {} 做为定界符的。

下面我们通过实例讲解一下微擎中的标签如何使用。

输出一个变量

格式:

{$name}

不支持输出数组,相对于php中的 echo 如下:

{$_W['fans']['nickname']}

判断语句

格式:

{if}{else}{/if}

示例:如果 $do 等于 record 则显示下面的卡券领取记录,否则显示查看卡券。

{if $do == 'record'}
	<li class="active"><a href="javascript:;">卡券领取记录</a></li>
{else}
	<li class="active"><a href="javascript:;">查看卡券</a></li>
{/if}

示例:if 和 elseif 配合使用

{if $dca['status'] == 1}
	<span class="label label-success">未使用</span>
{elseif $dca['status'] == 2}
	<span class="label label-warning">已失效</span>
{elseif $dca['status'] == 3}
	<span class="label label-danger">已核销</span>
{elseif $dca['status'] == 4}
	<span class="label label-default">已删除</span>
{else}
	<span class="label label-default">全部</span>
{/if}

循环语句

循环一个数组用 loop 标签,与php中的 foreach 函数类似,第一个参数为数组的索引,第二个参数为数组第一项的值
只要标签成对匹配,模板中的标签是可以嵌套使用的。

{loop $list $index $item}
<tr>
	<td>{$index}(显示数组的索引):</td>
	<td>{$item['user']['nickname']}</td>
	<td>
		{if $item['follow'] == '1'}
			<span class="label label-success">已关注 </span> 
		{elseif $item['unfollowtime'] <> '0'}
			<span class="label label-warning" >取消关注 </span>
		{else}
			<span class="label label-danger">未关注 </span>
		{/if}
	</td>
</tr>
{/loop}

执行php语句

由于某些时候需要使用一些php来输出内容,比如格式化时间戳为日期时,此写法并不支持多行php语句,例如:

{php echo date('Y-m-d H:i:s', $row['followtime'])}

再例如:

{php $a=$a+1}

html模板内引用一个模板文件

在模板中如果需要引用其它模板文件可以使用以下的方法:

//模块中的使用方法,不需要添加目录信息
{template 'header'}

//系统的模板引用的方法,需要添加目录信息
{template 'common/header-base'}

//指定插件的模板引用的方法,需要添加插件目录信息
{template 'cycelbuy/goods/picker'}

创建一个URL地址

定义URL时,与在php文件中的创建方法一样,具体使用如下:

<a href="{url 'extension/service/display'}" class="tile img-rounded"><i class="fa fa-glass"></i><span>常用服务</span></a>
<a href="{url 'home/welcome/ext' array('m' => $module['name'])}">模块 - {$module['title']}</a>

此标签并没有提供模块 $this->createMobileUrl('xx') 函数,在模块中的模板中请按以下方法创建:

{php echo $this->createMobileUrl('order')}

转义一个图片,附件地址

微擎系统支持远程附件,如果你有用到图片或是附件请转义一下地址,具体使用如下:

<i style="background:url({media $nav['icon']}) no-repeat;background-size:cover;width:18px;height:18px;"></i>

输出一对花括号
因为模板标签定界符是一对花括号,所以当你想输出一对花括号本身时可以使用以下方法:

{##$order##}

则此花括号和变量不会被转义。

想到什么了,再来整理。