Tag: smarty

  • Smarty中用section完成主从表循环

    在我的“任氏有无轩”WEB界面中,有一个是读书页面。这个页面列出了我非但读过、而且写过相关评论的书籍,各个评论将链接到对应的BLOG文章去。 显然,这是一个很典型的“一对多”的主从表循环。原来我是简单的用嵌套循环,现在既然用了Smarty引擎,我就改用了Smarty中的section语法。

    =======================

    Smarty中的section语法说来不复杂——特别是在不嵌套的时候:

    <?php
    //从PHP脚本中assign()一个数组给Smarty:
    $data = array(1000,1001,1002);
    $smarty->assign('custid',$data);
    ?>
    输出数组的模板:
    {* 本例将打印出$custid数组的所有值 *}
    {section name=customer loop=$custid}
    id: {$custid[customer]}
    {/section}
    {*  逆序打印所有$custid数组中的值 *}
    {section name=foo loop=$custid step=-1}
    {$custid[foo]}
    {/section}

    语法是自明的,这里不多做解释。如果牵涉到主从表的嵌套循环,那么语法会稍微复杂一些:

    {section name=reading loop=$readings}
        //循环显示外层循环的内容
        {section name=reading_detail loop=$reading_details[reading]}
        {$reading_details[reading][reading_detail].reviewid} <a
          href={$reading_details[reading][reading_detail].uri}>
        {$reading_details[reading][reading_detail].title}
        </a>
        {$reading_details[reading][reading_detail].datein}
        {/section}
    {/section}

    可见,外层循环(主循环)还是保持基本语法不变,内层的语法中需要特别注意loop=$reading_details[reading]这个loop变量的控制,以及循环显示内层循环的内容时对索引的引用控制。 当然,我使用的是一种最直截了当的方法。在对应的PHP文件中,对各个循环变量可以使用一个类似的嵌套循环来赋值:

    $i=0;
    $arr1=array();
    $arr2=array();
    foreach ($result1 as $master)
    {
        $arr[$i]['aField']=$master['aField'];
        // 更多的外层赋值
        $j=0;
        foreach ($result2 as $detail)
        {
            $arr[$i][$j]['anotherField']=$detail['anotherField'];
            // 更多的内层赋值
            $j++;
        }
        $i++;
    }

    这样就可以完成两个循环变量的初始化,然后再用Smarty赋值给模板变量即可。 Smarty中的section是非常强大的循环控制语句。任何需要使用Smarty进行模板操作的人,必须掌握其语法。也许,它的唯一不足也在于此:对于一个MVC完全隔离,前端界面可能由根本不懂计算机编程的设计人员完成的前端来说,section的语法还是稍微复杂了一些。

  • “任氏有无轩”改版进程

    今天完成了“读书”界面的改版,前台全部用Smarty,后台是PHP。

    之所以搞了比较长的时间,是因为在读书页面中,牵涉到一个主从表的循环。主表的很简单,而从表的就不那么简单。我足足想了差不多一个礼拜构思数组(数据集)的构成,又用了差不多60分钟完成了代码的编写。

    现在的任氏有无轩已经基本上由Smarty驱动了。

  • 站点后台改版近况

    到目前为止,还是很有收获。很多页面都已经改造到使用Smarty引擎,而且有两个页面(http://www.rsywx.net)和各本书籍的详细情况的页面——后一个页面无法直接访问,需要进入书籍列表后点击一本书籍后进入)使用了XAJAX技术。我个人认为后一个XAJAX技术的应用更加“有用”:我可以在不刷新页面的前提下完成添加一本书的TAG的任务。

    Smarty的速度还是可以信赖的,它的模板编译功能很强大。而XAJAX也很易用,我不用再去学习jQuery或者别的什么ajax框架。

    现在还有读书页面和杂项页面需要改动。然后就要开始加入一些XAJAX的示例页面了。

  • “任氏有无轩”后台改版

    2F设置好了,php-interbase的模块春阳也给我编译好了……似乎没有什么理由再阻止我进行后台的改版。

    当然,前台不会动——毕竟那是我花了钱请人设计的,还没有用上多久马上改版说不过去。

    后台想这么改动:

    • 所有的页面改用Smarty引擎来支持;
    • 必要的页面会用到XAJAX的技术实现ajax的效果。

    目前只是测试了一个页面,就是www.rsywx.net的首页。

    当你用你的鼠标移进、移出两个小图片时,右边会出现、隐藏相应的文字说明。这个就是用XAJAX实现的。当然,这个只是很初级的应用。

    我还会开辟一个专门讲述Smarty和另一个专门讲述XAJAX的栏目。希望到时有人关注。

    由于我的2F已经支持InterBase并安装了FireBird服务器,因此我将在近日将Vista上的IB数据库迁移到FB下去。希望能顺利。我使用IB已经有很多年了,还写了(至今)国内唯一一本关于IB的书。这份感情和依赖是Borland/CodeGear/Embarcadero无法理解的。

    也许,使用FB多了后,我会再次捉刀,写本关于FB的书吧,毕竟FB和IB太相像了。 ……

  • 八月十七日

    是日,上于股市继续保持受挫状态。终于出现红字。

    下午与太子一起去邻里中心学习拼音,却带错了练习本无法练习写拼音。

    回家后,上开始钻研两个问题:

    (more…)

  • Smarty中文手册放出

    经过三个月断断续续的翻译,终于翻译好了Smarty的使用手册。

    纯手工翻译,价格便宜量又足。地球人(以及火星人、前冥王星人)的最爱!

    下载地址:在这里,在这里

  • 开始学习Smarty

    今天和朋友在GTALK上聊天,谈到了一些PHP学习的方向。我是从半年前开始接触PHP的,虽然有C/C++的基础,但毕竟PHP是个新语种啊。

    下载了一个Smarty,然后安装,慢慢看吧。

    当然,我认为,学习一个新东西的最好方法有两种:

    一个当然是基于这个东西开发; 一个就是翻译文档。

    我准备从后者开始。翻译的文档会在站点中放出。