Как я могу ограничить длину строки? Я получаю значение описания из своей базы данных, но хочу отображать только определенное количество символов.
- Как я могу сделать это в моем шаблоне ветки?
- Лучше сделать это в моем контроллере?
Как я могу ограничить длину строки? Я получаю значение описания из своей базы данных, но хочу отображать только определенное количество символов.
Попробуйте использовать функцию Truncate:
Во-первых, вам нужно активировать Текстовое расширение:
# app/config/config.yml
services:
twig.extension.text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
Затем вы можете вызвать помощника truncate()
в своем шаблоне Twig следующим образом:
{{ variable.description | truncate(100, true) }}
Попробуй это :
{{ entity.description|striptags|slice(0, 40) }}
striptags
удалит теги HTML, это позволит избежать вырезания тега в 2, пример этого базового случая: Text ... <img src="http://examp
slice
обрежет текст, оставив только первые 40 символов.Я использовал это, чтобы обрезать сообщения в блоге и показать многоточие.
{{ post.excerpt|striptags|length > 100 ? post.excerpt|striptags|slice(0, 100) ~ '...' : post.excerpt|striptags }}
Если длина выдержки сообщения больше 100 символов, то slice
она начинается со 100-го символа, начиная с первого, и добавляется '...' В противном случае показать полный текст..
striptags
используется для вычисления длины строки, но не для усечения строки. Что произойдет, если строка начинается с тега? 11.01.2017 striptags
перед вторым slice
. 09.02.2017 Итак, есть несколько вариантов, перечисленных выше, которые не имеют подробностей, поэтому вот немного дополнительной информации:
{{ variable.description|truncate(100) }}
Это обрежет ваш текст ровно на 100 символов. Проблема здесь в том, что если 100-й символ находится в середине слова, это слово будет сокращено пополам.
Поэтому, чтобы обойти это, мы можем добавить «true» в вызов truncate:
{{ variable.description|truncate(100, true) }}
Когда мы это сделаем, truncate проверит, находимся ли мы в середине слова в точке отсечки, и если да, то обрежет строку в конце этого слова.
Если мы также хотим обрезать строку, которая может содержать некоторый HTML, нам нужно сначала удалить эти теги:
{{ (variable.description|striptags)|truncate(100) }}
Единственным небольшим недостатком этого является то, что мы потеряем любые символы новой строки (например, встроенные в теги абзаца). Однако, если вы усекаете относительно короткую строку, это, возможно, не будет проблемой.
Я знаю, что это не ответ на ваш конкретный вопрос, так как вы хотите урезать до определенного количества символов, но нечто подобное можно достичь и с помощью CSS. То есть, если вы все еще не поддерживаете IE8 и IE9, есть некоторые предостережения.
С text-overflow это можно сделать, используя значение эллипсов. Вот пример из CSS-TRICKS:
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Это позволит вам обрезать текст до ширины контейнера, ОДНАКО, для определенного количества символов принятое разрешение TWIG с функцией TRUNCATE работает отлично.
ССЫЛКА: https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
Вы можете использовать это расширение Twig:
Применение
{{ text|ellipsis(20) }}
{{ text|ellipsis(20, '///') }}
namespace AppBundle\Twig;
//src/AppBundle/Twig/TwigTextExtension.php
class TwigTextExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('ellipsis', array($this, 'ellipsisFilter')),
);
}
public function ellipsisFilter($text, $maxLen = 50, $ellipsis = '...')
{
if ( strlen($text) <= $maxLen)
return $text;
return substr($text, 0, $maxLen-3).$ellipsis;
}
}
Зарегистрируйте его как сервис в services.yml
services:
twig.extension.twigtext:
class: AppBundle\Twig\TwigTextExtension
tags:
- { name: twig.extension }
|truncate
, иначе twig ищет фильтр с именем `truncate` (с предшествующим пробелом). 09.04.2014