Расширения Twig для сокращения текста?

То, что я ищу, – это то, что ограничивает вывод без разбиения тегов. Предположим, что у меня есть некоторый контент, например, из 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> 

Любые идеи, как это сделать?

Solutions Collecting From Web of "Расширения Twig для сокращения текста?"

Вы должны попробовать доступное расширение ветки для обрезания текста в 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>