Удалите лишние пробелы в Smarty - PullRequest
2 голосов
/ 09 февраля 2012

Мы интенсивно используем Smarty для всех наших шаблонов. Я наблюдал следующую ситуацию:

Когда мой шаблон Smarty похож на следующее:

<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>

Окончательный HTML-код, который доставляется в браузер:

<li>
                            65
                        <br><span>SUBTEXT</span>
        </li>

Я бы ожидал, что он будет более чистым и будет выглядеть примерно так:

<li>
    65<br><span>SUBTEXT</span>
</li>

или лучше:

<li>65<br><span>SUBTEXT</span></li>

В любом случае, я могу сделать это с некоторыми настройками конфигурации в Smarty 3? Любая настройка для форматирования и очистки окончательного созданного HTML?

Спасибо

Ответы [ 3 ]

7 голосов
/ 09 февраля 2012

Вы можете использовать {strip}, чтобы удалить все пробелы и возврат каретки в части шаблона:

http://www.smarty.net/docsv2/en/language.function.strip.tpl

{strip}
<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>
{/strip}

Вывод должен быть:

<li>65<br><span>SUBTEXT</span></li>

Это может быть неудобно, но имейте в виду, что пробелы и символы новой строки оказывают существенное влияние / важность на вывод HTML, и их удаление во всем мире может иметь непредвиденные побочные эффекты.

6 голосов
/ 09 февраля 2012

Вы можете загрузить выходной фильтр trimwhitespace . Он удаляет комментарии HTML (кроме ConditionalComments) и уменьшает количество пробелов до одного пробела везде, но <script>, <pre>, <textarea>.

Вы можете легко убрать пробел между <two> <tags>, изменив строку 62. change

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',

до

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1\2',

и все готово.

Фильтры вывода запускаются ПОСЛЕ того, как шаблон отображается и ДО его отправки в браузер. {strip} запускается до обработки шаблона - это время компиляции. Итак, следующее

{$some_var = "Hello\nworld"}
{strip}
  -
  {$}
  -
{/strip}

выдаст

-hello
world-

пока выходной фильтр вернет

- hello world -
1 голос
/ 08 августа 2013

Если вы хотите удалить пробелы из всех файлов, просто позвоните:

$oSmarty->loadFilter("output", "trimwhitespace");
$oSmarty->display($display);

Дополнительная информация о PHP-классе: smarty_outputfilter_trimwhitespace и документации: http://www.smarty.net/docs/en/advanced.features.outputfilters.tpl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...