Вы можете создать пользовательский фильтр Twig , который будет использовать регулярное выражение, чтобы получить то, что вы хотите:
class TruncateWordsExtension extends AbstractExtension
{
public function getFilters()
{
return [
new TwigFilter('truncatewords', [$this, 'truncateWords']),
];
}
public function truncateWords($text, $maxWords)
{
$regex = '/((\w+)[\W\s]+){0,' . ($maxWords - 1) . '}(\w+)/';
preg_match($regex, $text, $matches);
return $matches[0] ?? '';
}
}
truncatewords_html
будет немного сложнее, при условии, что вы хотитесохраняйте структуру тегов HTML и обрезайте в ней только слова, но, по крайней мере, у вас есть отправная точка.