#php #smarty #strip
#php #умный #Стриптиз
Вопрос:
{strip}
<div
class="x"
>
{/strip}
становится
<divclass="x">
И это не то, что кто-то хотел бы.
Итак, вопрос: есть ли какой-либо способ избежать этого? Воображаемые подходы:
- замените новые строки пробелами, используя параметры или другие интеллектуальные функции
- добавьте защищенные пространства, которые не удаляются / не обрезаются
В этой теме на их форуме нет решения (кроме — добавьте свой собственный пользовательский тег). Кроме того, пожалуйста, не предлагайте решения на необработанном PHP или любых других языках / фреймворках.
Комментарии:
2.@Tomalak Geret’kal функциональная полоса, а не модификатор 😉
3. Уважаемый @c69, я отредактировал ваш вопрос, поскольку у меня была та же проблема, но «превращение новых строк в пробелы» не пришло мне в голову в качестве поискового запроса. Надеюсь, все в порядке.
Ответ №1:
Вы можете либо использовать подход @dev, захватить ваши данные и запустить их через модификатор strip:
{capture name="spaces"}
<div
class="x"
> ... </div>
{/capture}
{$smarty.capture.spaces|strip:" "}
или запустите захваченный контент через модификатор regex_replace (по сути, делая то же самое, что и split, но с большими накладными расходами):
{$smarty.capture.spaces|regex_replace:"#s #":" "}
или добавьте новый плагин пользовательского блока под названием trimwhitespace, который использует выходной фильтр trimwhitespace:
<?php
function smarty_block_trimwhitespace($params, $content, Smarty_Internal_Template $template, amp;$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>
теги or . Если они вам нужны, вы хотите использовать обернутый outputfilter.
Если вы хотите, чтобы все ваши выходные данные проходили через этот фильтр, забудьте об изменении ваших шаблонов и добавьте $smarty->loadFilter('output', 'trimwhitespace');
их в настройки.
Ответ №2:
Для защиты отдельных пробелов:
{strip}
<div class="first{" "}
{"second "}
third">
{/strip}
становится
<div class="first second third">
у меня отлично работает с smarty v3.
Комментарии:
1. Работает также для Smarty v2.
2. Спасибо, вы знаете, можно ли воздержаться от этого в каждом шаблоне, а лучше сверху
header.tpl
и снизуfooter.tpl
. Кажется, что теги Smarty не передаются через шаблоны?
Ответ №3:
Присвойте свой код переменной и попробуйте {$articleTitle|strip:'amp;nbsp;'}