{strip} <div class="x" > {/strip}
становится
<divclass="x">
И это не то, что кто-то захочет.
Итак, вопрос: есть ли способ сделать это? Воображаемые подходы:
В этой теме на форуме нет решения (кроме – добавить свой собственный тег). Кроме того, пожалуйста, не предлагайте решения в raw PHP или других языках / фреймворках.
Вы можете либо пойти с подходом @ dev, и захватить ваши данные и запустить его через модификатор полосы :
{capture name="spaces"} <div class="x" > ... </div> {/capture} {$smarty.capture.spaces|strip:" "}
или запустить захваченное содержимое с помощью модификатора regex_replace (по существу, делайте то же самое, что и split, но с большим объемом служебных данных):
{$smarty.capture.spaces|regex_replace:"#\s+#":" "}
или добавить новый настраиваемый блок-плагин под названием 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');
к вашей установке.
Чтобы защитить отдельные пространства:
{strip} <div class="first{" "} {"second "} third"> {/strip}
становится
<div class="first second third">
отлично работает для меня с smarty v3.
Назначьте свой код переменной и попробуйте {$articleTitle|strip:' '}