我需要将这样的网址重新定向到http://mysite.com/store/store-name
到http://mysite.com/stores/products/store-id
。请注意,我需要从数据库中获取商店标识。那么是否有可能在routes.php中执行db操作?Codeigniter路由URL,产品名称为产品ID
而在文档中,语法是$route['store/:any']
。如何获得第二个参数的值,这里提到的是:any
。
我需要将这样的网址重新定向到http://mysite.com/store/store-name
到http://mysite.com/stores/products/store-id
。请注意,我需要从数据库中获取商店标识。那么是否有可能在routes.php中执行db操作?Codeigniter路由URL,产品名称为产品ID
而在文档中,语法是$route['store/:any']
。如何获得第二个参数的值,这里提到的是:any
。
有没有真正的任何好,也没有简单的方法来通过路由运行数据库查询。然而,您可以在控制器功能开始时进行验证。
我认为你的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您有:
store-name
是的,这很容易,你只需要显示的ID,而不是名称, 你必须做这样STORENAME>点击查看详情
让它作为
STOREID>点击查看详情
,当你传递参数到数据库中,改变的MySQL的检查,将其更改为ID,而不是名称,可有些像 “从table_name的选择yourRequiredColumn其中id =”参数“。
谢谢
我可能会有点迟到了,但我可能有一个替代建议。
我用我的路线如下:
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
这意味着用户将仍然可以看到相关页面。
任何是可能的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));
}
我希望这可以帮助你。
在这种情况下,我没有获得'$ mix'的值。 – Stranger
您是否添加了路线?如果你已经这样做了,你应该可以得到'$ mix'的值。试试'var_dump()'它呢? –
当我这样做时,我得到的价值只有1美元的混合价值,而不是正确的价值。 – Stranger