Codeigniter路由URL,产品名称为产品ID

时间:2012-05-28 06:45:00

标签: .htaccess codeigniter

我需要将此http://mysite.com/store/store-name之类的网址重定向到http://mysite.com/stores/products/store-id。请注意,我需要从数据库中获取商店ID。那么是否可以在routes.php中执行db操作?

在文档中,语法为$route['store/:any']。如何获取第二个参数的值,其中提到:any

4 个答案:

答案 0 :(得分:4)

通过路由运行数据库查询并没有什么好的或简单的方法。但是,您可以在控制器功能的开头进行验证。

我认为你的store-name是产品的某种slu ??基本上,您可以验证值是否为数字,如果没有找到slug然后重定向。

<强>配置/ routes.php文件

$route["store/(.*)"] = 'stores/products/$1';
/* () and $1 together passes the values */

<强>控制器/ stores.php

/* Class etc. */

function products($mix) {

    if (is_numeric($mix))
        $int_id = $mix;
    else {

        $row = $this->get_where('products', array('slug' => $mix))->row();

        $this->load->helper('url');
        redirect("stores/products/{$row->id}");

    }

    /* Do stuff with the $int_id */

}

这假设你有:

  • 名为产品
  • 的表格
  • 名为 id 的列,即您的产品ID
  • 一个名为 slug 的列,它基于您的store-name

答案 1 :(得分:1)

我可能会迟到一点,但我可能有其他建议。

我的路线使用以下内容:

http://mysite.com/store/1/store-name

原因是...根据您的方法,如果您创建

http://mysite.com/store/store-name

但是经过一段时间(毫无疑问Google已将您的网页编入索引)后,您决定将商店名称更改为“精彩商店名称”的原因,您自然会将链接更改为

http://mysite.com/store/wonderful-store-name

这会杀死你的搜索引擎优化和任何索引链接。

我使用http://mysite.com/store/1/store-name的解决方案意味着您可以将store-name更改为您想要的任何内容,但它始终会引用1,这意味着用户仍会看到相关页面。

答案 2 :(得分:1)

使用CodeIgniter路由可以

任何。一切都在你编码的方式。 CI中的路由真正灵活。除了标准CI通配符(:any)(:num)之外,您还可以使用正则表达式。如果您不得不喜欢,您甚至可以为路径变量添加前缀或后缀:

$route['store/(:any)'] = "redircontroller/redirfunction/$1";
// for instance the namelookup method of the mystores controller
$route['stores/products/(:any)'] = "mystores/namelookup/$1";

通过定义路径值中的变量来获取第二个参数(以及第三个等等),这些变量将传递给您定义的控制器方法。如果您的新网址中的“产品”也是变体,则应该在那里开始使用通配符表达式。您还可以使用URI类($ this-&gt; uri-&gt; segment(n))从网址中提取参数。

但是,您不在routes.php中执行数据库操作。您在路由到的控制器中执行数据库操作。我的猜测是你必须使用查询中url中使用的任何内容来匹配商店ID。 在任何情况下,您使用路径文件的路径是用户将看到的路径。要进行重定向,您必须接受原始路径,然后将用户重定向到新路径,如下所示:

// in some controller that's attached to the original url
    public function redirfunct($var){
        $this->load->helper('url');
        redirect(base_url('stores/products/' . $var));
    }

我希望这会对你有所帮助。

答案 3 :(得分:0)

是的,这很容易,您只需要显示ID而不是名称, 你必须像storeName&gt;点击查看详细信息

将其设为

STOREID&GT;点击查看详细信息

当你将参数传递给数据库时,更改mysql的检查,将其更改为id而不是name,这可能有点像 “从table_name中选择yourRequiredColumn,其中id =”。参数。“

由于