从根类别开始的Magento层导航

时间:2013-01-14 23:54:17

标签: magento

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 /“社区”以获得明确的答案。

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

2 个答案:

答案 0 :(得分: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;
}

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

  • 创建自定义路由器以处理“所有产品”登录页面并实例化我的自定义类别控制器
  • 创建一个控制器来处理加载相应站点的根类别和prov(扩展核心类别控制器)
  • 实现我自己的类别帮助程序,只重载此方法并检查

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

为了更直接地回答你的问题,根据我的经验,如果没有将其放入其中,它就不存在。

答案 1 :(得分:3)

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

将类别添加到标有“产品”,“目录”或类似通用名称的根目录中。配置它以支持分层导航并将所有其他类别放在其中。当然,这意味着顶部导航搞砸了;等等到任务#2。

既然按照我们希望的方式设置了类别,请重写Mage_Catalog_Block_Navigation并更改renderCategoriesMenuHtml方法最顶端的逻辑,以便开始使用第一个{{1}的子项进行rending。 1}}在循环中填充用于构建标记的$child数组。

这将变得更加清晰,而不是弄清楚根类别如何与层次结构相关联,并且它实现了拥有主分层导航的目标。唯一潜在的缺点(取决于你如何看待它)是你的URI和痕迹路径中有'/ products /'(或目录)。