У Django есть фильтр с именем truncatewords и truncatewords_html, что Усекает строку после определенного количества слов. Есть ли аналогичная функция / как лучше всего добиться того же в twig (symfony в бэкенде).
Функция среза Twigs - это не то, что я ищу, поскольку она не учитывает пробелы/слова.
нарезка после разделения на слова, а затем снова объединение может сработать, не так ли?
Например, «Это предложение», вы хотите разделить его, а затем снова соединить?
Я предполагаю, что Мориц хочет создать тизерный текст и не хочет обрезать слова.






Вы можете создать пользовательский фильтр 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-тегов и обрезать в ней только слова, но, по крайней мере, у вас есть отправная точка.
Дайте образец входных данных и ожидаемый результат. Многие из разработчиков django могут быть не знакомы с
Twigs