HongCMS模板语法

weenfier 2019-1-16 2509

HongCMS模板语法


1. 注释的写法两种:

标准(推荐):    <!--注释的写法1-->

或:              {*注释的写法2*}

注意: 如果在模板中插入了PHP代码, 那么PHP代码中不能按上述两种方式写注释, 而应该按PHP规则写注释


2. 包含模板文件的写法:

写法1:  {include "a.tpl"}或{include 'a.tpl'}{require a.tpl}     //无引号, 单引号或双引号都行, 也可以混用

写法2:  {include('a.tpl')}或{include ( 'a.tpl' ) } //使用括号

写法3:  {require 'blog/a_b_c.tpl'}   //注意, 当前模板目录下仅允许1级下级目录

注意: 

i). 在任何模板文件中包含其它文件, 其路径都是相对于当前模板目录, 这一点不同于PHP, 需要注意

比如: 在blog/a_b_c.tpl文件中, 想包含blog/xxx.tpl文件, 不能写成{include  "xxx.tpl"}, 而要写成: {include  "blog/xxx.tpl"}

ii). include和require没有任何差别, 前面加@也无效. 这两种包含文件的方式完全是为了满足某些同学的习惯

iii). 如果不使用括号, include或require后面至少有一个空格.


Smarty, DZ等这样写{include file="a.tpl"}, 而XTpl的写法更简单, 同时更像PHP语法, 看完其它语法, 同学们将更有体会!!

模板中是否可以包含PHP文件呢? 当然可以, 但要使用PHP代码的方式, 如: <?php include('xxx.php'); ?> 那么此句中包含的文件是相对于当前运行的PHP文件



3. JS或CSS写法:
CSS或JS写法不受影响,但是两个花括号需要独立成行, 否则{}之间的代码当PHP模板代码解析了, 并且会出错!!!  晕菜.......

	<script type="text/javascript">
	function aaa(){
		alert('aaa');
	}
	</script>


	<style type="text/css">
	body {
		font:12px;
		......
	}
	</style>


实在是不想分行, 有时确实需要在一行上编写js代码,那么可以在{后面加一个空格,如: function aaa(){  alert('haha')}, CSS同理。

如果不想分行又不能有空格该怎么办呢?  比如要输出:{今天的天气不错},那你只好把{}转换成ASCII码了。


4. 显示变量(模板中输出变量的内容)

简单显示: {$test}  注意{}内部不能有任何空格或其它的PHP运行符, 同时必须以$开头, 否则就变成赋值运算了

显示数组: {$arr["key1"]} 或 {$arr['key2']} 或 {$arr.key1} 或 {$arr.key2}

显示对象成员变量(->前后不能有空格): {$obj->myname}

显示对象成员函数运行返回值(->前后不能有空格): {$obj->showname('aaaa')}

显示系统常量: {echo ROOT}  注意不能写成这样: {ROOT}

显示运算后的结果: {echo intval($key + 1.2)} 注意不能写成这样: {intval($key + 1.2)}

能否{echo $test}或{print $test}这样显示变量呢?  当然可以, 只要你不怕累着, 呵呵.


5. 变量赋值及运算

简单赋值: {$key=3}

运算赋值: {$key = 3+6}

运算赋值: {$key = $key+6}

调用系统函数运算并赋值: {$key=intval($key+0.6)}

字符串运算: {$key=$key.'aaa' . 'bbb'}

赋值中使用对象成员变量或函数(->前后可以有空格): {$key=$obj -> myname .$obj -> showname('aaaa')}

调用系统常量运算: {$key = ROOT . 'abc/'}

XTpl模板中的赋值和运算, 几乎写PHP代码一样, 实在是太强了. 这样类似Smarty中的函数和修改器就完全没必要了

比较Smarty中cat修改器这样写: {$test|cat:'123'|cat: "456"}

XTpl中这样写:                      {echo $test.'123'.'456'}

对比一下, 是不是更短更简单了, 再也不用记cat这样的修改器名称和用法了


再比如: 由于模板中的URL有时需要根据系统是否开启伪静态来切换, 这时系统中可以做一个URL($url)之类的函数:

	function URL($url){
		if('开启伪静态'){
			return xxxx . $url;
		}else{
			return yyyy . $url;
		}
	}


那么在模板中可以这样写URL:  {echo URL('blog/index')}

如果上面的URL函数中是echo输出(不建议), 那么可以直接这样写: {URL('blog/index')}


6. if elseif else语法同PHP, 只是需要/if结束: 

	{$var  = 3} //赋值

	{if $var=='1' || $var=='9'}
		{$var}
	{elseif($var=='2' AND $var != '9') OR $var==3}
		{$var}
	{else}
		{$var}
	{/if}


7. for和foreach循环语法同php, 只是需要/for或/foreach结束: 

	{for($i=1;$i<=8;$i++)}  
		{$i}  
	{/for}

	<!--不要括号也可以, 但for后面需要有空格, foreach同理-->
	{for $i=1; $i<=8; $i++}       
		{$i}  
	{/for}

	{foreach($arr as $k=>$v)}  
		{$k}: {$v}
	{/foreach}

	<!--二维或多维数组-->
	{foreach($arr as $key=>$value)}  
		{$value.id}  或 {$value['id']}     
		{$value.item.item2}  或 {$value['item']['item2']}
	{/foreach}


8. 直接使用PHP代码, 意味着你可以做PHP中的任何事:

	<?php
		//注意: php代码中的注释只能按PHP规则写
		echo 'this is php codes';

		$this->dothing();
	?>


9. 在模板文件中, 是否可以在模板代码中调用php代码中定义的变量呢?

可以, 但是复杂一点点.

也就是说你可以使用PHP代码处理变量,然后用特定格式赋值,再在模板代码中调用. 比如处理环境变量等

	<?php
		//php代码语法可以按php规则书写,包括注释

		$this->_tpl_vars['var_test'] = $_SERVER['HTTP_HOST'];

	?>


模板代码中调用php变量: {$var_test}


10. 在模板文件中, PHP代码是否可以调用模板代码中的变量呢?可以, 但是复杂一点点.

	{$aaa = array('a', 'b')}      <!--前面是模板代码-->


	<?php
		echo '<pre>';
		var_dump($this->_tpl_vars['aaa']);   //这里是PHP代码
		echo '</pre>';
	?>


第9条和第10条说的是模板文件中的PHP代码和模板代码之间的交互, 注意这个东东$this->_tpl_vars的写法就OK了.

$this->_tpl_vars, 这里的$this指的是模板对象

New Post (0)
Back
Create New Thread