以下是我目前的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>

我想换两样东西:
我想完成删除the title属性。
无论哪个li具有类active也需要有一个a href
下面是我想要的样子:
<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模板系统中使用其替换功能执行此操作?

最佳答案

既然您在评论中提到您自己实现了(2),下面是第一个替换的解决方案,有两种方法:
您可以使用regex_replace
{$pager->links|regex_replace:'/title="[\w\s]+"/':""}
或者,可以直接使用php的preg_replace,如下所示:
{'/title="[\w\s]+"/'|preg_replace:'':$pager->links}
一开始这可能看起来很奇怪,但让我解释一下语法:
Smarty支持使用|(pipe)符号将变量/字符串传递给某些php函数。但是,其他参数随后与:(冒号)参数一起传递。这与Variable Modifiers的语法一致
例如,如果要计算字符串中的字母数,可以执行以下操作:

{$pager->links|strlen}

如果您想查看值foo是否在数组$bar内,您可以:
{'foo'|in_array:$bar}

因此,对于一个看起来像func($arg1, $arg2, $arg3)的php函数,这将转换为{$arg1|func:$arg2:$arg3}
不用说,首选的方法是(1),我只建议第二种,因为,在我看来,这是有趣的知道。

09-19 12:04