lferlu 发表于 2010-3-23 17:12:54

动态url alias功能

这里请教一下大家,关于CI,如何完成查询资料库后的url alias~

普通的几个url alias,可以通过config/route.php,这个手册上有,可是这里由于别名需要使用者自己设置,而且数目较多,所以需要通过查询数据库来完成。

能不能通过hooks较好的和系统融合完成?不影响以后的ci升级?

看看大家有没有什么好的方法?

saturn 发表于 2010-3-24 13:58:31

我也一直在寻找和研究此问题的好的解决方案。

目前我所能想到的,并且不触动CI核心库的方案是:
在你需要实现动态路由的控制器里面,写一个路由分发函数。举个例子,比如用户在后台的选项中定义了一个这样的URL规则(也就是定义若干wildcard):
archive/{year}-{month}-{day}/{post_slug}

那么,我们可以将其首先保存到数据库中,然后在显示和读取URL相关内容时,根据这个路由规则显示需要的内容。

function _dispatcher()
{
   $url_pattern = $this->uri->uri_string();
   //下面要做的就是分析找个uri
   //对于不同类型的uri就redirect到不同的函数中
}

snllll 发表于 2010-4-11 04:00:49

关注!

表示关注——万恶的10字符限制~~~

lferlu 发表于 2010-4-23 14:48:43

很感谢,saturn
你是将所有路径都指向一个地址然后通过这地址进行转址,的确是个巧妙的方式~

scckfzx 发表于 2010-5-3 23:05:22

本帖最后由 scckfzx 于 2010-5-3 23:28 编辑

我也一直在寻找和研究此问题的好的解决方案。

目前我所能想到的,并且不触动CI核心库的方案是:
在你需要 ...
saturn 发表于 2010-3-24 13:58 http://www.codeigniter.org.cn/forums/images/common/back.gif


    这样岂不是产生无数的302重定向?这样对SEO非常非常的不利吧。我觉得还是在每个控制器增加_remap方法对URL参数进行判断,然后调用相应的方法,这样唯一的要求就是URL段中必须保留控制器的名称,只能对URL片段中方法部分进行自定义

saturn 发表于 2010-5-6 01:22:32

回复 5# scckfzx


    看来你没有完全明白我的意思,这里只是函数的分发,并没有产生真正的http转向。其实和你写的是一个道理。

ihymk 发表于 2010-5-6 12:14:51

这个东西,我直接用路由的正则功能。
$route['(*)'] = "index/index/$1";
修改这个正则,会把所有的数据传到index控制器中的indexindex里做查询就好了。
页: [1]
查看完整版本: 动态url alias功能