Djangos усекает слова в twig

#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 и обрезать только слова внутри нее, но, по крайней мере, у вас есть отправная точка.