То, что я ищу, – это то, что ограничивает вывод без разбиения тегов. Предположим, что у меня есть некоторый контент, например, из FCK / MCE:
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p> <p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem </p> <p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem </p>
Например, если я сделал что-то вроде {{ output|raw[:10] ~ '...' }}
я бы получил:
<p>lorem i...
Но вместо этого я хотел бы получить:
<p>lorem i...</p>
Любые идеи, как это сделать?
Вы должны попробовать доступное расширение ветки для обрезания текста в Twig & Symfony2.
Ваш текст находится в html, поэтому сначала получите обычный текст, используя фильтр «striptags», затем примените фильтр «truncate» из ветки.
<p>{{ output|striptags|truncate(50, true) }}</p>
но сначала вы должны включить Twig-Text-Extension, как показано ниже.
$twig->addExtension(new Twig_Extensions_Extension_Text());
или в symfony2
// app/config/config.yml services: twig.extension.text: class: Twig_Extensions_Extension_Text tags: - { name: twig.extension }
Ниже приведены параметры фильтра обрезки
1 – только усекать
<p>{{ output|striptags|truncate(50) }}</p>
2 – Установите второй параметр, если хотите сохранить целые слова.
<p>{{ output|striptags|truncate(50, true) }}</p>
3 – Установите третий параметр, если вы хотите использовать свой собственный разделитель вместо «…»
<p>{{ output|striptags|truncate(50, true, ".........") }}</p>
для более подробной информации о расширении текста twig посетите http://twig.sensiolabs.org/doc/extensions/text.html
Если вы уверены, что он начинается с <p>
и заканчивается на </p>
используйте это:
{{ output|raw[:10] ~ '...' }}</p>
Если вы хотите найти и заменить что-то в своем выпуске, вы можете
<p>{{ (output|replace({'<p>': '', '</p>': ''}))|raw[:10] ~ '...' }}</p>