Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/65: Рейтинг темы: голосов - 65, средняя оценка - 4.65
Vetronix
1 / 1 / 0
Регистрация: 31.08.2012
Сообщений: 30
1

Реализация левого меню каталога

31.08.2012, 11:14. Просмотров 12708. Ответов 4
Метки нет (Все метки)

Подскажите пожалуйста как реализовать следующее.Необходимо чтобы левое меню формировалось из разделов и подразделов каталога в таком виде:
PHP
1
2
3
4
5
6
7
<ul id='menu'>
<LI>
<A HREF="ссылка на папку1" target="_blank">папка1</A>  
<LI>
<A HREF="ссылка на папку2" target="_blank">папка2</A>  
<LI>
</li></UL>
А если в разделе было несколько подразделов он вставлял еще блок <ul id='menu'> и так же формировал ссылки.Не мог бы кто помочь?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2012, 11:14
Ответы с готовыми решениями:

Меню для каталога, реализация
Все привет! Делаю по мануалу...

Активировать разделы и элементы из меню каталога
Помогите у нас сайте по какой-то причине из меню каталога не открываются ни разделы ни элементы?

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

Редактирование левого вертикального меню
Сайт на CMS Битрикс, разрабатывался не мной, с данной системой не знаком и приходится разбираться и...

4
Vetronix
1 / 1 / 0
Регистрация: 31.08.2012
Сообщений: 30
05.09.2012, 18:17  [ТС] 2
Никто не может помочь?(
0
insideone
Модератор
Автор FAQ
3679 / 956 / 114
Регистрация: 10.01.2010
Сообщений: 2,547
06.09.2012, 01:32 3
он вставлял еще блок <ul id='menu'>
ID у тега должно быть уникально

Необходимо чтобы левое меню формировалось из разделов и подразделов каталога в таком виде
А в чём трудность?

Используем CIBlockSection::GetList с фильртом по нужному инфоблоку. Потом собираем массив вида

${ключ=ID родительской секции}[] = {значение=Массив данных секции}

Потом идем циклом по этому массиву, а вернее по $ar[''] т.е. по корневым секциям, у них ID родительской секции пуст. Получится одномерное меню. Второй уровень добавляется вторым внутренним циклом, где мы обратимся уже к $ar[$curSectionID] где $curSectionID это ID текущей секции в итерации - т.е. мы будем проходиться по дочерним секциям определённой секции
1
Alorian
692 / 532 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
06.09.2012, 12:37 4
Цитата Сообщение от Vetronix Посмотреть сообщение
Необходимо чтобы левое меню формировалось из разделов и подразделов каталога
1. В настройках стандартного компонента меню нужно поставить галочку "Подключать файлы с именами вида .тип_меню.menu_ext.php"

2. Создаем файл .тип_меню.menu_ext.php в нужной папке. В этом файле пишем:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
 
global $APPLICATION;
 
$aMenuLinksExt = $APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
        "IBLOCK_TYPE_ID" => "catalog",
        "IBLOCK_ID" => "2",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "36000000",
    ),
    false,
    Array('HIDE_ICONS' => 'Y')
);
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>
Что тут делается?
а. Компонент "bitrix:menu.sections" собирает данные по разделам и формирует из них массив.
б. Массив созданный в компоненте сохраняется в переменной $aMenuLinksExt
в. Обычные пункты меню, которые заведены стандартным способом содержатся в массиве $aMenuLinks. Чтобы эти пункты меню не пропали нам их нужно объединить с новыми пунктами которые мы получили из компонента. С помощью array_merge() старые пункты меню и новые объединяются в один массив который в дальнейшем будет обрабатывать стандартный компонент меню.

3. Компонент "bitrix:menu.sections" просто собирает все разделы в инфоблоке и возвращает их в нужном для меню виде. Я им честно говоря давно пользовался, детальнее не могу рассказать про него. Сейчас если нужно где-то меню из разделов инфоблока то вставляю свой компонент который собирает разделы и формирует массив для меню.

В моем компоненте все довольно просто делается:
а. С помощью CIBlockSection::GetList() собираются все разделы
б. Сортировка стоит по "left_margin". Такая сортировка позволяет сразу в одном цикле определять вложенность разделов. Если у раздела "DEPTH_LEVEL" == 2, а у предыдущего раздела в массиве "DEPTH_LEVEL" == 1, то значит элемент с "DEPTH_LEVEL" == 2 вложен в предыдущий раздел.
Таким образом за один проход массива можно понять вложенной разделов для дальнейшего формирования меню.
в. Формируется меню из полученных данных в цикле.
г. Полученный массив меню возвращается с помощью return.

Добавлено через 3 часа 4 минуты
Как то все запутано получилось.

Еще раз попроще.

В общем суть в чем.
В битриксе меню практически всегда выводится с помощью стандартного компонента меню. Этот компонент берет сами пункты меню из файла. Если в режиме редактирования навести мышкой на компонент меню, то появится кнопка "Редактировать пункты меню". С помощью нее можно редактировать эти стандартные пункты меню, которые хранятся в файле. То есть при создании меню просто вручную забивается название пункта меню и ссылка, а потом это все сохраняется в файл в виде массива.

