如何在我的网址中使用类别名称而不是类别ID?

时间:2011-05-29 05:06:12

标签: php codeigniter mod-rewrite routing pyrocms

我正在使用CodeIgniter框架,并且无法弄清楚如何让我的网址显示类别名称,但仍然让我的查询引用类别ID。

我有一个名为jobs的控制器。 url的结构是“example.com/jobs/listings/category_id”示例:“example.com/jobs/listings/3”其中3将是“软件”的类别ID。

我宁愿网址说“example.com/jobs/listings/category_name”示例:“example.com/jobs/listings/software”。

我遇到的问题是“jobs”表保存了作业所属的category_id而不是category_name。我有一个单独的表,只包含类别ID和他们的名字。我不知道如何A.)写我的查询和B.)建立一个SEO友好的网址结构。

我当前的查询类似于“SELECT * FROM jobs WHERE cat_id = 3;

另外,我不确定我是否应该在.htaccess文件中使用mod_rewrite,或者我是否应该在CodeIgniter中使用routes.php文件。

非常感谢任何帮助!

-Thanks

2 个答案:

答案 0 :(得分:3)

加入你的另一张桌子。

SELECT * FROM jobs JOIN categories ON jobs.cat_id = categories.id WHERE categories.name = ?;

如果您还没有类别名称,请确保在类别名称上添加唯一键。

mod_rewrite对于应用路由来说是一个糟糕的解决方案,无论如何都无济于事。坚持你的框架提供的任何东西。

答案 1 :(得分:1)

在URL_title()

上查看http://codeigniter.com/user_guide/helpers/url_helper.html

使用url_title()函数转换类别名称,确保没有重复项。

调用网址时使用简单的where语句从模型中查找您的类别

例如

$this->db->from('categories');
$this->db->where('name', $url);
Etc...

使用此方法加载页面标题等,然后使用返回的categoryid在您的作业表上查找。