3

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

如果我有:

Category1
Category2
Category3

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

但是,因为 Site1/2/3 中的所有产品也都添加到了主站点;主站点将列出 Category1/2/3。

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

现在,如果没有真正简单的方法来启用此功能(我敢肯定),是否会像编写我自己的主题一样简单,该主题列出了仅在显示模板的网站上有产品的类别?

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

谢谢,
-纳尔逊

4

2 回答 2

1

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

只是一个粗略的草稿,但我在另一个与 magento 相关的问题中发布了一些代码:Magento products by categories。您可以看到它添加产品数量的方式和时间,完成后我会再次过滤。

我不认为这在性能方面非常“出色”,因此您可以编写自己的模型类,扩展它并添加默认过滤器,或者直接快捷地访问数据库,而不是使用它们的模型类。

只要您留在皮肤/模板中,更新就没有更大的问题。

于 2008-12-19T11:43:44.630 回答
0

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

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; ?>
于 2012-07-08T18:34:53.510 回答