【问题标题】:codeigniter clean urls but passing variables to build page dynamicallycodeigniter clean urls,但传递变量以动态构建页面
【发布时间】:2013-04-15 17:39:56
【问题描述】:

据我了解,在像 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 名称搜索博客文章?

【问题讨论】:

  • 这是不可能的,因为控制器必须解决您通过 GET 发送的数据,您必须在项目的 ID 或名称之间进行选择(或一次 2 个)

标签: codeigniter codeigniter-2


【解决方案1】:

您可以使用 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
        }
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2015-12-17
      相关资源
      最近更新 更多