所以,这是CodeIgniter网站Forrst的一个例子:
http://forrst.com/posts/PHP_Nano_Framework_WIP_Just_throwing_some_ideas_o-mU8
看看那个漂亮的网址。你有根网站,然后是posts
,然后是帖子标题和一个简短的摘录。这对于用户体验来说非常酷。
然而,我的 CodeIgniter网站的网址很简单。 E.G。
http://mysite.com/code/view/120
所以它访问控制器code
,然后访问函数view
,然后结尾的20
是帖子ID(它根据它进行数据库查询)。 / p>
我意识到我可以做一些路由。所以在我的routes.php文件中,我将以下内容放在:
$route['posts/(:num)'] = "code/view/$1";
- 所以这会使http://mysite.com/posts/120与http://mysite.com/code/view/120相同。更好一点,我想你会同意的。
我的问题是 - 如何使用与Forrst类似的技术,其中帖子的摘录实际上附加到URL?我真的不明白这是怎么可能的。 PHP脚本如何确定它应该在数据库中查找的内容,特别是如果有几个具有相同标题的内容?
谢谢!
杰克
答案 0 :(得分:2)
要获取示例中的网址,您需要添加路由规则,就像您已经完成$route['posts/(:num)'] = "code/view/$1";
一样。 Forrst的url似乎是“映射”的(或类似的东西),我认为uri的最后一部分是标识符(o-mU8
似乎是一个哈希,但我更喜欢一个int id)存储在db中,所以如果他查询,他会用ndashes(_)分割uri,然后在你的控制器动作中得到它的最后一部分:
$elements = explode('_',$this-uri-segment(2));
$identifier = $elements[count($elements)-1];
$results = $this->myModel->myQuery($identifier);
控制器/和标识符之间的字符串基本上是完全无用的,但如果你的目标是更好的SEO,则不行。
我希望这会有所帮助
答案 1 :(得分:0)
请参阅official dicussions。通常与此相关的术语是“slug”。我自己没有从CI论坛测试过这种方法,但建议和示例看起来很不错。
答案 2 :(得分:0)
codeigniter中的URL帮助器有一个函数调用url_title()。我自己没有用过,但我认为这就是你要找的东西。