版本1.4.1.4的prestashop网站正在使用category.php
文件来处理类别页面。对1.6.0.6 unfortunatley的更新删除了该文件,因为它已被视为已弃用。 (URL structure changed after CMS update)
一个结果是URL结构的变化。
来自:
URL / category.php?id_category = 6
到:
URL / index.php的id_category = 6&安培;控制器=类别&安培; id_lang = 2
现在,第一个URL结构是404.
问题:
我们不知道为什么所有类别页面都适用于新结构,除了Home
(acceuil)类别(所有网站类别的全局父类别)的页面。即使使用新结构,此home
类别页面也会提供404。换句话说,以下网址无效:
URL / index.php的id_category = 1&安培;控制器=类别&安培; id_lang = 2
如果我没错,Prestashop默认将id = 1提供给此home
类别?你的观点出了什么问题?任何见解都受到高度赞赏。
根据Prestashop-Developper.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在updtate之前和之后= 1.4.1.4到1.6.0.6之间。
答案 0 :(得分:7)
在PrestaShop 1.6中,Root&家庭类别总是返回404(在PS 1.5中只有Root返回404),如果你需要更改Home类别,你必须为CategoryController创建一个覆盖。
请注意,在PrestaShop 1.4中,您拥有ID为1的“Home”,从1.5开始,您拥有id = 1的“Root”和id = 2的“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。