回答:
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text }}
Twig 1.6が必要です
{{ text > 50 ? text|slice(0, 51)|split(' ')|slice(0, -1)|join(' ') ~ '…' : text }}
。…
3つの実際のドット(...
)ではなく省略記号()を使用することもお勧めします
{{ myentity.text[:50] ~ (myentity.text|length > 50 ? '...') }}
|length
最初の後に欠けていますtext
が、それは完璧です、ありがとう!
小枝の切り捨てまたはワードラップフィルターを使用しないのはなぜですか?それは小枝拡張に属し、libは私が見るようにSymfony2.0の一部です。
{{ text|truncate(50) }}
...
、2つ目のパラメータはに設定されなければならないtrue
ような{{ text|truncate(50, true)
require twig/extensions
もう一つは:
{{ 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) }}
text
変数を介したHTMLインジェクションが有効になることに注意してください。
@mshobnr / @olegkhussソリューションを単純なマクロにした:
{% macro trunc(txt, len) -%}
{{ txt|length > len ? txt|slice(0, len) ~ '…' : txt }}
{%- endmacro %}
使用例:
{{ tools.trunc('This is the text to truncate. ', 50) }}
Nbマクロを含むTwigテンプレートをインポートし、次のように「ツール」としてインポートします(Symfony):
{% import "@AppBundle/tools.html.twig" as tools -%}
また、html文字コードを実際の文字に置き換えました。これは、ファイルエンコーディングとしてUTF-8を使用する場合は問題ありません。この方法|raw
では、セキュリティの問題が発生する可能性があるため、使用する必要はありません。
さらに洗練された解決策は、テキストを文字数ではなく単語数で制限することです。これにより、醜いティアスルー(「Stackov ...」など)が防止されます。
以下は、10語を超えるテキストブロックのみを短縮する例です。
{% set text = myentity.text |split(' ') %}
{% if text|length > 10 %}
{% for t in text|slice(0, 10) %}
{{ t }}
{% endfor %}
...
{% else %}
{{ text|join(' ') }}
{% endif %}
以下の方法で制限できます。1つ目は開始インデックスで、2つ目は文字数です。
**{{ results['text'][4:2] }}**
制限に達した後、切り捨てフィルターを使用して文字列を切り取ります
{{ "Hello World!"|truncate(5) }} // default separator is ...
こんにちは...
2番目のパラメーターをtrueに設定することで、truncateに単語全体を保持するように指示することもできます。最後のWordがセパレータにある場合、truncateはWord全体を印刷します。
{{ "Hello World!"|truncate(7, true) }} // preserve words
こんにちは、ハローワールド!
セパレーターを変更する場合は、3番目のパラメーターを希望のセパレーターに設定するだけです。
{{ "Hello World!"|truncate(7, false, "??") }}
こんにちはW ??
私は同じ目的でこのシンプルなマルコを書きました、それが役に立てば幸いです:
{%- macro stringMaxLength(str, maxLength) -%}
{%- if str | length < maxLength -%}
{{ str }}
{%- else -%}
{{ str|slice(0, maxLength) }}...
{%- endif -%}
{%- endmacro -%}
使用例#1(出力:「ここに長い文字列...」):
{{ _self.stringMaxLength("my long string here bla bla bla la", 20) }}
使用例#2(出力: "短い文字列!"):
{{ _self.stringMaxLength("shorter string!", 20) }}
ここで新しい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の「単語境界」設定では何も表示されませんでした)。
HTML文字を使用することをお勧めします
{{ entity.text[:50] }}…
…
です。
...
あり、これは省略です…