Codeigniter如何从url_title()中获取原始字符串?

时间:2011-10-08 00:52:00

标签: php codeigniter url seo

我正在尝试学习如何使用代码点火器,但我遇到了一个小问题。与大多数人第一次使用框架时一样,我也在制作博客。我试图让我的视图链接看起来像:http://localhost/blog/view/my-blog-post-title而且我已经走得那么远了。但是,当我遇到实际的视图方法时,我遇到了问题。基本上我是我的博客帖子标题是指我数据库中帖子的第一条记录。但实际标题看起来像我的博客,帖子标题

那么当原作是我的博客,帖子标题时,如何从my-blog-post-title中获取id,以便我可以从数据库中提取该帖子?或者我应该只使用数字(我不想; _;)。

3 个答案:

答案 0 :(得分:3)

嗯,我认为最好的解决方案和更简单的方法是在posts表中创建一个名为“slug”的列,其中包含url_title()输出(创建文章的那一刻,你保存了这个值在这个db列以及其他信息中),并查询它而不是使用这个更复杂的方法。

因此,您可以通过$ this-> uri-> segment(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;

答案 1 :(得分:0)

您应该可以使用类似

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

将您的网址转换为数组,然后从上一部分获取标题。 string将“ - ”替换为“”,然后执行%like&在您的数据库中搜索标题。不确定这是最好的方法,但应该有效。

答案 2 :(得分: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);

将输出:

  

我的博客帖子标题

棘手的部分是插入逗号(,)的位置。这很棘手,因为博客文章标题可能有更多的单词,如my-blog-post-title-some-other-words或my-blog-title-word-word-word。逗号可以去任何地方。

如果在My Blog(我的博客不变)之后插入逗号总是不变的那么你只需在调用getOriginai(..)后执行str_replace;

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