0

据我了解,在像 wordpress 这样的 CMS 中,所有页面都是通过 url 发送变量然后将 url 简化为 www.example.com/my-first-blog-post/ 之类的东西来动态构建的。我假设它发送帖子 id 并且不仅仅依赖于博客帖子的 url 名称。

使用 codeigniter,我有我的博客控制器和我的博客模板设置,但是我不确定我将如何实现类似 wordpress 的东西。我需要一个像 www.example.com/my-first-blog/12/ 这样的网址才能传递帖子的 ID。有没有办法隐藏 12 或者我改为通过它的 url 名称搜索博客文章?

4

2 回答 2

0

您可以使用 url 段进行帖子查找。(这些my-first-post就像通常称为 slug 的字符串)。您必须预先生成这些并将它们与帖子一起保存。

您可以使用路由配置$route['404_override']将每个其他不可路由的路径定向到控制器。设置完成后,您将必须使用博客帖子的参数进行查询,如果找到,则为帖子内容提供服务,如果没有,则发送常规 404。像这样:

// application/config/routes.php
$route['404_override'] = 'blog/show_post'; // controller/action

// application/controllers/blog.php
class Blog extrends CI_Controller {
    public function show_post() {
        // get the first segment, the "first-post" from http://example.com/first-post
        $slug = $this->uri->segment(0); 
        $post = $this->posts->find_by_slug($slug); // imaginary posts model with db query
        if (!$post) { // if the post not found by slug
            show_404(); // return 404 as usual
        } else {
            $this->load->view('blog/show', array($post)); // post found, display it
        }
    }
}
于 2013-04-15T19:32:54.843 回答
0

您可以使用 url 段进行帖子查找。(这些 my-first-post 之类的字符串通常称为 slug)。您必须预先生成这些并将它们与帖子一起保存。

您可以使用路由配置的 $route['404_override'] 将每个其他不可路由的路径定向到控制器。设置完成后,您将必须使用博客帖子的参数进行查询,如果找到提供帖子内容,则发送常规 404。类似这样的内容:阅读这篇文章 http://www.obatkesehatanalami.com

于 2016-02-04T09:48:47.573 回答