2014-10-25 11 views
2

Вот что я в настоящее время в моем шаблоне Smarty:С помощью regex заменить систему шаблонов 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.

Вот что я хотел бы, чтобы выглядеть следующим образом:

<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

Не можете ли вы отредактировать выходы '$ pager-> links', прежде чем smarty выведет его? – Deele

+0

Я могу, но я только на самом деле нуждаюсь в изменениях, упомянутых выше, сделанных на одной странице, и есть несколько страниц, которые используют '$ pager-> links' – Username

+0

На самом деле я исправил вторую проблему, просто заменив ее в файле PHP. Но первая проблема все еще нуждается в регулярном выражении. – Username

ответ

1

Поскольку вы упомянули в своих комментариях, что вы достигли (2) по своему усмотрению, вот решение для первой замены, с 2-мя методами:

  1. Вы можете использовать regex_replace:

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

  2. в качестве альтернативы, вы можете использовать непосредственно preg_replace в PHP, как это:

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

Это может показаться странным на первый, но позвольте мне объяснить синтаксис:

Smarty поддерживает передачу переменной/строку в некоторой функции PHP, используя символ | (труба). Тем не менее, дополнительные параметры затем передаются с параметром : (двоеточие). Это соответствует для синтаксиса Variable Modifiers

Например, если вы хотите, чтобы сосчитать буквы на вашей строке, вы могли бы сделать:

{$pager->links|strlen} 

И если вы хотите, чтобы увидеть, если значение foo находится в пределах массив $bar вы могли бы сделать:

{'foo'|in_array:$bar} 

так, для функции PHP, которая выглядит как func($arg1, $arg2, $arg3), это приводит к {$arg1|func:$arg2:$arg3}

Излишне говорить, что предпочтительный метод (1), я предложил только 2-й, потому что, на мой взгляд, интересно знать.