2013-10-21 150 views
9

如何限制字符串長度?我從我的數據庫中獲取描述值,但我想只有顯示一些特定字符。限制字符串樹枝

  • 我該如何在我的樹枝模板中做到這一點?
  • 在我的控制器內部做更好嗎?

回答

10

嘗試截斷功能:

首先,你需要激活文本擴展

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

然後,您可以將您的嫩枝模板中調用truncate()幫手如下:

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

應該不會出現管道和過濾器名稱之間的空間:'| truncate',否則twig會尋找名爲'truncate'的過濾器(前面有空格)。 – Tim

+0

首先,我們必須安裝樹枝擴展庫。這是[這裏](https://github.com/twigphp/Twig-extensions)。 –

21

試試這個:

{{ entity.description|striptags|slice(0, 40) }} 
  1. striptags filter將刪除HTML標籤,這將避免削減標籤2,例如在此基礎情況:Text ... <img src="http://examp
  2. slice filter將削減的文字,只保留40個第一字符
+0

我可以驗證這個作品。我正在創建一個名爲摘錄的內容類型,我需要用最多100個字符的小說明。 –

1

所以,有一對夫婦的上述未給出任何詳細列出的選項,所以這裏的多一點信息:

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

這會將您的文本完全切斷爲100個字符。這裏的問題是,如果第100個字符在一個單詞的中間,那麼這個單詞將被減半。

因此,要解決這個問題,我們可以添加「真」到截斷電話:

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

當我們這樣做,削去會檢查,看看是否我們是在一個字在切割中間如果是的話,它會在該單詞的結尾處切斷字符串。

如果我們還希望截斷可能包含一些HTML字符串,我們需要走第一條帶的標籤:

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

唯一的小缺點,這是我們將失去任何換行符(比如那些內置在段落標籤中的)。如果你截斷一個相對較短的字符串,這可能不是一個問題。

0

我知道這不是對你的具體問題的回答,因爲你想截斷一定數量的字符,但類似的東西也可以用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/

6

我用這個截斷的博客文章,並顯示一個省略號..

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

如果後期摘錄長度大於100個字符,然後slice它在數百字從第一個開始,並附加'...' 否則顯示全文..

+0

'striptags'用於計算字符串的長度,但不能截斷字符串。如果字符串以標籤開始會發生什麼? –

+0

你有什麼建議? –

+1

在第二個'slice'之前應用'striptags'。 –

0

您可以使用此枝條擴展:

使用

{{ 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 }