Скрыть категории, в которых нет товаров magento

У меня много сайтов, использующих ту же корневую категорию, что и главный сайт. Каждый добавленный продукт добавляется на сайт, на который он был добавлен (вау.), А также на главный сайт. Однако я бы хотел, чтобы категории для каждого сайта отображались только в том случае, если на этом сайте есть продукты.

Если бы у меня был:

Category1
Category2
Category3

Но Site1 имеет продукты только в Category1 и Category2, тогда как Site2 и Site3 имеют продукты в Category2 и Category3; Я хочу, чтобы только Категория 1/2 отображалась на Site1 и только Категория 2/3 отображалась только на Site2 и Site3.

Однако, поскольку все продукты на сайте 1/2/3 также добавляются на главный сайт; на основном сайте будет указана категория 1/2/3.

Никакие продукты не добавляются непосредственно на главный сайт. Он просто служит хранилищем для других сайтов.

Теперь, если нет действительно простого способа включить это (как я уверен), было бы это так же просто, как написать мою собственную тему, в которой перечислены категории, в которых есть только продукты на сайте, на котором отображается шаблон?

Я не новичок в технологиях, которые использует Magento; так что написать собственный код не проблема. Однако я бы не хотел так сильно его редактировать, чтобы в будущем было проще обновить мою базу кода с более поздними версиями Magento.

Спасибо,
-нельсон

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
6 167
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Что ж, вы можете создать своего собственного помощника с коллекцией (через модель), а затем отфильтровать коллекцию по количеству продуктов.

Только черновик, но я разместил код в другом вопросе, связанном с magento: Продукты Magento по категориям. Вы можете увидеть, как и когда он добавляет количество продуктов, я бы снова отфильтровал, когда это было сделано.

Я не думаю, что это очень "здорово" с точки зрения производительности, поэтому вместо использования их классов моделей вы мог пишете свои собственные, расширяя их и добавляя фильтры по умолчанию или переходя непосредственно к базе данных.

Пока вы остаетесь в своем скине / шаблоне, больших проблем с обновлением не возникает.

это простое решение, позволяющее скрыть категории, которые могут вам помочь.

Исходное содержимое файла 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; ?>

Другие вопросы по теме