php模版引擎(smarty3)—优化(定界符,避免和其他语言的冲突)

来源:互联网 发布:mac磁盘权限修复 编辑:程序博客网 时间:2024/05/01 15:36

在smarty3的模版变量中,如{$var},默认{$val}的两边是不能出现空格的,即{  $val  }。如果出现空格会报错,

但在smarty2中则允许出现空格。

这样就很容易跟页面嵌入的其他的语言发生冲突,如页面中的:

<style>

body{margin:0;padidng:0;}

p{  color:#000; font-size:14px;  }

input{

width:200px;

height:30px;

}

</style>

<script>

function render()

{

while(true)

{ /*执行的程序*/  }

}

(function (){alert(1);})()

</script>

如果使用{$val}这种形式,就会跟body{margin:0;padidng:0;}这种类型发生冲突;

如果使用{ $val }这种形式,就会跟p{  color:#000; font-size:14px;  }这种类型发生冲突;

smarty会将上面的用{}括起来的部分进行编译,编译成我们不需要的东西,从而产生错误;


上面的那两种css代码和javascript代码是非常常见的代码格式,不同的开发人员有不同的开发风格,我们都不能强制别人和我们都使用同样的开发风格。


笔者认为有三种方法可以避免冲突的发生。


第一种:重新定义smarty的定界符并且允许两边出现空格。

在smarty的类中提供了三个公有属性:
$left_delimiter        —— 用来定义左定界符;

$right_delimiter      —— 用来定义右定界符;

$auto_literal            —— 用来定义是否允许出现空格,这个值默认为true,即:不允许出现空格;

我们可以通过设置这三个属性来重新定义smarty的定界符并且允许两边出现空格。

如:(我们将定界符定义成<{$val}>这种形式)

$smarty = new Smarty();

$smarty->left_delimiter = ‘<{’;

$smarty->right_delimiter      = ‘}>’;

$smarty->auto_literal = false;

这样就可以使用<{$val}>或<{ $val }>这两种形式都不会出现错误;


第二种:把javascript代码或css代码写到一个js文件或css文件中,在模板页中引用即可。


第三种:

使用smarty内置的literal标签,此标签内的数据将会被当做文本处理。如:

{literal}

<script language=javascript>

  ........

</script>

{/literal}


可以根据个人的使用习惯以及爱好来选择一种方式。


0 0
原创粉丝点击