使用正则表达式替换smarty模板系统?

时间:2014-10-25 17:32:10

标签: php html regex smarty

以下是我目前在Smarty模板中的内容:

<div class="tbl_pagination">
    {if $pager}{$pager->links}{/if}
<div>

我的{$pager->links}将输出此HTML:

<div class="tbl_pagination">
    <ul><li><a href="javascript:toPage(3)" title="previous page">Back</a></li>
    <li><a href="javascript:toPage(1)" title="page 1">1</a></li>
    <li><a href="javascript:toPage(2)" title="page 2">2</a></li>
    <li><a href="javascript:toPage(3)" title="page 3">3</a></li>
    <li class='active'>4</li>
    <li><a href="javascript:toPage(5)" title="page 5">5</a></li>
    <li><a href="javascript:toPage(6)" title="page 6">6</a></li>
    <li><a href="javascript:toPage(7)" title="page 7">7</a></li>
    <li><a href="javascript:toPage(5)" title="next page">Next</a></li>
    </ul></div>
</div>

我正在尝试更换两件不同的东西:

  1. 我想完成删除the title属性。

  2. 无论li哪个班级active还需要a href

  3. 这就是我想要的样子:

    <div class="tbl_pagination">
        <ul><li><a href="javascript:toPage(3)">Back</a></li>
        <li><a href="javascript:toPage(1)">1</a></li>
        <li><a href="javascript:toPage(2)">2</a></li>
        <li><a href="javascript:toPage(3)">3</a></li>
        <li class='active'><a href="#">4</a></li>
        <li><a href="javascript:toPage(5)">5</a></li>
        <li><a href="javascript:toPage(6)">6</a></li>
        <li><a href="javascript:toPage(7)">7</a></li>
        <li><a href="javascript:toPage(5)">Next</a></li>
        </ul></div>
    </div>
    

    使用替换功能可以在Smarty模板系统中做到吗?

1 个答案:

答案 0 :(得分:1)

既然你在评论中提到自己已经实现了(2),那么这是第一次替换的解决方案,有两种方法:

  1. 您可以使用regex_replace

    {$pager->links|regex_replace:'/title="[\w\s]+"/':""}

  2. 或者,您可以直接使用php的preg_replace,如下所示:

    {'/title="[\w\s]+"/'|preg_replace:'':$pager->links}

  3. 一开始看起来很奇怪,但让我解释一下语法:

    Smarty支持使用|(管道)符号将变量/字符串传递给某个php函数。但是,随后使用:(冒号)参数传递其他参数。这与Variable Modifiers

    的语法一致

    例如,如果你想计算字符串上的字母,你可以这样做:

    {$pager->links|strlen}
    

    如果您想查看值foo是否在数组$bar内,您可以这样做:

    {'foo'|in_array:$bar}
    

    所以,对于看起来像func($arg1, $arg2, $arg3)的php函数,这会转换为{$arg1|func:$arg2:$arg3}

    毋庸置疑,首选方法是(1),我只建议第二种方法,因为在我看来,知道它很有意思。