我已经探讨了很多与此有关的问题和文章,但是我找不到如何完成此工作的方法。
我正在做一个网站,提供一些产品的规格,例如手机,平板电脑,电视等。这是我的工作:
控制器-规格(创建并显示所有产品的规格)
方法-显示(获取所选模型的详细规格并显示)
方法-索引(列出存储在表中的所有模型的名称。这是我建立锚链接的地方)
Display方法采用三个参数(1、2、3)。
1-产品类型(电话,平板电脑,电视等)
2-子弹型(iphone-6,galaxy-tab-s3,bravia-kdl-50w800d等)
3-型号ID(1、4、13等)
我现在的网址是这样的:
本地主机/站点名称/规格/显示/电话/ iphone-6 / 1
本地主机/站点名称/规格/显示/平板电脑/ galaxy-tab-s3 / 4
本地主机/站点名称/规格/显示/电视/ bravia-kdl-50w800d / 13
我想要实现的是这样的URL:
本地主机/站点名称/ iphone-6
本地主机/站点名称/ galaxy-tab-s3
本地主机/站点名称/ bravia-kdl-50w800d
如果可以使用任何方法实现,我都不介意重组我的表/控制器/方法或其他任何方法。
感谢您的阅读。
编辑:
Route.php
$route['default_controller'] = 'Specs/index';
$route['404_override'] = 'Errors/show_404';
$route['translate_uri_dashes'] = FALSE;
这就是我构建锚链接的方式(view_file-> index.php,从Index方法调用):
<?php
foreach model(in the table)
echo anchor(specs_controller.display_function.product_type.model_slug.model_id, model_name);
end foreach
?>
答案 0 :(得分:0)
我可以使用route.php中的以下代码获得所需的URL。唯一的问题是我无法使'urlController / urlMethod'返回可以分配给$ result变量的函数值。
$route['(:any)'] = function ($1)
{
$result = 'urlController/urlMethod/'.$1;
return $result;
};
我不确定该怎么做。有人可以建议我怎么称呼'urlController / urlMethod'吗?
答案 1 :(得分:0)
您可以使用CodeIgniter URI路由来实现。考虑
localhost / sitename / galaxy-tab-s3
映射到
localhost / sitename / specs / display / tablets / galaxy-tab-s3 / 4
而且, 型号id ,即4,在这种情况下,相对于银河标签s3 是静态的,因为您没有提到任何简化网址中的此类ID。
我的理解是每个URL localhost / sitename / iphone-6 都需要有关字符串'iphone-6'的三个详细信息。即产品类型,型号标头,型号ID。一种方式可能是写类似
$route['sitename/(:any)'] = 'routingController/commonRoutingMethod/$1';
在这里,创建一个新的 routingController 并将一些逻辑写入 commonRoutingMethod()方法,该方法将使用 iphone-6 之类的字符串并提取其所有三个详细信息,即产品类型,型号ID等。然后使用
通过构建确切的网址进行重定向header('Location: http://localhost/sitename/specs/display/$productType/$modelSlug/$modelId/');
注意:考虑到您要根据产品类型和型号ID创建字符串的差异结构,例如p_iphone-6_1或t_galaxy-tab-s3_4,可以在route.php中使用正则表达式匹配有更多前进的方式。
答案 2 :(得分:0)
请使用下面的路由代码来实现。
localhost/sitename/specs/display/phones/iphone-6/1
localhost/sitename/specs/display/tablets/galaxy-tab-s3/4
localhost/sitename/specs/display/tv/bravia-kdl-50w800d/13
localhost/sitename/iphone-6
localhost/sitename/galaxy-tab-s3
localhost/sitename/bravia-kdl-50w800d
$route['(:any)'] = 'specs/display/$1/$1/$1';
让我知道您是否需要任何帮助。