2017-01-27 73 views
2

我使用默認情況下自動生成的標準Content字段添加一些文本。如何限制字符但保留換行符/格式?

"Content" => "HTMLText" 

如果我使用限制功能e.g

$Content.BigSummary(300) 

這限制了話,但不保留換行符。又名剝離HTML。

通過框架的代碼來看,有ContextSummary()

public function ContextSummary($characters = 500, $string = false, $striphtml = true, $highlight = true, 
      $prefix = "... ", $suffix = "...") 

但是在測試時,使用該上的htmlText場似乎並沒有工作,它限制了字符,但它並沒有讓HTML,除非字段類型爲Text

的htmlText:

$Content.ContextSummary(200, false, false) - 刪除HTML仍然

文字:

$Content.ContextSummary(200, false, false) - 保持HTML(這是我想要什麼)

難道我做錯了什麼?還是有另一個功能可以用來實現我想要的功能?或者創建一個自定義函數?

+2

這是一個奇怪的情況,因爲'ContextSummary'如何限制字符數量並保留HTML,當它可以通過不返回結束標記來很容易地破壞標籤?即使有'
'換行符,您仍然有可能返回'...懶狗

+0

您可能可以通過字數統計實現自己的方法,並且要非常小心不要在最後一個單詞之後過濾出結束標籤(包括嵌套的HTML!) –

+0

Robbie的迴應看起來並不準確。剛剛入侵HTMLTextTest(SS 3.5.1中的第310行)時,ContextSummary()方法似乎考慮了包含標記的字符串,因此只計算非標記字符。 這並不解釋OP的問題,但也有演員考慮到我現在還不完全瞭解。 (請參閱Text和HTMLText中的$ casting數組) – theruss

回答

0

問題在於轉換爲簡單文本並返回html - <br>標籤因我遇到過一次而丟失。這是我用過的類似黑客攻擊。

// override ContextSummary from the Page_Controller 
public function ContextSummary($field = 'Content', $characters = 500, $string = false) { 
    $content = $this->dbObject($field); 
    $content->setValue(str_replace('<br>', '__br__', $content->getValue); 
    $summary = $content->ContextSummary($characters, $string, $stripHtml = false); 
    return str_replace('__br__', '<br>', $summary); 
} 

and use $ContextSummary(Content) instead of $Content.ContextSummary in template 
+0

這是與文本轉換相關的內容,其中br改爲新行char和Convert :: html2raw去除空白。 –

+0

我剛剛給了這個去,它似乎並沒有工作。沒有文字顯示,我看到有一個尾括號缺失(我試圖編輯,但不會讓我),應該是'$ content-> setValue(str_replace('
','__br__',$ content->的getValue))' – ifusion

相關問題