Скрыть пустые категории? - Реальность!

Господа программеры, кто то из вас реализовывал автоматическое сокрытие пустых категорий? например срипт по крону с рекурсивным обходом категорий в БД… Интересует любая реализация, т к даже платного модуля не нашел :slightly_smiling_face:

С точки зрения производительности, лучше делать кроном ночью. Готового модуля на маркете тоже не нашли

Если проверять категорию на наличие товара и ставить на пустой категории маркер “сктыта” это я еще смогу реализовать, но в результате просто пропадут все пустые родительские категории и все, а вот более сложный код я не сделаю… Я предполагаю структуру кода так:
категория -> проверка на вложенные категории -> если их нет проверка на товар + проверка наличия самого товара
Но возможно я ошибаюсь т к я не программер
Если будет у кого из знатоков свободное время киньте сюда строки плиз)

Тут такое дело, что тогда еще и пометку какую-то надо ставить, флажок, что скрыта она автоматически, а не вручную, иначе тот же скрипт все ваши вручную скрытые категории с товарами - откроет

Я об этом даже не подумал! так и есть

Я нашел подобный модуль 2010 года под cs cart 2.х Вот ссылка на него (для скачивания нужна регистрация на забугорном форуме cs cart), переделайте его плиз под 4.х версию если кто умеет.

1 лайк

Модуль я переделал под 4ку, но он скрывает только категории в которых есть продукты со статусом H D или количеством продукта <= 0, а совершенно пустые категории не скрывает, в нем такой логики нет. Помогите добавить следующую логику:

1-Сначала делает массив с id всех категорий
2-Собирает path_id всех НЕ пустых категорий и разбивает это значение на id категорий 1/2/3 => 1,2,3
3-Вычитает значения 2го массива из 1го и отдает оставшиеся значения

Полученную фигню добавлю в значения исключаемых категорий из get_categories() и плагин готов.

Есть кто поможет?

Описанная логика оказалась верной, модуль работает под 4.x, хоть и нужно немного код подшлифовать, жаль что никто не откликнулся (( так то тема интересная, категории не скрыты в админке у них статус “А”, но не показываются если они пусты или в них закончился весь товар. Кому интересно могу подробней описать, если не интересно то можно тему считать зактытой.

4 лайка

Здравствуйте, интересует данное решение , если конечно оно еще у вас осталось

Вряд ли осталось, да и вряд ли вообще такое есть. karuzzo с расстройства уже почти 3 года на форум не заходит. Так то о таком функционале время от времени поднимают вопрос на форуме, но никто не берётся воплотить в жизнь, даже разработчики платформы ни разу не прокомментировали эти запросы. :confused:

Надо такое? Есть у меня готовая функция рекурсивного обхода дерева категорий, которую несложно будет адаптировать для этой задачи. Вопрос в конкретной постановке задачи: учитывать или не учитывать дополнительные категории товаров? Скрывать или нет категории, где нет включенных товаров, есть только скрытые и выключенные? Категории, где все товары не в наличии? С вариациями сделать не смогу так как не пользуюсь )

Не знаю, как у @karuzzo бло реализовано,… Если скрытие “на лету” - то такой подход сильно грузит CMS

А вот если добавлять в cron или делать ручной запуск, или привязываться к выгрузке данных - то такой подход вполне себе ничего… рабочий… думаю - реализован у многих… индивидуально…

Для меня самая первая и самая важная задача, это скрыть в динамическом меню ссылки на пустые категории, чтобы посетители не шарились по пустым страницам. Кто запустил “мульку” про админку не знаю, но переключение статуса в админке, это вообще не про то, и кроме того, мне сложно представить для чего это может понадобится.

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

Про то, что нужная штука - вопросов нет. Для мультивендора с сотнями-тысячами категорий, это архиважный функционал.

Но в динамике очень медленно отрабатывать будет.
Вы же понимаете, чтобы посчитать наличие товаров - нужно пройтись по каждому товару?
И такой подсчет, при динамике - на каждой странице…(

1 лайк

Общее понимание как должно быть у меня есть, но вот нет способностей сделать это. :rofl:
Не понимаю, почему такую элементарную опцию не добавили в ядро. Если в ближайший год не будет отклика разработчиков на запросы добавления такой функциональности, то придётся заказывать доработку.

Вы не поняли, в админке ничего не нужно. Суть, чтобы скрыть пункты меню на витрине.

Доброго времени суток, конечно надо))))
Пустые/Не пустые категории (пустые родительские конечно оставить), остальное не надо. у нас по простому.

ну да, скрытие пустых категорий именно на витрине, для покупателей.

если нужно скрывать непустые категории, т.е. категории, где есть товары, но у товаров нулевые остатки, то для этого скрипту придется посчитать остатки по всем товарам, т.е. проход по всей базе, что в динамике сильно замедлит открытие страниц.

Если уж совсем правильно делать, то стоит скрывать все дерево пустых категорий (включая и родительские), если внутри у товаров нулевые остатки.

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

зачем такие сложности? вводим в категорию поле, где хранится суммарное количество в наличии по всем товарам в категории и всех дочерних категориях.
А значение это заносится в поле каждый раз при изменении количества у товара - тут всего один хук к функции изменения количества (не помню ее точного наименования). То есть изменилось количество например на 2 - вместе с этим одновременно уменьшилось значение поля для каждой его категрии (вместе со всеми родительскими вверх по ветке)
При построении меню ничего считать не надо, просто смотреть значение этого поля