3

是否可以通过开箱即用的 Magento 安装来查看从根类别开始的分层导航页面?

也就是说,使用示例数据,如果我导航到

http://magento1point7pointzeropoint1.dev/catalog/category/view/id/8

我得到了商店里所有手机的清单,分层导航让我没有按类别排序的选项。

如果我导航到手机的父类别页面(电子)

http://magento1point7pointzeropoint1.dev/catalog/category/view/id/13

分层导航让我可以选择过滤

Cell Phone
Camera
Computer

这些都是电子产品的子类别。

所以,我想知道的是,商店/系统中是否有一个页面可以浏览到 ROOT 类别,其中分层导航将使我能够按顶级类别(家具、电子产品、服装) 按 *所有这些父类别的子类别排序的能力(太多无法列出)。

当我尝试浏览到根类别时

http://magento1point7pointzeropoint1.dev/catalog/category/view/id/3    

我得到一个 404 页面。所以我的第一个假设是该功能不存在,但你的第一直觉经常让你误入歧途,所以我转向 StackOverflow/“社区”寻求明确的答案。

(边界编程相关,我知道,但作为研究编程问题的一部分,我要问)

4

2 回答 2

4

这是可能的,而且是真正的 magento 方式,而不是那么直截了当。阻止控制器显示根类别的主要因素是catalog/category助手。

类别控制器_initCatagory调用canShow方法:

if (!Mage::helper('catalog/category')->canShow($category)) {
    return false;
}

法师类别助手:

public function canShow($category)
{
    if (is_int($category)) {
        $category = Mage::getModel('catalog/category')->load($category);
    }

    if (!$category->getId()) {
        return false;
    }

    if (!$category->getIsActive()) {
        return false;
    }
    if (!$category->isInRootCategoryList()) {
        return false;
    }

    return true;
}

如您所见,它会检查以确保该类别不是根类别。我过去处理这个问题的方法是使用一个模块:

  • 创建一个自定义路由器来处理“所有产品”登陆页面并实例化我的自定义类别控制器
  • 创建一个控制器来处理加载适当站点的根类别和证明(扩展核心类别控制器)
  • 实现我自己的类别助手,它只重载这个方法并放弃检查

您可能会从那里遇到其他问题,但至少您应该有一个起点。

为了更直接地回答您的问题,根据我的经验,如果没有硬塞进去,它就不存在。

于 2013-01-15T00:25:07.377 回答
3

我建议的是一种不同的方法,但是应该可以在不对类别路由/处理/等进行大量更改的情况下工作。

将一个类别添加到您的根目录,标签为 Products、Catalog 或类似的通用名称。配置它以支持分层导航并将所有其他类别放入其中。当然,这意味着顶部导航被搞砸了;等等任务#2。

现在类别已按我们希望的方式设置,重写Mage_Catalog_Block_Navigation并更改方法最顶部的逻辑,renderCategoriesMenuHtml以开始使用$child循环中第一个子项的子项进行渲染,其中填充$activeCategories用于构建标记的数组。

事实证明,这将比弄乱根类别如何与层次结构联系起来要干净得多,并且它实现了拥有主分层导航的目标。唯一潜在的缺点(取决于您如何看待它)是您的 URI 和面包屑路径中将包含“/products/”(或目录)。

于 2013-01-15T01:56:57.030 回答