142

テキストの長さを50などに制限し、ディスプレイに3つのドットを配置するにはどうすればよいですか?

{% if myentity.text|length > 50 %}

{% block td_text %} {{ myentity.text}}{% endblock %}

{%endif%}
4

15 に答える 15

224
{{ myentity.text|length > 50 ? myentity.text|slice(0, 50) ~ '...' : myentity.text  }}

Twig 1.6が必要です

于 2012-10-30T16:06:53.803 に答える
123

twig の truncate または wordwrap フィルターを使用しないのはなぜですか? 小枝拡張機能に属し、lib は Symfony2.0 の一部です。

{{ text|truncate(50) }}
于 2012-10-30T16:43:40.720 に答える
37

もう1つは次のとおりです。

{{ myentity.text[:50] ~ '...' }}
于 2013-06-15T00:00:32.337 に答える
19

これは非常に古い質問であることは知っていますが、twig 1.6 からスライス フィルターを使用できます。

{{ myentity.text|slice(0, 50) ~ '...' }}

省略記号などを追加する場合は、チルダの 2 番目の部分はオプションです。

編集:悪いことに、最も投票された回答がスライスフィルターを利用していることがわかります。

于 2016-05-11T21:15:56.220 に答える
6

さらに洗練された解決策は、(文字数ではなく) 単語数でテキストを制限することです。これにより、見苦しいティアスルー (「Stackov...」など) が防止されます。

10 語を超えるテキスト ブロックのみを短縮する例を次に示します。

{% set text = myentity.text |split(' ') %} 

{% if text|length > 10 %} 
    {% for t in text|slice(0, 10) %}
        {{ t }} 
    {% endfor %}
    ...
{% else %}
    {{ text|join(' ') }}
{% endif %}
于 2015-12-01T11:50:30.353 に答える
2

以下の方法で制限できます。1 つ目は開始インデックスで、2 つ目は文字数です。

**{{ results['text'][4:2] }}**
于 2014-12-10T13:50:32.893 に答える
0

同じ目的でこの単純なマルコを書きました。

{%- 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) }}
于 2015-09-11T05:47:44.170 に答える