Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Berzeg
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 18
1

Как скрыть пустые разделы в меню битрикс?

18.02.2018, 18:53. Просмотров 2303. Ответов 10

Меню вывожу так

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?$APPLICATION->IncludeComponent(
  "bitrix:menu",
  "vertical_multilevel",
  Array(
    "ALLOW_MULTI_SELECT" => "N",
    "CHILD_MENU_TYPE" => "dropdown",
    "COMPONENT_TEMPLATE" => "vertical_multilevel",
    "COMPOSITE_FRAME_MODE" => "A",
    "COMPOSITE_FRAME_TYPE" => "AUTO",
    "DELAY" => "N",
    "MAX_LEVEL" => "3",
    "MENU_CACHE_GET_VARS" => array(),
    "MENU_CACHE_TIME" => "3600",
    "MENU_CACHE_TYPE" => "N",
    "MENU_CACHE_USE_GROUPS" => "Y",
    "ROOT_MENU_TYPE" => "multilevel_menu",
    "USE_EXT" => "Y"
  )
);?>
Есть категории в которых нет товаров, как скрыть показ пустых категорий?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2018, 18:53
Ответы с готовыми решениями:

Как в меню (шаблон horizontal multilevel) скрыть вывод товаров, оставив только разделы?
Добрый день! Инфоблок каталог - некоторые товары находятся в двух категориях одновременно, из-за...

Как создавать разделы в Битрикс?
Снова прошу вашей помощи, прошлый вопрос получилось решить. Спасибо всем. Как в инет магазине на...

Как вывести разделы торгового каталога в левое меню?
Создал в админке в Типе инфоблоков/Каталог новый инфоблок. Он появился в &quot;Каталогах&quot;. В нем добавил...

Как вывести подразделы в меню битрикс?
Всем привет, первый раз работаю с битрикс. У меня есть рабочее меню для родительских категорий, как...

Как скрыть пустые строки в отчете?
Доброго времени суток всем форумчянам. Помогите пожалуйста чайнику искал везде толком...

10
voral
941 / 631 / 142
Регистрация: 16.03.2008
Сообщений: 2,981
19.02.2018, 11:22 2
Пункты в это меню попадают двумя способами:
1. "статические" пункты из файлов: .multilevel_menu.menu.php и .dropdown.menu.php
2. "динамически" из:: .multilevel_menu.menu_ext.php и .dropdown.menu_ext.php. В них, обычно, используют компонент bitrix:menu.sections

В первом случае убирать только руками.
Во втором в файле .*.menu_ext.php после компонента bitrix:menu.sections обойдите все пункты и проверьте сами есть ли в них товары - если нет удалите.... Тут важно проверить потом что бы это все кешировалось, иначе это ваше меню будет тормозить сайт.

Но, может быть, правильнее просто такие разделы деактивировать?
1
Berzeg
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 18
19.02.2018, 14:18  [ТС] 3
Это желание клиента, не хочет просто деактивировать) в _ext.php такой код, как именно нужно проводить проверку? Вопрос конечно банальный, но я первый раз работаю с битрикс

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
 
global $APPLICATION;
 
$aMenuLinksExt=$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
   "IS_SEF" => "N",
   "ID" => $_REQUEST["ID"],
   "IBLOCK_ID" => "4",
   "SECTION_URL" => "",
   "DEPTH_LEVEL" => "4",
   "CACHE_TYPE" => "A",
   "CACHE_TIME" => "3600"
   ),
   false
 
);
/*$activeElements = CIBlockSection::GetSectionElementsCount($SECTION_ID, Array("CNT_ACTIVE"=>"Y"));
echo $activeElements;*/
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>
0
voral
941 / 631 / 142
Регистрация: 16.03.2008
Сообщений: 2,981
19.02.2018, 14:59 4
Тут задача с подводными камнями (надо учесть вложенность, обязательно кеширование и т.п.) Раз первый раз работаете слишком большой шанс дров наломать. Наверное, самое оптимальное в вашем случае будет переделать это меню с компонента bitrix:menu на bitrix:catalog.section.list этот компонент может показывать количество элементов в в разделе. Вам останется только в шаблоне условие поставить: если это значение 0 то не выводить.

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

