我为Prestashop制作了一个模块,它将根据参数(& id = X)中的给定ID显示内容。
我想为这个模块设置一个不错的网址。
使用SEO和URLS,我发现这是可能的,但它会将?id = X保留在网址中。
例如,如果我将模块的url定义为
/pretty-module
我将拥有相同的链接但具有不同的ID:
/pretty-module?id=1
/pretty-module?id=23
我想做的是以下内容:
/pretty-module => will set id to 1
/even-prettier-module => will set id to 23
我没有在SEO&中看到“参数”选项。 Backoffice中的URLS页面,所以我想知道是否可以这样做。
答案 0 :(得分:6)
你需要挂钩到moduleRoutes,
1)在您的模块安装方法中:
if (!parent::install()
|| !$this->registerHook('moduleRoutes')
|| !$this->registerHook('displayFooter'))
return false;
2)创建相应的钩子
public function hookmoduleRoutes($params) {
$routes = array();
$routes['module-examplemodule-handler'] = array(
'controller'=>'handler',
'rule'=>'promo{/:code}',
'keywords'=>array(
'code'=>array(
'regexp'=>'[\w]+',
'param'=>'short_code'
)
),
'params'=>array(
'fc'=>'module',
'module'=>'examplemodule',
'controller'=>'handler'
)
);
return $routes;
}
模块可能有多条路线。 惯例是模块 - [MODULE_NAME] - [MODULE_CONTROLLER_NAME]
数组解释:
controller - handler (modules / examplemodule / controllers / front / handler.php)
规则 - 花括号是params ..你可以从http://example.com/admin/index.php?controller=AdminMeta
得到一个想法keywords - 在这里配置规则中定义的params(花括号)。
用法示例:http://example.com/promo/ADSGD
在控制器'处理器':
$short_code = Tools::getValue('short_code');
在prestashop 1.6上测试