Но плюс к стандартным пунктам меню можно подключить любые другие пункты. Например собрать разделы инфоблока и сделать на основе них пункты меню. Или можно сделать автоматическй запрос на сторонний сайт и добавить в меню ссылку на какие то данные. В общем к обычным пунктам меню можно добавить какие угодно другие, но уже программно. То есть эти пункты уже не вручную добавлять, а с помощью какого то кода. Код соберет данные, сформирует из них массив с нужно структурой и можно уже добавить к стандартным пунктам меню.

Программный код который будет собирать данные и потом формировать из них массив нужно расположить в файле .тип_меню.menu_ext.php, где "тип_меню" надо заменить на "left", "top" или любой другой тип меню который у вас есть на сайте.

Чтобы собрать все разделы инфоблока и сформировать из них какое то меню нужно в файле .тип_меню.menu_ext.php вставить компонент битрикса "bitrix:menu.sections" с нужыми параметрами и потом объединить полученный от компонента массив со стандартными пунктами меню которые получены стандартным способом.

Я вместо компонента "bitrix:menu.sections" использую свой компонент. В нем я собираю разделы инфоблока и формирую из них массив самостоятельно. Так тоже можно делать, не обязательно использовать готовое решение. Мне так удобнее.
3
Vetronix
1 / 1 / 0
Регистрация: 31.08.2012
Сообщений: 30
07.09.2012, 12:04  [ТС] 5
Объясню подробнее,есть аякс скрипт в шаблоне меню подключаемого,подключается нормально,работает,пункты меню если просматривать в "Редактировании пунктов меню" есть,но не получается сформировать код в шаблоне меню,изначально в найденом скрипте есть только статические ссылки,как сделать так чтобы ссылки генерировались сами?
Статический код код после скрипта следующий:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<ul id='menu'>
<LI>
<A HREF="http://www.share-know.ru/?menu=60" target="_blank">╨У╨╗╨░╨▓╨╜╨░╤П</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=62" target="_blank">╨б╤В╨░╤В╤М╨╕</A>  
<ul id='menu'>
<LI>
<A HREF="http://www.share-know.ru/?menu=64" target="_blank">Windows</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=63" target="_blank">Linux</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=65" target="_blank">╨б╨╡╤А╨▓╨╡╤А╨░</A>  
 
<ul id='menu'>
<LI>
<A HREF="http://www.share-know.ru/?menu=73" target="_blank">SQL SERVER</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=74" target="_blank">Windows 2008 SERVER</A>  
</li></UL>
<LI>
<A HREF="http://www.share-know.ru/?menu=66" target="_blank">╨Я╤А╨╛╨│╤А╨░╨╝╨╝╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡</A>  
<ul id='menu'>
<LI>
<A HREF="http://www.share-know.ru/?menu=75" target="_blank">1C 7.7</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=76" target="_blank">AJAX ╨┤╨╗╤П ╨╕╨╜╤В╨╡╤А╨╜╨╡╤В╨░</A>  
 
</li></UL>
<LI>
<A HREF="http://www.share-know.ru/?menu=67" target="_blank">╨Р╨╜╤В╨╕╨▓╨╕╤А╤Г╤Б╤Л</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=82" target="_blank">╨Ц╨╡╨╗╨╡╨╖╨╛</A>  
</li></UL>
<LI>
<A HREF="http://www.share-know.ru/?menu=68" target="_blank">╨б╨║╨░╤З╨░╤В╤М</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=69" target="_blank">╨о╨╝╨╛╤А</A>  
<ul id='menu'>
<LI>
<A HREF="http://www.share-know.ru/?menu=77" target="_blank">╨Р╨╜╨╡╨║╨┤╨╛╤В╤Л</A>  
 
<LI>
<A HREF="http://www.share-know.ru/?menu=78" target="_blank">╨Ъ╨░╤А╤В╨╕╨╜╨║╨╕</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=79" target="_blank">╨Ш╤Б╤В╨╛╤А╨╕╨╕</A>  
</li></UL>
<LI>
<A HREF="http://www.share-know.ru/?menu=70" target="_blank">╨д╨╛╤А╤Г╨╝</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=71" target="_blank">╨г╤Б╨╗╤Г╨│╨╕</A>  
<LI>
<A HREF="http://www.share-know.ru/?menu=72" target="_blank">╨Ъ╨╛╨╜╤В╨░╨║╤В╤Л</A>  
</li></UL>
 
</body>
</html>
0
07.09.2012, 12:04
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2012, 12:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Доработка подвижного левого меню
Здравствуйте форумчане, прошу помощи в доработке менюхи. работает на битриксе, с прикрученным...

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

Шаблон с обтеканием левого меню статического сайта
Существует ли такой шаблон WordPress, в котором текст может обтекать левое меню? (для статического...

Реализация каталога, с категориями
Добрый день, всех с прошедшим праздником . Я новичок в джанго, питон знаю на 3 с натяжкой, но...


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

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

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