2011-10-08 102 views
-1

我想學習如何使用代碼點火器,但我遇到了一個小問題。和大多數人第一次使用框架一樣,我也在製作博客。我試圖讓我的視圖鏈接看起來像:http://localhost/blog/view/my-blog-post-title,我已經得到了那麼多。但是當我看到實際的視圖方法時,我遇到了問題。基本上我是我的博客後標題是指我的數據庫中的職位的第一條記錄。但實際標題看起來像我的博客,帖子標題Codeigniter如何從url_title()獲取原始字符串?

那麼,如何從我的博客後標題時獲得ID原始爲我的博客,帖子標題,所以我可以從數據庫中拉出該帖子?或者我應該只使用數字(我不想; _;)。

回答

3

嗯,我認爲最好的解決方案和更簡單的方法是在你的職位表中創建一個列,一些所謂的「鼻涕蟲」,其中包含了url_title()輸出(你創建你的文章的那一刻,你將這個值保存在這個數據庫列以及其他信息中),然後用這個查詢來代替這個更復雜的方法。

所以,你搶的URL的最後一段,或者通過$這個 - > URI->段(3)或只是通過將整個URI到你的控制器的方法,並針對查詢該列:

class Blog extends CI_Controller { 

    public function view($slug) 
    { 
    $this->load->model('blog_model'); 
    $data['posts'] = $this->blog_model->search_slug($slug); 
    $this->load->view('myview',$data); 
    } 
} 

型號:

function search_slug($slug) 
{ 
    $this->db->select('id,title') 
      ->from('posts') 
      ->where('slug',$slug); 
    $query = $this->db->get(); 
    return $query->row(); 
} 

查看 'myview.php':

echo $posts->id; 
echo $posts->title; 
+0

我使用相同的方法,幷包含帖子ID,所以我的url看起來像'mysite/16-my-post-title',所以我可以使用'$ url = explode($ this-> uri-> segment(1 ), ' - '); $ id = $ url [0];' – Vina

+0

是的,我經常做類似的事情,無論是id/slug-title還是/ id:slug-title –

+0

我甚至都沒有想過這樣做,謝謝你的小費! – Brandon

0

您應該能夠使用像

$parts = explode("/",$_SERVER['REQUEST_URI']); 
$title=$parts[(count($parts)-1)]; 

把你的網址到一個數組,然後搶在最後一節的標題。字符串用「」替換「 - 」,然後在數據庫中搜索標題,然後執行%&。不知道這是最好的方法,但應該工作。

+0

是不是真的是我要問笨採取的最後一部分一個方法的參數,所以我已經有了。不過謝謝你的回覆,我會試試%like%的東西。 – Brandon

0

這個代碼可以讓你儘可能提取標題:

$url_string = "view/my-blog-post-title"; 

function getOriginal($url_string) { 
    $url_parts = explode("/",$url_string); 
    $url_title = $url_parts[1]; 
    $title_parts = array_map("ucfirst", 
      explode("-",$url_title)); 
    return implode(" ",$title_parts); 
} 

echo getOriginal($url_string); 

將輸出:

我的博客文章標題

棘手的部分是往哪兒插逗號(,)。這很棘手,因爲博客文章標題可能會有更多的詞,如我的博客後標題一些其他詞或我的博客標題詞詞詞。逗號可以去任何地方。

如果在我的博客(我的博客是常量)之後插入逗號總是常量,那麼在調用getOriginai(..)之後,您只需執行str_replace;

echo str_replace("My Blog","My Blog,","My Blog Post Title");