Prestashop友情网址

时间:2018-03-12 09:07:06

标签: .htaccess url-rewriting seo prestashop clean-urls

我一直在尝试创建第二个网址选项,重写为prestashop内的产品。在SEO和标准的Prestashop安装中网址的部分我已经获得了以下产品网址:

{category:/}{id}-{rewrite}-{ean13}.html

这会创建以下产品网址:

https://www.example.com/{category-name}/{product-id}/{product-name}/{ean13}.html

我想添加的是一个选项,出于各种原因通过以下网址构建来访问产品页面:

ean/{ean13}.html

结果网址类似于以下示例:

https://www.example.com/ean13/{ean13}.html

注意,ID是网址构建的标准必填字段,这意味着我无法使用:"只需调整网址建立"作为答案。

是否有能够生成这类结构的模块,插件或代码片段?

我确实找到了一些"从漂亮的网址"中移除ID?模块,但没有给我我搜索的结果。仅部分,因为它只删除了ID。

如果它是第一个{code}段中提到的标准网址构建重定向,则不会成为问题。我知道我可以在我的.htacces文件中编写重写规则但是为每个产品执行此操作会有很多工作,所以我想知道是否有更简单的方法来实现这一点。

一如既往地提前感谢!

1 个答案:

答案 0 :(得分:3)

如果您可以重定向到标准网址,那么使用模块可以轻松解决问题。

  1. 创建一个使用hook moduleRoutes的模块,并配置一个友好的URL以使用模块控制器
  2. 创建模块前端控制器
  3. 在自定义控制器中运行db查询以检查具有请求的EAN的产品是否存在
  4. 如果产品存在,则重定向到产品页面,否则重定向到404页面或其他内容
  5. 我假设您知道如何编写模块和控制器,因此我不会仅仅根据相关位编写完整的代码。

    在模块类中挂钩moduleRoutes

    在此钩子中,您可以为自定义控制器配置友好URL。

    public function hookModuleRoutes()
    {
        return [
            'mymodulename-mycontrollername-root' => [
                'rule' => 'ean13/{:ean13}.html',
                'controller' => 'mycontrollername',
                'keywords' => [
                    'ean13' => ['regexp' => '[0-9]+', 'param' => 'ean13']
                ],
                'params' => [
                    'fc' => 'module',
                    'module' => 'mymodulename'
                ]
            ]
        ];
    }
    

    因此,访问https://www.example.com/ean13/12345.html将运行您的模块控制器,而GET变量ean13的值将为12345

    然后创建mycontrollername模块控制器,您可以使用postProcess()方法检查EAN是否存在。

    public function postProcess()
    {
        $query = new DbQuery();
        $query->select('id_product')
              ->from('product_attribute', 'pa')
              ->where('pa.ean13 = ' . (int)Tools::getValue('ean13'))
        $productId = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
        if ($productId) {
            Tools::redirect($this->context->link->getProductLink($productId));
        }
    
        Tools::redirect('pagenotfound');
    }
    

    在查询中,我们检查product_attribute表格,因为产品组合可以拥有自己的EAN13,您还希望这些EAN13重定向到产品页面。

    此答案的基础知识最常用于将核心产品搜索控制器替换为自定义和SEO友好型。