代码之家  ›  专栏  ›  技术社区  ›  nlaq

隐藏没有产品的类别Magento

  •  3
  • nlaq  · 技术社区  · 16 年前

    我有许多站点使用主站点的同一根类别。添加的每个产品都会添加到它添加到的站点(wow.)以及主站点。但是,我希望每个站点上的类别仅在该站点上有产品时出现。

    如果我有:

    Category1
    Category2
    Category3
    

    但是Site1只有Category1和Category2中的产品,而Site2和Site3只有Category2和Category3中的产品;我只希望Category1/2出现在Site1上,而只有Category2/3只出现在Site2和Site3上。

    但是,由于Site1/2/3中的所有产品也添加到主站点;主站点将列出类别1/2/3。

    没有产品直接添加到主站点。它只是作为其他站点的存储库。

    现在,如果没有真正简单的方法来启用这个功能(我确信),那么它会像编写我自己的主题一样简单吗?该主题列出的类别只在显示模板的网站上有产品?

    我不是Magento使用的技术的新手,所以编写自定义代码没有问题。不过,我不想对其进行如此多的编辑,以便将来使用更高版本的Magento更容易升级我的代码库。

    谢谢,
    纳尔逊

    2 回复  |  直到 13 年前
        1
  •  2
  •   Community CDub    8 年前

    好吧,您可以做的是(通过模型)使用集合创建自己的助手,然后根据产品计数筛选集合。

    只是草稿,但我在另一个与magento相关的问题中发布了一些代码: Magento products by categories . 您可以看到它如何以及何时添加产品计数,完成后我将再次筛选。

    我不认为这在性能方面是非常“好”的,所以你不用使用他们的模型类,而是 能够 编写您自己的,扩展它并添加默认过滤器,或者直接对数据库进行短切。

    只要保持皮肤/模板,更新就不会有更大的问题。

        2
  •  0
  •   Amir Shakya    13 年前

    这是一个隐藏类别的简单解决方案,可能对您有所帮助。

    top.phtml文件的原始内容如下所示。

    <?php $_menu = $this->renderCategoriesMenuHtml(0,'level-top') ?>
    <?php if($_menu): ?>
    <div>
        <ul id="nav">
            <?php echo $_menu ?>
        </ul>
    </div>
    <?php endif ?>
    

    用下面的代码替换上面的代码。

    <?php $_menu = ''?>
    <?php $excludeCat = array(); ?>
    <?php foreach ($this->getStoreCategories() as $_category): ?>
        <?php if($_category->getProductCount() <=0) {
              $excludeCat[] = $_category->getId(); 
        }
        ?>
        <?php $_menu .= $this->drawItem($_category) ?>
    <?php endforeach ?>
    <?php if ($_menu): ?>
    <div>
        <ul id="nav">
        <?php foreach ($this->getStoreCategories() as $_category): ?>
        <?php if (!in_array($_category->getId(), $excludeCat)) : ?> <?php echo $this->drawItem($_category) ?>
        <?php endif; ?>
        <?php endforeach ?>
        </ul>
    </div>
    <?php endif; ?>