テキストの長さを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 の truncate または wordwrap フィルターを使用しないのはなぜですか? 小枝拡張機能に属し、lib は Symfony2.0 の一部です。
{{ text|truncate(50) }}
もう1つは次のとおりです。
{{ myentity.text[:50] ~ '...' }}
これは非常に古い質問であることは知っていますが、twig 1.6 からスライス フィルターを使用できます。
{{ myentity.text|slice(0, 50) ~ '...' }}
省略記号などを追加する場合は、チルダの 2 番目の部分はオプションです。
編集:悪いことに、最も投票された回答がスライスフィルターを利用していることがわかります。
さらに洗練された解決策は、(文字数ではなく) 単語数でテキストを制限することです。これにより、見苦しいティアスルー (「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] }}**
同じ目的でこの単純なマルコを書きました。
{%- 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) }}