#php #django #symfony #twig
#php #django #symfony #twig
Вопрос:
В Django есть фильтр с именем truncatewords
, и truncatewords_html
, который усекает строку после определенного количества слов. Есть ли аналогичная функция / каков наилучший способ добиться того же в twig (symfony в серверной части).
Функция среза Twigs — это не то, что я ищу, поскольку она не учитывает пробелы / слова.
Комментарии:
1. Предоставьте пример ввода и ожидаемый результат. Многие разработчики django могут не знать
Twigs
2. нарезка после разделения на слова, а затем объединение снова может сработать, нет?
3. Например, «Это предложение», вы хотите разделить его, а затем снова соединить их?
4. Я предполагаю, что Мориц хочет сгенерировать текст тизера и не хочет обрезать слова.
Ответ №1:
Вы могли бы создать пользовательский фильтр Twig, который будет использовать регулярное выражение для получения того, что вы хотите:
class TruncateWordsExtension extends AbstractExtension
{
public function getFilters()
{
return [
new TwigFilter('truncatewords', [$this, 'truncateWords']),
];
}
public function truncateWords($text, $maxWords)
{
$regex = '/((w )[Ws] ){0,' . ($maxWords - 1) . '}(w )/';
preg_match($regex, $text, $matches);
return $matches[0] ?? '';
}
}
truncatewords_html
Будет немного сложнее, если предположить, что вы хотите сохранить структуру тегов HTML и обрезать только слова внутри нее, но, по крайней мере, у вас есть отправная точка.