{strip}: как избежать непреднамеренного удаления пробелов? - PullRequest
2 голосов
/ 01 ноября 2011
{strip}
<div
     class="x"
>
{/strip}

становится

<divclass="x">

И это не то, что кто-то хотел бы.

Итак, вопрос: есть ли способ избежать этого?Предполагаемые подходы:

  • заменить новые строки пробелами, используя параметры или другие smarty-функции
  • добавить защищенные пробелы, которые не удалены / обрезаны

В этой теме на их форуме нет решения (кроме - добавьте свой собственный тег).Также, пожалуйста, не предлагайте решения на необработанном PHP или любых других языках / платформах.

Ответы [ 3 ]

4 голосов
/ 01 ноября 2011

Вы можете использовать подход @ dev и захватить свои данные и запустить их через модификатор полосы :

{capture name="spaces"}
<div
     class="x"
> ... </div>
{/capture}
{$smarty.capture.spaces|strip:" "}

или запустить захваченный контент через модификатор regex_replace (по сути, делает то же самое, что и split, но с дополнительными издержками):

{$smarty.capture.spaces|regex_replace:"#\s+#":" "}

или добавление нового плагина пользовательского блока под названием trimwhitespace, который делаетиспользование outputfilter trimwhitespace :

<?php
function smarty_block_trimwhitespace($params, $content, Smarty_Internal_Template $template, &$repeat)
{
  require_once SMARTY_PLUGINS_DIR . 'outputfilter.trimwhitespace.php';
  return smarty_outputfilter_trimwhitespace($content, $template->smarty);
}

вызовите этот файл block.trimwhitespace.php и поместите его в plugins_dir.используйте его в своем шаблоне:

{trimwhitespace}
<div
     class="x"
> ... </div>
{/trimwhitespace}

Хотя оба подхода-модификатора отлично подойдут для простых вещей HTML, они будут разбиты на контент, включающий теги <script> или <pre>.Если вам это нужно, вы можете использовать упакованный выходной фильтр.

Если вы хотите, чтобы весь ваш вывод проходил через этот фильтр, не забудьте изменить ваши шаблоны и добавьте $smarty->loadFilter('output', 'trimwhitespace'); в ваши настройки.

3 голосов
/ 27 марта 2012

Для защиты отдельных помещений:

{strip}
<div class="first{" "}
  {"second "}
  third">
{/strip}

становится

<div class="first second third">

отлично работает у меня с smarty v3.

1 голос
/ 01 ноября 2011

Присвойте свой код переменной и попробуйте {$articleTitle|strip:'&nbsp;'}

...