用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5036|回复: 6
收起左侧

[URL] 动态url alias功能

[复制链接]
发表于 2010-3-23 17:12:54 | 显示全部楼层 |阅读模式
这里请教一下大家,关于CI,如何完成查询资料库后的url alias~

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

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

看看大家有没有什么好的方法?
发表于 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到不同的函数中
}
发表于 2010-4-11 04:00:49 | 显示全部楼层
关注!

表示关注——万恶的10字符限制~~~
 楼主| 发表于 2010-4-23 14:48:43 | 显示全部楼层
很感谢,saturn
你是将所有路径都指向一个地址然后通过这地址进行转址,的确是个巧妙的方式~
发表于 2010-5-3 23:05:22 | 显示全部楼层
本帖最后由 scckfzx 于 2010-5-3 23:28 编辑
我也一直在寻找和研究此问题的好的解决方案。

目前我所能想到的,并且不触动CI核心库的方案是:
在你需要 ...
saturn 发表于 2010-3-24 13:58



    这样岂不是产生无数的302重定向?这样对SEO非常非常的不利吧。我觉得还是在每个控制器增加_remap方法对URL参数进行判断,然后调用相应的方法,这样唯一的要求就是URL段中必须保留控制器的名称,只能对URL片段中方法部分进行自定义
发表于 2010-5-6 01:22:32 | 显示全部楼层
回复 5# scckfzx


    看来你没有完全明白我的意思,这里只是函数的分发,并没有产生真正的http转向。其实和你写的是一个道理。
发表于 2010-5-6 12:14:51 | 显示全部楼层
这个东西,我直接用路由的正则功能。
$route['([a-zA_Z0-9_\/.]*)'] = "index/index/$1";
修改这个正则,会把所有的数据传到index控制器中的index  index里做查询就好了。

本版积分规则