Smarty 显示大括号 | 在Smarty中计算数组元素的长度 | Smarty字符串拼接

来源:互联网 发布:数据分析师难考吗 编辑:程序博客网 时间:2024/05/22 06:12

参考链接:http://hi.baidu.com/bdusnb/item/289d160e6a9c92cd9157183d

参考链接:http://hi.baidu.com/mayimu789/item/b565088d047da0d05f0ec16f

参考链接:http://blog.sina.com.cn/s/blog_8155e74d0101el2k.html


Smarty 3 :大括号问题

smarty如何避免大括号、超链接如何去掉下划线

本文向大家描述一下避免Smarty与CSS语法冲突的三种方法,Smarty和CSS的语法存在冲突,因为二者都需要使用大括号{}。如果简单地将CSS标记嵌入到HTML文档首部,将导致"不可识别标记"错误。

避免Smarty与CSS语法冲突

熟悉CSS的人很快就会发现Smarty和CSS的语法存在冲突,因为二者都需要使用大括号{}。如果简单地将CSS标记嵌入到HTML文档首部,将导致"不可识别标记"错误:

<html>  <head>    <title>{$title}</title>    <style type="text/css">p{ margin::2px } </style>  </head>... 

不要担心,因为我们有3种解决方案。

一、使用link标记从另一个文件中提取样式信息:

<html>  <head>    <title>{$title}</title>    <link rel="stylesheet" type="text/css" href="default.css"/></head>... 

二、使用Smarty的literal标记将样式表信息包围起来

这些标记告诉Smarty不要解析该标记内的任何内容:

<html>  <head>    <title>{$title}</title>{literal}     <style type="text/css">p{ margin::2px } </style>{/literal}   </head>... 

三、修改Smarty的默认定界符

可以通过设置center_delimiter和center_delimiter属性来做到这一点:

<?phprequire("Smarty.class.php"); $smarty=newSmarty; $smarty->left_delimiter=''; $smarty->right_delimiter=''; ... ?>
虽然3种解决方案都能解决问题,但其中第一种可能是最方便的,因为将CSS放在单独的文件中是一种常见的实践做法。此外,这种解决方案不需要修改Smarty的重要默认配置(定界符)。

超链接如何去掉下划线

在源代码中的<HEAD>…</HEAD>之间输入如下代码:

<style type="text/css"> <!--a { text-decoration: none}--> </style>
或者直接加入超链接中:

<a style= "text-decoration:none " href=#> fason </a>

Smarty 3 :计算数组个数问题

分配了一个数组array给Smarty,假设Smarty的分界符为'{' 和'}'。

在很多资料上都看到,在Smarty中要求数组的长度时,可以用在数组后便 加|count的方法调用。

即通过{array|count}获得array的长度。

但是今天在写模板时,发现这样得不到数组的长度,而只是得到一个返回 的字符串Array。

也就是说仅仅是返回了{array}的结果,而没有返回其array的长度。

查看smarty\plugins文件夹,发现并没有count的相关方法,也就是说,count是直接调用了php中的方法。

后来通过网络上的资料,发现可以在count前面加@,从而正确的获取数组的长度。

再进一步查看Smarty的源码,发现Smarty对属性调节器后边的方法名进行处理时,会对前边加@的进行特殊处理。

因此作出判断:

在Smarty中的属性调节器中调用php中定义好的函数时,可以通过加@来表示。

1、对类型为数组的方法进行测试时,发现不加@符号都会出错。

    比如:要对一个数组调用count方法求出数组的长度,就可以这样调用{array|@count},而要对数组调用end方法得出数组的最后一组数据时,则可以通过{array|@end}。

2、在对字符串的相关函数进行测试,发现加不加@都可以正常的调用。

3、其他的尚未认真测试。

对于在smarty中调用复杂的php函数不予鼓励,因为Smarty的本意就是要实现代码和模板分离,应该认定模板就是界面设计的人员用的,如果过多地加复杂逻辑,对他们来说就是一种折磨了。www.relaxcool.com/


Smarty 3 :字符串拼接

PHP页面传到Smarty模板上的变量(这里用,在Smarty上创建两个变量代替)

{assign var="name" value='Richard.Lee'}
{assign var="age" value='27'}

1、想要在Smarty模板的某个位置输出(Richard.Lee---27

  拼接方法:{$name|cat:"---"|cat:$age}

   解释:将变量$name、"---"、$age拼接成一个字符串

 

2、想要在Smarty模板的某个位置输出(姓名:Richard.Lee,年龄:27

  拼接方法:{"姓名:"|cat:$name|cat:",年龄:"|cat:$age}
            {"姓名:"|cat:$name|cat:","|cat:"年龄:"|cat:$age}

   解释:两个拼接方法得到的效果一样

 

备注:在网上找到的方法,不是很理解|cat:的作用,但是经过两个简单的例子得出简单结论:可以把|cat:当成是链接字符串的符号,相当于PHP文件中的点(.)。


0 0