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

У Django есть фильтр с именем truncatewords и truncatewords_html, что Усекает строку после определенного количества слов. Есть ли аналогичная функция / как лучше всего добиться того же в twig (symfony в бэкенде).

Функция среза Twigs - это не то, что я ищу, поскольку она не учитывает пробелы/слова.

Дайте образец входных данных и ожидаемый результат. Многие из разработчиков django могут быть не знакомы с Twigs

shafik 06.04.2019 15:38

нарезка после разделения на слова, а затем снова объединение может сработать, не так ли?

Jakumi 06.04.2019 15:38

Например, «Это предложение», вы хотите разделить его, а затем снова соединить?

shafik 06.04.2019 15:40

Я предполагаю, что Мориц хочет создать тизерный текст и не хочет обрезать слова.

Jakumi 06.04.2019 15:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме