我正在尝试找出在codeigniter中制作漂亮外观网址的最佳方法。
通常情况下,我只想要一个带有第三个url参数(配置文件ID)的控制器,如下所示:
==
这对我现在正在建设的网站不起作用,因为我想要一个带有公司名称的漂亮网址,如下所示:
http://thesite.com/profile/some-company-name
=======
他们有2个问题,也许我今天不想直接思考答案很明显,但如果网址是公司名称的连字版本,如果同一家公司的2个人在数据库中奇怪的原因,然后配置文件可能不是正确的,真正唯一的好方法是提供一个配置文件ID并通过id拉,但然后我的网址看起来不太好...
你会如何处理这种情况?我想我总是可以链接到/ profile / id然后在控制器中只查找配置文件并重定向到/ profile / company-name,但是那个进入该站点并键入/ profile / company-name的用户将得到404页。
对我来说有什么好主意吗?
答案 0 :(得分:1)
使用php的urlencode
和urldecode
以及routing
在config
$route['profile/(:any)'] = "controller_link/$1";
然后你可以在你的控制器文件上使用urldecode,如
public function controller_link($name=FALSE)
{
if ($name != FALSE) {//check if name is passed
$queryname = urldecode($name);
//then query on that name in the database
}
}
如果不清楚则添加评论。
答案 1 :(得分:1)
只需查看指南,它就会显示 URL Helper :
设置模型以处理您的getter / setter(用于配置文件名称)。 Getter获取要显示的正确内容,setter设置配置文件名称并处理重复项(通过添加1等同名;)。想想一种消除冲突的创造性方法,如果你不想要丑陋的东西,可以添加州名或邮编。
使用 url_title()来处理干净的网址并消除奇怪的字符:
$title = "What's wrong with CSS?";
$url_title = strtolower(url_title($title));
// Produces: whats-wrong-with-css
答案 2 :(得分:0)
在数据库中使用公司的唯一名称,按名称搜索公司,我使用此函数(帮助程序)来翻译slug中的名称。
if(!function_exists('slug')){
function slug($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
return (!empty($text)) ? $text : FALSE ;
}
}