テキストの長さ(50など)を制限し、ディスプレイに3つのドットを配置するにはどうすればよいですか?
{% if myentity.text|length > 50 %}
{% block td_text %} {{ myentity.text}}{% endblock %}
{%endif%}
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
Twig 1.6 が必要です
twigの切り捨てフィルターまたはワードラップフィルターを使用しないのはなぜですか? twig extensions に属し、libはSymfony2.0の一部です。
{{ text|truncate(50) }}
もう一つは:
{{ myentity.text[:50] ~ '...' }}
これは非常に古い質問ですが、twig 1.6からはスライスフィルターを使用できます。
{{ myentity.text|slice(0, 50) ~ '...' }}
チルダの2番目の部分は、省略記号などを追加する場合のオプションです。
編集:私の悪い、私は、最も投票された答えがスライスフィルターを利用するのを見ます。
名前付きUTF-8省略記号を使用した@olegkhussソリューション:{{ (my.text|length > 50 ? my.text|slice(0, 50) ~ '…' : my.text) }}
さらに洗練された解決策は、文字数ではなく単語数でテキストを制限することです。これにより、tearいティアスルーが防止されます(例:「Stackov ...」)。
以下に、10ワードより長いテキストブロックのみを短縮する例を示します。
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
@mshobnr/@olegkhussソリューションを単純なマクロにしたもの:
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
使用例:
{{ tools.trunc('This is the text to truncate. ', 50) }}
N.b.マクロを含むTwigテンプレートをインポートし、次のような「ツール」としてインポートします(Symfony):
{% import "@AppBundle/tools.html.twig" as tools -%}
また、html文字コードを実際の文字に置き換えました。これは、ファイルエンコーディングとしてUTF-8を使用する場合は問題ありません。この方法では、|raw
を使用する必要はありません(セキュリティ上の問題を引き起こす可能性があるため)。
次の方法で制限できます。 1つ目は開始インデックスで、2つ目は文字数です。
**{{ results['text'][4:2] }}**
ここでの新しいDrupal 8機能のBugginess *は、私たちに独自の記述を促しました。
<a href="{{ view_node }}">{% if title|length > 32 %}{% set title_array = title|split(' ') %}{% set title_Word_count = 0 %}{% for ta in title_array %}{% set Word_count = ta|length %}{% if title_Word_count < 32 %}{% set title_Word_count = title_Word_count + Word_count %}{{ ta }} {% endif %}{% endfor %}...{% else %}{{ title }}{% endif %}</a>
これは、単語と文字の両方を考慮します(* D8の「単語境界」設定には何も表示されませんでした)。
私は同じ目的でこの簡単なマルコを書きました。
{%- macro stringMaxLength(str, maxLength) -%}
{%- if str | length < maxLength -%}
{{ str }}
{%- else -%}
{{ str|slice(0, maxLength) }}...
{%- endif -%}
{%- endmacro -%}
使用例#1(出力:「my long string here ...」):
{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}
使用例#2(出力:「短い文字列!」):
{{ _self.stringMaxLength("shorter string!", 20) }}
HTML文字を使用することをお勧めします
{{ entity.text[:50] }}…