整理一下自己在山寨Lofter中常用的Smarty方法

Lofter的山寨计划已经完成有快20天了,总的来说这不是一次成功的山寨,至少没有达到我的预期期望。

不过,难过归难过,遇到的一些小东西还是要整理出来的,今天先简单整理整理一下Smarty模板引擎吧。

还是得感谢一下组里面的晓龙童鞋吧,若不是他昨天问到我几个关于Smary的问题的话,我估计就又会把整理这活给抛一边去了╮(╯▽╰)╭

好了,下面开始正题:

·关于Smarty:

Smarty是一个使用PHP模板引擎,嗯,引擎,不过别一看“引擎”俩字就蒙了,说白了它其实就是一个别人写好的类而已,自己拿过来new一下就可以用。好吧,skidu承认自己在文笔方面确实不行,各路大神如果实在需要专业点的介绍文档还请移步度娘百科- -

·Smarty的安装:

解压下载后的Smarty压缩文件,将其中的lib文件夹拷贝到自己需要的目录即可
下载地址:http://www.smarty.net/download
本例中存放目录为:本地www根目录/smarty/lib

·快速实现一个Smarty的应用

首先,咱在smarty目录创建一个新的php文档(1.php)

<?php
    require(&quot;./libs/Smarty.class.php&quot;);  //包含Smarty主文件
    $tpl = new Smarty();  //实例化Smarty对象
    $tpl->template_dir=&quot;./templates&quot;;  //设置模板目录位置
    $tpl->compile_dir=&quot;./coms&quot;;  //设置合成文件存放目录位置
    $tpl->left_delimiter=&quot;<{&quot;;  //设置左定界符,默认是&quot;{&quot;,个人习惯使用&quot;<{&quot;
    $tpl->right_delimiter=&quot;}>&quot;; //同上,默认是&quot;}&quot;
    $tpl->assign(&quot;hello&quot;,&quot;测试内容&quot;);
        //向模板分配一个变量“hello”,变量的内容为“测试内容”,可以为任意值
        //比如数据库查询结果等
    $tpl->display(&quot;1.html&quot;);
        //设置模板显示
?>

接着,咱再在templates目录中创建一个1.html的文件,并在文档中输入<{$hello}>
用浏览器访问1.php,这时你看见了什么?

怎么样,很简单就实现了吧~

你可以将任意需要在网页中显示的内容分配给Smarty,然后再在模板文件中直接使用变量来输出内容。字符串、数组神马的都可以直接assign,当然,资源类型的变量是不能直接这么玩的
需要注意的是,在模板中使用js、css、img等任意资源的时候,其url应相对于访问的php文件设置而非该模板文件本身!

·Smarty中数组的遍历

Smarty也有自己的数组遍历方法,分别是foreach和section,如果和php中咱们常用的遍历方法进行对比的话你会发现,其实这两个分别就是php中的foreac和for两种遍历方法

section遍历说明:

在需要遍历的位置插入
<{section loop=分配的变量名 name=自己随意取一个名字}>
遍历内容
<{/section}>
来进行遍历。

对于索引式数组,咱可以使用<{$变量名['索引值']}>直接读取值,而对于关联式数组则需使用<{$变量名.索引值}>进行读取了。
比如数组$a=array("one","two","three","four","five"),咱$tpl->assign("arr1",$a)过后,在模板中<{$arr1['0']}>即可读取值one
对于数组$b=array("no1"=>"one","noo"=>"two"),$tpl->assing("arr2",$b),则需要使用<{$arr2.noo}>才可读取值two而不是<{$arr2['noo']}>
好吧,不妨思考一下,数组$c=array("one"=>"aaaa","two"=>"bbb","ccc","three"=>"ddd")我们要怎样才能读取到值ccc?

有了它能做什么?
比如说我们从数据库用户表中读取了三个用户的信息,包含ID、用户名、邮箱、电话号码等,那么它就应该是这样一种情况

$data = array(
    array(
        'id'=>1,
        'username'=>'张三',
        'email'=>'zhangsan@qq.com',
        'phone'=>'110'
        ),
    array(
        'id'=>2,
        'username'=>'李四',
        'email'=>'lisi@qq.com',
        'phone'=>'120'
        ),
    array(
        'id'=>3,
        'username'=>'王五',
        'email'=>'wangwu@qq.com',
        'phone'=>'119'
        )
    );

我们将它分配给模板

$tpl->assign(&quot;user&quot;,$data);

模板中我们该怎么用呢?好吧,我喜欢用section来进行遍历,我们就用一个简单的表格来输出它吧!

<table>
    <tr>
        <th>ID</th><th>用户名</th><th>邮箱</th><th>电话</th>
    </tr>
    <{section loop=$user name=&quot;info&quot;}>
        <tr>
            <td><{$user[info].id}></td>
            <td><{$user[info].username}></td>
            <td><{$user[info].email}></td>
            <td><{$user[info].phone}></td>
        </tr>
    <{/section}>
</table>

看到了什么?

·Smarty中的判断
{<if>}{<elseif>}{<else>}{</if>}
怎么样,是不是和php中是一样的呢?仅仅是需要多写个定界符而已嘛~O(∩_∩)O~
想必各位在php中已经玩的不爱了,这里就不多占篇幅了吧~

嗯,还差些什么呢,skidu一时有点思维短路,想不大起来了,那就简单说几句在山寨过程中遇到的一些小麻烦吧。
当初skidu手册翻烂都没有翻出来,只好请教google,后来还是再Smarty官方论坛中找到了答案:

smarty中使用in_array()
{if 需要判断的变量 | in_array:目标数组}

empty()功能
嗯,这个我承认是自己想太多了,直接使用<{if $data eq ""}><{/if}>进行判断即可

先写这些吧,如果后面想起来别的了就继续在本文更新

标签: smarty, smarty empty, smarty in_array, smarty入门, smarty数组

已有 9 条评论

  1. 相当不错哦!

  2. 强大,分享了,找了好久我晕!

  3. 我晕!这样也行?学习了!

  4. 真诚谢!!

  5. 話說smarty似乎會有解析速度的問題的說,當然開cache會好很多

    1. admin

      @kita
      终于又看见你的身影出现了,呵呵
      Smarty的话个人感觉还不错啊,至于速度的问题skidu暂时没有太多感觉,可能跟目前自己经手的项目都不太大也有关系吧 :cahan:

      1. 嘛~嘛,總不能像那些沒節操的營銷評論員一樣么,所以嘛,因為小生平時有用PHP MVC Frameworks之類的東西,Smarty這樣的了解下當然有好處的啦 :cahan:

        1. admin

          哈,这话说到点子上了~
          话说回来过后删机器回复点到skidu手软呢 :yaa:
          不知道什么原因,总会有朋友的留言不小心被A某拦截,不敢直接点清空啊 :but:

  6. :qq: 到此一游,看得很模糊。。。

评论已关闭