Если же надумаете все же делать на основе меню... Самое "прямое" копируйте в свое пространство компонент menu.sections
(копируйте в каталог /local/components/berzeg/menu.sections из /bitrix/components/bitrix/menu.sections и правьте там файл components.

Код вставляйте перед $this->EndResultCache(); Я бы примерно следующий алгоритм принял:
1. Из полученного массива собираете все ID шники разделов
2. CIblockElement::GetList передав в фильтр массив ИД (если у вас один товар может в нескольких разделах быть - там есть нюансы). Группируете по разделам и количество смотрите (при группировке добавится поле CNT)....
3. Чистите массив на основании полученных данных

Добавлено через 1 минуту
4 в *menu_ext.php еже подключаете свой компонент berzeg:menu.sections

Добавлено через 4 минуты
Дополню. По хорошему тогда стоит время кеша поставить побольше и применить тегированный кеш так чтобы кеш вашего "меню" сбрасывался при изменениях элементов в ифноблока каталога
2
19.02.2018, 14:59
Berzeg
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 18
20.02.2018, 09:50  [ТС] 5
С моим опытом в кодинге, хотелось бы найти еще какое то менее трудоемкое решение. Кто то советовал, что в bitrix меню все же можно вывести кол-во элементов, править component.php в menu-section, это реально?
0
voral
941 / 631 / 142
Регистрация: 16.03.2008
Сообщений: 2,981
20.02.2018, 10:20 6
Самый простой для вас способ переделать вывод меню на компонент bitrix:catalog.section.list это будет минимиум кодинга. Но нужно аккуратно перенести верстку и за bitrix:menu.

Цитата Сообщение от Berzeg Посмотреть сообщение
править component.php в menu-section, это реально?
Реально. Только так как я вам сказал - скопировав компонент в свое пространство.

В, целом, поскольку это меню будет на всех страницах сайта, и по своей сути требует серию запросов в БД.... Лучше обратитесь за помощью. Тут фраза из моей подписи очень подойдет.
0
Berzeg
0 / 0 / 0
Регистрация: 28.12.2016
Сообщений: 18
20.02.2018, 10:49  [ТС] 7
В общем вывел количество элементов в битрикс меню без каталог section, дальше пока снова ступор, буду разбираться, спасибо за советы
0
Excubitor
9 / 9 / 3
Регистрация: 23.05.2013
Сообщений: 129
10.04.2018, 09:10 8
Цитата Сообщение от voral Посмотреть сообщение
bitrix:catalog.section.list этот компонент может показывать количество элементов в в разделе. Вам останется только в шаблоне условие поставить: если это значение 0 то не выводить.
А можно поточнее в каком месте шаблона компонента и, если не сложно, что прописать?
0
voral
941 / 631 / 142
Регистрация: 16.03.2008
Сообщений: 2,981
10.04.2018, 11:05 9
Так а вы сами пробовали найти место где происходит вывод количества?
0
Excubitor
9 / 9 / 3
Регистрация: 23.05.2013
Сообщений: 129
11.04.2018, 02:26 10
Цитата Сообщение от voral Посмотреть сообщение
Так а вы сами пробовали найти место где происходит вывод количества?
Да, конечно. Это не сложно.
Я немного запутался в операторе условия. С чем именно сравнивать нолик?
0
voral
941 / 631 / 142
Регистрация: 16.03.2008
Сообщений: 2,981
11.04.2018, 10:17 11
Приведите здесь тот кусок кода где выводится раздел и количество элементов, чтоб мне не лезть туда.
0
11.04.2018, 10:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2018, 10:17

Как через VBA скрыть, отабразить элемент меню и вобще как к меню обращаться...
Нарисовал свое меню, некотрые элементы меню необходимо делать Активными (Enable) или не...

Как создать разделы в меню
Господа, честно даже стыдно писать. Сложнейшие части кода будущей программы написаны(в C#, WPF), а...

Центровка пунктов в выпадающем меню по центру ul блока (Битрикс меню)
Всем привет! Требуется в выпадающем меню, т.е. в самых блоках выпадающего меню, сделать чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru