我为艺术家页面创建了自定义路线:
public function hookModuleRoutes($params)
{
return [
'module-artists-artist' => [
'controller' => 'artist',
'rule' => 'artists/{id_artist}',
'keywords' => [
'id_artist' => ['regexp' => '[0-9]+', 'param' => 'id_artist'],
],
'params' => [
'fc' => 'module',
'module' => 'artists',
'controller' => 'artist'
],
],
];
}
如果我使用/artists/1
进行测试,则可行。但我想添加link_rewrite
属性。所以我修改了这样的配置:
public function hookModuleRoutes($params)
{
return [
'module-artists-artist' => [
'controller' => 'artist',
'rule' => 'artists/{id_artist}-{rewrite}',
'keywords' => [
'id_artist' => ['regexp' => '[0-9]+', 'param' => 'id_artist'],
'rewrite' => ['regexp' => '[_a-zA-Z0-9\pL\pS-]*'],
],
'params' => [
'fc' => 'module',
'module' => 'artists',
'controller' => 'artist'
],
],
];
}
但是当我尝试/artists/1-baxter
时,我会被重定向到ID为1
的产品的产品页面。我的艺术家控制器从未被调用过。
[Debug] This page has moved
Please use the following URL instead: http://localhost:8000/fr/estampes/1-est-ce-que-etre
我该如何解决?
答案 0 :(得分:0)
这是因为您的模式生成的URL也与产品URL模式匹配,后者具有更高的优先级。 PrestaShop不会检查产品是否存在,只是直接重定向到ProductController
。 PrestaShop中的页面模式彼此不同,因此可以快速识别URL与X控制器相关联。您可以通过检查默认模式来确认。
您可以在后台检查产品网址格式:SEO&网址或DispatcherCore
类。无论如何,如果你想要一个简单的修复,我建议制作这种模式:
artists/{id_artist}/{rewrite}