2013-01-14 41 views
-1

我使用CodeIgniter中的模板分析器類爲視圖(MVC)設計師友好的外觀。我有一系列我想要顯示的帖子,但是在首頁上,我只想要顯示帖子的一部分(前200個字符),然後是「更多」鏈接。操作CodeIgniter分析文本

它正在輸出帖子,但似乎忽略PHP substr()函數bc文本全長出來。

裏面的模型類:

function __construct() 
{ 
    parent::__construct(); 
    $this->load->library('parser'); 
    $this->load->model('MPosts'); 
} 

function index() // BASE_URL 
{ 
    $data = array("article_posts" => $this->MPosts->get_posts()); 
    $this->parser->parse('VPosts', $data); 
} 

的視圖中:

<body> 
{article_posts} 
    <h2><a href="posts/post/{postID}">{title}</a></h2> 
    <p><?=substr("{post}", 0, 200);?>...</p> 
    <p><a href="posts/post/{postID}">Read More</a></p> 
    <hr /> 
{/article_posts} 
</body> 
+1

您需要爲您的模型獲取'index()'中文章的'substr()'。然後,只需執行'

{post} ...

' –

+0

您是否指控制器的index()?謝謝。我希望避免這種情況,但看起來我可能不得不這樣做。 – Glyph

+0

你能否改變你的句子「文字全長」,因爲輸出實際上是「{post}」? –

回答

1

由於您使用的是MySQL查詢,以獲取文章,你可以隨時使用SUBSTRING(article_column_name,1,200)只搶到了前200個字符,基本上substr()

參見:https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring

+0

有趣的方法。與傳輸整個數據並截斷PHP端相比,您是否有任何性能方面的反饋? –

+0

工作,謝謝:)這是一種討厭的,我不得不列出所有列,而不是典型的「選擇*從...」。但絕對是目前爲止最優雅的解決方案。 – Glyph

+0

Nvm :)「SELECT *,SUBSTRING(post,1,200)as post .....」只是想通了,我仍然可以使用*。多謝你們。 – Glyph

0

嘗試echo,而不是?=

人們傾向於將代碼留給控制器的構造函數中的load(模型)庫,其中用戶定義的函數將調用對模型文件中實現的用戶定義函數的調用。

+0

也不起作用。我懷疑在CodeIgniter解析之前PHP正在運行。因此substr(「{post}」,0,200)只會導致「{post}」。 – Glyph

+0

就像你的想法非常有想法。涼! –

1

裏面的parser->parse()代碼:

  • CI首先將您的模板通過load->view()處理器傳遞,就像常規視圖一樣(因此它會在您的模板中執行PHP代碼),
  • 然後它通過「{pseudovar}-替代者」。

在這一點上,我敢肯定,你明白的問題:substr()應用到字符串"{post}"

我能想到的這些選項對你的情況:

  • substr()控制器 - 方面,可能是解決您的問題的最快解決方案
  • 刪除解析器層並使用普通ol'PHP代碼,這是很好的
  • 使用第三方超重全功能模板引擎