在Prestahop上重写重定向到产品的模块路由

时间:2016-03-05 19:55:26

标签: prestashop prestashop-1.6

我为艺术家页面创建了自定义路线:

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

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这是因为您的模式生成的URL也与产品URL模式匹配,后者具有更高的优先级。 PrestaShop不会检查产品是否存在,只是直接重定向到ProductController。 PrestaShop中的页面模式彼此不同,因此可以快速识别URL与X控制器相关联。您可以通过检查默认模式来确认。

您可以在后台检查产品网址格式:SEO&网址或DispatcherCore类。无论如何,如果你想要一个简单的修复,我建议制作这种模式:

artists/{id_artist}/{rewrite}