2012-03-08 16 views
1

我正在使用CodeIgniter開發一個新的PHP項目,我對此有幾個疑問。從CodeIgniter的foreach和路由中獲取ID,但沒有一些字母

1 -我創建了新聞腳本,現在我做了後端,我在前端工作。在前端,我已經設置了最新消息,但是我想在一個新聞中顯示多少評論。我使用了foreach,但我不知道MVC框架中接下來要做的最好的方法是什麼。

<?php 
foreach ($query as $news) 
{ 
    echo $news->title . "<br>" . $news->content . "<br>"; 
    $commentnum = $this->db->select('id_comment, id_news')->where('id_news', $news->id)->get('comments'); 
    echo $commentnum->num_rows(); 
} 
?> 

好的..這是我在其他項目中使用的一段代碼。在MVC模式下使用該代碼的最佳方式是什麼?

2 -在這個新聞腳本中我有一些名爲News的控制器,它裏面有函數post,cats和tags。和代碼,我現在使用它,而不是作品就像我想:

$route['news/(:any)'] = "news/post/$1"; 

那麼如何從路線排除後,貓和標籤 - >如果鍵入news/tags/first,先不錯誤提示標籤,該帖子不存在。怎麼做?

回答

0

如果你想堅持到MVC模式(和我會建議你做,因爲它使事情在管理你的應用程序,或更新它的外觀從長遠來看更容易),然後進行以下操作:

代替echo將所有'新聞'信息輸出,將其存儲到數組中,並將該數組傳遞給VIEW。讓VIEW然後通過該數組(相關新聞&相關評論)並輸出它。

這樣你的邏輯組裝這個新聞/評論結構仍然在控制器,並且該視圖只是吐出數據,並沒有通過$query對象的ITERATE。

這創建了一個乾淨的控制器分離,型號&視圖。

例子:

foreach ($query as $news) 
{ 
    $comments = $this->db->select('id_comment, id_news')->where('id_news', $news->id)->get('comments');   
    $data['news'][$news->id]['title'] = $news->title; 
    $data['news'][$news->id]['content'] = $news->content; 
    $data['news'][$news->id]['num_comments'] = $comments->num_rows(); 

    if($data['news'][$news->id]['num_comments'] > 0){ 
     foreach ($comments as $entry){ 
       $data['news'][$news->id][$entry->id]['comment'] = $entry->content; 
     } 
    } 
} 

至於你的路由問題而言,你需要正確的路線的URI來在你的控制器的方法:

$route['tags/(:any)'] = "news/tags/$1"; 
$route['(:any)'] = "news/posts/$1"; 

$route['(:any)']我沒有親自嘗試過,我建議你格式化你的URI像http://domain.com/post/name-of-post而不是http://domain.com/name-of-post,它會j因爲上面的路由$route['(:any)']強制你創建CUSTOM路由(白名單),如tags/links/users/etc;

+0

來自example的代碼在控制器中?我從來沒有在$ data中使用多於一個[]的編程,所以我不知道如何在視圖中調用它。 關於第2部分我創建了主控制器新聞,我希望URL有domain.com/title-of-article或domain.com/tags/first。所以在地址是「標籤」和路線的時候會出現問題,這是文章的標題,但我想將它作爲標籤(這是控制器中的另一個功能)。 – user1257255 2012-03-08 16:15:15

+0

@ user1257255,是的,上面的代碼進入你的控制器,然後你可以使用變量'$ news [0] ['title']'從視圖中輕鬆地調用數據,該變量將輸出第一條新聞條目的標題,當然你可以'foreach' $ news'數組並輸出它,就像你現在使用'$ query'一樣。 – Jakub 2012-03-08 16:25:27

相關問題