zoukankan      html  css  js  c++  java
  • [转]Smarty模板中for循环的扩展

    近两年来,一直在使用Smarty模板做php系统的开发,感觉效率非常高。但是随着使用的增多,也出现了一些不方便的地方,或者需要解决的难题,今后我会把这些问题的解决慢慢写上来和大家分享。

    今天的这个问题可能也困扰了很多人,它说简单很简单,但是smarty中就是没有一个解决的方案,我上网搜了一下,也是没有满意的答案,而且大部分都是答非所问。

    先来看问题:
    需要能在Smarty模板文件中循环$sCount变量,就像类似于下面的PHP循环形式:

    for ($i = 0; $i < $sCount; $i++)
    {
    ......
    }

    但是又不使用{php}。。。{/php}标签。Smarty中的循环无论foreach还是section全部都是关于数组循环的语句,要想循环,就必须在php文件中先建立一个数据组。而且有的时候,这个数组的元素数量是不定的。这就给开发人员带来的多出一倍的代码量。

    考察了smarty文档后,发现可以用自定义的plugin来解决这个问题,于是就动手写了一个。

    plugin文件:

    <?php



    function smarty_block_for($params, $content, &$smarty)
    {
        if (is_null($content)) {
            return;
        }

        $from = 0;
        $to = 0;
        $step = 1;
       
        foreach ($params as $_key => $_val) {
            switch ($_key) {
                case 'from':
                case 'to':
                case 'step':
                    $$_key = (int)$_val;
                    break;

                default:
                    $smarty->trigger_error("textformat: unknown attribute '$_key'");
            }
        }

        $_output = '';

        for($_x = $from; $_x <= $to; $_x += $step) {
            $_output .= $content."\n\r";
        }

        return $_output;

    }

    ?>

    把上面的内容复制到一个php文件中,文件名保存为“block.for.php”

    然后把这个文件复制到smarty模板的安装目录下的plugins文件夹中即可。

    在模板文件中的用法:

    {for start = 1 to = 5 step = 1}
    ...要循环的html内容...
    {/for }>

    循环次数为 (to - start + 1) / step
  • 相关阅读:
    反转字符串(指定子串不反转)
    字符串相同字符个数统计
    指针函数/回调函数
    simplest_dll 最简dll的创建与隐式调用(显式调用太麻烦,个人不建议使用)
    字符串的相关操作
    sizeof()函数求各类型变量所占空间的方法
    对于数组使用sizeof(a)和使用sizeof(a[0])
    交换两个数的三种方法
    最简字符串查找操作(静态顺序串,非链串)
    类模板 template<class T>
  • 原文地址:https://www.cnblogs.com/luowei/p/2436586.html
Copyright © 2011-2022 走看看