Усеченные слова Джангоса в ветке - PullRequest
0 голосов
/ 06 апреля 2019

У Django есть фильтры с именами truncatewords и truncatewords_html, которые обрезают строку после определенного количества слов. Существует ли подобная функция / каков наилучший способ достижения того же самого? в ветке (symfony в бэкэнде).

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

1 Ответ

1 голос
/ 07 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...