web-dev-qa-db-ja.com

制限文字列Twig

文字列の長さを制限するにはどうすればよいですか?データベースから説明値を取得していますが、のみ特定の文字数を表示したいと思います。

  • twigテンプレートでこれを行うにはどうすればよいですか?
  • 私のコントローラー内でそれを行う方が良いですか?
11
Ramón Devesa

切り捨て関数で試してください:

まず、アクティブ化する必要がありますテキスト拡張

_# app/config/config.yml
  services:
    twig.extension.text:
        class: Twig_Extensions_Extension_Text
        tags:
            - { name: twig.extension }
_

次に、次のように、Twigテンプレート内でtruncate()ヘルパーを呼び出すことができます。

_{{ variable.description | truncate(100, true) }}
_
12
user2359967

これを試して :

{{ entity.description|striptags|slice(0, 40) }}
  1. striptags filter はHTMLタグを削除します。これにより、2でタグが切り取られるのを回避できます。この基本ケースの例:Text ... <img src="http://examp
  2. slice filter はテキストを切り取り、最初の40文字だけを残します
22
A.L

これを使用して、ブログ投稿を切り捨て、省略記号を表示しました。

{{ post.excerpt|striptags|length > 100 ? post.excerpt|striptags|slice(0, 100) ~ '...' : post.excerpt|striptags }}

投稿の抜粋の長さが100文字を超える場合は、最初の文字から始まる100文字でsliceし、「...」を追加します。それ以外の場合は、全文を表示します。

11
Raja Khoury

したがって、詳細が示されていない上記のオプションがいくつかあるので、ここにもう少し情報があります。

{{ variable.description|truncate(100) }}

これにより、テキストが100文字で正確に切り捨てられます。ここでの問題は、100番目の文字が単語の途中にある場合、その単語が半分にカットされることです。

したがって、これを回避するために、切り捨て呼び出しに「true」を追加できます。

{{ variable.description|truncate(100, true) }}

これを行うと、truncateは、カットオフポイントで単語の途中にいるかどうかを確認し、途中にある場合は、その単語の最後にある文字列を切り取ります。

HTMLを含む可能性のある文字列も切り捨てる場合は、最初にそれらのタグを削除する必要があります。

{{ (variable.description|striptags)|truncate(100) }}

これの唯一のわずかな欠点は、改行文字(段落タグに組み込まれている文字など)が失われることです。ただし、比較的短い文字列を切り捨てる場合、これはおそらく問題にはなりません。

1
lordchancellor

特定の文字数に切り捨てたいので、これは特定の質問に対する答えではないことを私は知っていますが、CSSを使用して同様のことを実現することもできます。つまり、IE8とIE9をまだサポートしていない限り、いくつかの注意点があります。

テキストオーバーフローでは、これは省略記号の値を使用して実行できます。これがCSS-TRICKSからのサンプルです:

.truncate {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: Ellipsis;
}

これにより、テキストをコンテナの幅に切り捨てることができますが、特定の文字数については、受け入れられたTWIG解像度[〜#〜] truncate [ 〜#〜]関数は完全に機能します。

参照:https://css-tricks.com/snippets/css/truncate-string-with-Ellipsis/

0
Ron

これを使用できますTwig拡張子:

使用法

{{ text|Ellipsis(20) }}
{{ text|Ellipsis(20, '///') }}

namespace AppBundle\Twig;

//src/AppBundle/Twig/TwigTextExtension.php
class TwigTextExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('Ellipsis', array($this, 'ellipsisFilter')),
        );
    }

    public function ellipsisFilter($text, $maxLen = 50, $Ellipsis = '...')
    {
        if ( strlen($text) <= $maxLen)
            return $text;
        return substr($text, 0, $maxLen-3).$Ellipsis;

    }
}

Services.ymlにサービスとして登録します

services:
    twig.extension.twigtext:
        class: AppBundle\Twig\TwigTextExtension
        tags:
            - { name: twig.extension }
0
sotn0r