2012-05-28 57 views
0

我需要将这样的网址重新定向到http://mysite.com/store/store-namehttp://mysite.com/stores/products/store-id。请注意,我需要从数据库中获取商店标识。那么是否有可能在routes.php中执行db操作?Codeigniter路由URL,产品名称为产品ID

而在文档中,语法是$route['store/:any']。如何获得第二个参数的值,这里提到的是:any

回答

4

有没有真正的任何好,也没有简单的方法来通过路由运行数据库查询。然而,您可以在控制器功能开始时进行验证。

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

的config/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 */ 

} 

这asumes您有:

  • 命名的表产品
  • 命名ID列那是你的产品ID
  • 命名一列,这是基于你的store-name
+0

在这种情况下,我没有获得'$ mix'的值。 – Stranger

+0

您是否添加了路线?如果你已经这样做了,你应该可以得到'$ mix'的值。试试'var_dump()'它呢? –

+0

当我这样做时,我得到的价值只有1美元的混合价值,而不是正确的价值。 – Stranger

0

是的,这很容易,你只需要显示的ID,而不是名称, 你必须做这样STORENAME>点击查看详情

让它作为

STOREID>点击查看详情

,当你传递参数到数据库中,改变的MySQL的检查,将其更改为ID,而不是名称,可有些像 “从table_name的选择yourRequiredColumn其中id =”参数“。

谢谢

1

我可能会有点迟到了,但我可能有一个替代建议。

我用我的路线如下:

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

理由是......根据你的方法,如果你创建

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

但随后的一段时间(这毫无疑问谷歌已经收录你的页面),你决定什么都原因,你必须改变商店的名称后“奇妙的商店名称”,你自然会改变你的链接到

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

杀死你的SEO和任何索引链接。

我使用http://mysite.com/store/1/store-name的解决方案意味着你可以改变store-name到任何你想要的,但它总是引用1这意味着用户将仍然可以看到相关页面。

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-> uri-> segment(n))从url中提取参数。

但是,您不需要在routes.php中执行数据库操作。您可以在路由到的控制器中执行数据库操作。我的猜测是,您必须使用查询中网址中使用的任何内容来匹配商店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)); 
    } 

我希望这可以帮助你。

相关问题