2011-10-08 100 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");