2

一个版本为 1.4.1.4 的 prestashop 网站正在处理category.php类别页面的文件。不幸的是,对 1.6.0.6 的更新删除了该文件,因为它已被视为已弃用。(CMS 更新后 URL 结构发生变化

一个后果是 URL 结构的变化。

从:

url/category.php?id_category=6

至 :

url/index.php?id_category=6&controller=category&id_lang=2

所以现在,第一个 URL 结构是 404。

问题: 我们不知道为什么所有类别页面都可以在新结构下正常工作,除了Home(acceuil) 类别的页面(所有网站类别的全局父类别)。即使使用新结构,此home类别页面也会给出 404。换句话说,以下网址不起作用:

url/index.php?id_category=1&controller=category&id_lang=2

如果我没记错的话,Prestashop 给这个home分类默认 id=1 吧?你的观点出了什么问题?任何见解都受到高度赞赏。

根据 Prestashop-Developer.co 回答编辑

当我在 PhpMyAdmin 中检查我的数据库时:

从 1.4.1.4 更新到 1.6.0.6 后:

我既没有找到 id=0 的类别,也没有找到 id=2 的类别。我只找到 id=1 的 Home 类别和 id=104 的 Root 类别。Root 是 Home 的父级,但 Home 的字段is_root_category设置为 1!!!!我真的什么都不懂。

从 1.4.1.4 更新到 1.6.0.6 之前:

根本没有 Root 类别,也根本没有is_root_category字段。

注意: 这些观察结果基于以下表格:ps_category、ps_category_group、ps_category_product、ps_category_shop 在更新日期之前和之后 = 1.4.1.4 到 1.6.0.6 之间。

4

1 回答 1

7

在 PrestaShop 1.6 中,Root & Home 类别总是返回 404(在 PS 1.5 中只有 Root 返回 404),如果您需要为 Home 类别更改它,您必须为 CategoryController 创建一个覆盖。

请注意,在 PrestaShop 1.4 中,您有 id=1 的“Home”,从 1.5 开始,您有 id=1 的“Root”和 id=2 的“Home”。查找 Home 类别的 ID。

在 /override/controllers/front/ 中创建文件 CategoryController.php,内容如下:

<?php 

class CategoryController extends CategoryControllerCore
{
    public function canonicalRedirection($canonicalURL = '')
    {
        if (Tools::getValue('live_edit'))
            return ;
        if (!Validate::isLoadedObject($this->category) || !$this->category->inShop() || !$this->category->isAssociatedToShop() || $this->category->id == Configuration::get('PS_ROOT_CATEGORY'))
        {
            $this->redirect_after = '404';
            $this->redirect();
        }
        if (!Tools::getValue('noredirect') && Validate::isLoadedObject($this->category))
            FrontController::canonicalRedirection($this->context->link->getCategoryLink($this->category));
    }
}

确保在创建上述文件后删除 /cache/class_index.php。

于 2014-06-05T04:23:57.847 回答