文字列の長さを制限するにはどうすればよいですか? データベースから説明値を取得していますが、特定の文字数のみを表示したいと考えています。
- 小枝テンプレートでこれを行うにはどうすればよいですか?
- 私のコントローラー内でそれを行う方が良いですか?
これを試して :
{{ entity.description|striptags|slice(0, 40) }}
striptags
フィルターはHTML タグを削除します。これにより、タグを 2 つにカットすることが回避されます。この基本ケースの例:Text ... <img src="http://examp
slice
フィルターはテキストをカットし、最初の 40 文字のみを保持しますTry with Truncate function:
First, you need to activated Text extension:
# app/config/config.yml
services:
twig.extension.text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
Then, you can call truncate()
helper within your Twig template as follow:
{{ variable.description | truncate(100, true) }}
これを使用してブログ投稿を切り捨て、省略記号を表示しました..
{{ post.excerpt|striptags|length > 100 ? post.excerpt|striptags|slice(0, 100) ~ '...' : post.excerpt|striptags }}
投稿の抜粋の長さが 100 文字を超える場合はslice
、最初の文字から始まる 100 文字目に「...」を追加します。それ以外の場合は全文を表示します。
特定の文字数に切り詰めたいため、これは特定の質問に対する回答ではないことはわかっていますが、CSS を使用して同様のことを達成することもできます。つまり、まだ IE8 と IE9 をサポートしていない限り、いくつかの注意事項があります。
text-overflow では、省略値を使用してこれを行うことができます。以下は CSS-TRICKS のサンプルです。
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
これにより、テキストをコンテナーの幅に切り詰めることができますが、特定の文字数については、 TRUNCATE関数を使用した受け入れられた TWIG 解像度が完全に機能します。
参照: https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
上記のリストには詳細が記載されていないオプションがいくつかあります。
{{ variable.description|truncate(100) }}
これにより、テキストが正確に 100 文字で切り取られます。ここでの問題は、100 番目の文字が単語の途中にある場合、その単語が半分にカットされることです。
したがって、これを回避するには、truncate 呼び出しに「true」を追加します。
{{ variable.description|truncate(100, true) }}
これを行うと、truncate はカットオフ ポイントで単語の途中にあるかどうかを確認し、そうであれば、その単語の末尾で文字列をカットします。
HTML を含む可能性のある文字列を切り詰めたい場合は、最初にそれらのタグを削除する必要があります。
{{ (variable.description|striptags)|truncate(100) }}
これの唯一のわずかな欠点は、改行文字 (段落タグに組み込まれているものなど) が失われることです。ただし、比較的短い文字列を切り詰める場合、これは問題にならない可能性があります。