首页 > 解决方案 > prestashop 类别/子类别使 cms 404 错误

问题描述

我在本地环境中使用prestashop,然后建立商店,我出现的问题如下。

购买模块以删除 URL 的 ID:Module Pretty URLs和完美的工作。

然后我想显示类别父类别的子类别的 URL,例如:example.com/women/jeans

使用以下代码实现它,修改文件 override/classes/dispatcher.php

'category_rule' => array(
            'controller' => 'category',
            'rule' =>       'categories:/}{rewrite}',
            'keywords' => array(
                'id' =>             array('regexp' => '[0-9]+'),
                'rewrite' =>        array('regexp' => '[_a-zA-Z0-9-\pL]*', 'param' => 'category_rewrite'),
                'categories' =>     array('regexp' => '[_a-zA-Z0-9-\pL]*'),
                'meta_keywords' =>  array('regexp' => '[_a-zA-Z0-9-\pL]*'),
                'meta_title' =>     array('regexp' => '[_a-zA-Z0-9-\pL]*'),
            ),
        ),

在 Prestashop 管理员中添加{categories:/}{rewrite}类别的 SEO/URL。

文件覆盖/类/Link.php

public function getCategoryLink($category, $alias = null, $id_lang = null, $selected_filters = null, $id_shop = null, $relative_protocol = false)
    {
        if (!$id_lang) {
            $id_lang = Context::getContext()->language->id;
        }
        $url = $this->getBaseLink($id_shop, null, $relative_protocol).$this->getLangLink($id_lang, null, $id_shop);
        if (!is_object($category)) {
            $category = new Category($category, $id_lang);
        }
        $params = array();
        $params['id'] = $category->id;
        $params['rewrite'] = (!$alias) ? $category->link_rewrite : $alias;
        $params['meta_keywords'] =  @Tools::str2url($category->meta_keywords);
        $params['meta_title'] = @Tools::str2url($category->meta_title);

        $selected_filters = is_null($selected_filters) ? '' : $selected_filters;
        if (empty($selected_filters)) {
            $rule = 'category_rule';
        } else {
            $rule = 'layered_rule';
            $params['selected_filters'] = $selected_filters;
        }
        $cats = array();    
        foreach ($category->getParentsCategories() as $cat){    
            if (!in_array($cat['id_category'], array(1, 2, $category->id)))//remove root, home and current category from the URL    
            {
                $cats[] = $cat['link_rewrite'];
                $params['categories'] = implode('/', array_reverse($cats));
            }
        }

        $r_url = $url.Dispatcher::getInstance()->createUrl($rule, $id_lang, $params, $this->allow, '', $id_shop);
        return $r_url;
    }

但要做到这一点,CMS 的所有页面都会给我一个 404,不是这样的。

标签: prestashop-1.6

解决方案


推荐阅读