我正在尝试学习如何使用代码点火器,但我遇到了一个小问题。与大多数人第一次使用框架时一样,我也在制作博客。我试图让我的视图链接看起来像:http://localhost/blog/view/my-blog-post-title而且我已经走得那么远了。但是,当我遇到实际的视图方法时,我遇到了问题。基本上我是我的博客帖子标题是指我数据库中帖子的第一条记录。但实际标题看起来像我的博客,帖子标题。
那么当原作是我的博客,帖子标题时,如何从my-blog-post-title中获取id,以便我可以从数据库中提取该帖子?或者我应该只使用数字(我不想; _;)。
答案 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");