Создаем меню из разделов инфоблока.
Штатный способ создания меню из разделов инфоблока основан на подключении к меню файла вида .тип_меню.ext.php (у меня он называется .catalog.menu_ext.php), который должен содержать примерно такой код (ID и типы инфоблоков указывайте свои):
[CODE]<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt = $APPLICATION->IncludeComponent(
"bitrix:menu.sections",
"",
Array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => SITE_DIR."catalog/",
"SECTION_PAGE_URL" => "#SECTION_CODE#/",
"DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#",
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "3",
"DEPTH_LEVEL" => "4",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"PATH" => rtrim(str_replace(SITE_DIR . 'catalog/', '', $APPLICATION->GetCurDir()), '/')
),
false
);
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>[/CODE][B]Шаг 1. Прикрепляем картинки к разделам инфоблока.[/B]
[IMG WIDTH=500 HEIGHT=351]http://julliet.ru/assets/images/stat/menu-s-kartinkami-1.jpg[/IMG]
[B]Шаг 2. Кастомизируем компонент menu.sections
[/B]
Переносим компонент [B]menu.sections[/B] в собственное пространство имен. Например, в папке [B]/bitrix/components/[/B] рядом с папкой [B]bitrix[/B] создаем свою - под названием [B]custom[/B]. Это и будет новое пространство имен, в котором можно размещать собственные и кастомизированные компоненты. В эту папку custom пока просто копируем всю папку компонента [B]menu.sections[/B] из [B]/bitrix/components/[/B].
Открываем файл [B]/bitrix/components/custom/menu.sections/component.php[/B], и вносим следующие изменения:
1. добавляем ключ PICTURE в 4 параметр функции
[CODE]<?php
$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, array(
"ID",
"DEPTH_LEVEL",
"NAME",
"PICTURE",
"SECTION_PAGE_URL",
));[/CODE]
1.1. Находим, где формируется $arResult["SECTIONS"], добавляем ключ PICTURE в $arResult["SECTIONS"]
[CODE]$aMenuLinksNew[$menuIndex++] = array(
htmlspecialcharsbx($arSection["~NAME"]),
$arSection["~SECTION_PAGE_URL"],
$arResult["ELEMENT_LINKS"][$arSection["ID"]],
array(
"FROM_IBLOCK" => true,
"PICTURE" => $arSection["PICTURE"],
"IS_PARENT" => false,
"DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]
)
);[/CODE]
2. добавляем ключ PICTURE в результирующий массив
[CODE]$aMenuLinksNew[$menuIndex++] = array(
htmlspecialcharsbx($arSection["~NAME"]),
$arSection["~SECTION_PAGE_URL"],
$arResult["ELEMENT_LINKS"][$arSection["ID"]],
array(
"FROM_IBLOCK" => true,
"PICTURE" => $arSection["PICTURE"],
"IS_PARENT" => false,
"DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]
)
);[/CODE]
[B]Шаг 3. Масштабируем картинку раздела и показываем в меню[/B]
Открываем опять наш файл .catalog.menu_ext.php. Переписываем ...IncludeComponent("bitrix:menu.sections"... на ...IncludeComponent("custom:menu.sections"...
Все готово, давайте уже покажем картинку раздела в нашем меню. Открываем файл шаблона компонента menu.
Находим место, где открывается цикл foreach($arResult as $arItem)
В теле цикла первой же строчкой объявляем строковую переменную $strImg, и при наличии в массиве $arItem["PARAMS"] непустого ключа PICTURE получаем массив с картинкой по методу CFile::ResizeImageGet
Обратите внимание на 2 важных момента! Первое - в проверку на существование картинки в параметре также добавлена проверка на уровень вложенности: $arItem["DEPTH_LEVEL"]==1, что означает, что вывод картинки будет применен только к пунктам ВЕРХНЕГО УРОВНЯ.
Второй момент - масштабирование картинки методом CFile::ResizeImageGet - параметр array('width'=>30, 'height'=>30) задает РАЗМЕРЫ картинки в пикселях. Подставляйте свои размеры по дизайну.При выводе ссылки добавляем $strImg в нужное место
[CODE]$strImg = '';
if(intval($arItem["PARAMS"]["PICTURE"])>0 && $arItem["DEPTH_LEVEL"]==1){
$img = CFile::ResizeImageGet($arItem["PARAMS"]["PICTURE"], array('width'=>30, 'height'=>30),
BX_RESIZE_IMAGE_PROPORTIONAL, false);
$strImg = '<img alt="" src="'.$img['src'].'" />';
}[/CODE]
Все готово.
[IMG WIDTH=786 HEIGHT=151]http://julliet.ru/assets/images/stat/menu-s-kartinkami-bitriks.jpg[/IMG]
Штатный способ создания меню из разделов инфоблока основан на подключении к меню файла вида .тип_меню.ext.php (у меня он называется .catalog.menu_ext.php), который должен содержать примерно такой код (ID и типы инфоблоков указывайте свои):
[CODE]<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt = $APPLICATION->IncludeComponent(
"bitrix:menu.sections",
"",
Array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => SITE_DIR."catalog/",
"SECTION_PAGE_URL" => "#SECTION_CODE#/",
"DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#",
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "3",
"DEPTH_LEVEL" => "4",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"PATH" => rtrim(str_replace(SITE_DIR . 'catalog/', '', $APPLICATION->GetCurDir()), '/')
),
false
);
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>[/CODE][B]Шаг 1. Прикрепляем картинки к разделам инфоблока.[/B]
[IMG WIDTH=500 HEIGHT=351]http://julliet.ru/assets/images/stat/menu-s-kartinkami-1.jpg[/IMG]
[B]Шаг 2. Кастомизируем компонент menu.sections
[/B]
Переносим компонент [B]menu.sections[/B] в собственное пространство имен. Например, в папке [B]/bitrix/components/[/B] рядом с папкой [B]bitrix[/B] создаем свою - под названием [B]custom[/B]. Это и будет новое пространство имен, в котором можно размещать собственные и кастомизированные компоненты. В эту папку custom пока просто копируем всю папку компонента [B]menu.sections[/B] из [B]/bitrix/components/[/B].
Открываем файл [B]/bitrix/components/custom/menu.sections/component.php[/B], и вносим следующие изменения:
1. добавляем ключ PICTURE в 4 параметр функции
[CODE]<?php
$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, array(
"ID",
"DEPTH_LEVEL",
"NAME",
"PICTURE",
"SECTION_PAGE_URL",
));[/CODE]
1.1. Находим, где формируется $arResult["SECTIONS"], добавляем ключ PICTURE в $arResult["SECTIONS"]
[CODE]$aMenuLinksNew[$menuIndex++] = array(
htmlspecialcharsbx($arSection["~NAME"]),
$arSection["~SECTION_PAGE_URL"],
$arResult["ELEMENT_LINKS"][$arSection["ID"]],
array(
"FROM_IBLOCK" => true,
"PICTURE" => $arSection["PICTURE"],
"IS_PARENT" => false,
"DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]
)
);[/CODE]
2. добавляем ключ PICTURE в результирующий массив
[CODE]$aMenuLinksNew[$menuIndex++] = array(
htmlspecialcharsbx($arSection["~NAME"]),
$arSection["~SECTION_PAGE_URL"],
$arResult["ELEMENT_LINKS"][$arSection["ID"]],
array(
"FROM_IBLOCK" => true,
"PICTURE" => $arSection["PICTURE"],
"IS_PARENT" => false,
"DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]
)
);[/CODE]
[B]Шаг 3. Масштабируем картинку раздела и показываем в меню[/B]
Открываем опять наш файл .catalog.menu_ext.php. Переписываем ...IncludeComponent("bitrix:menu.sections"... на ...IncludeComponent("custom:menu.sections"...
Все готово, давайте уже покажем картинку раздела в нашем меню. Открываем файл шаблона компонента menu.
Находим место, где открывается цикл foreach($arResult as $arItem)
В теле цикла первой же строчкой объявляем строковую переменную $strImg, и при наличии в массиве $arItem["PARAMS"] непустого ключа PICTURE получаем массив с картинкой по методу CFile::ResizeImageGet
Обратите внимание на 2 важных момента! Первое - в проверку на существование картинки в параметре также добавлена проверка на уровень вложенности: $arItem["DEPTH_LEVEL"]==1, что означает, что вывод картинки будет применен только к пунктам ВЕРХНЕГО УРОВНЯ.
Второй момент - масштабирование картинки методом CFile::ResizeImageGet - параметр array('width'=>30, 'height'=>30) задает РАЗМЕРЫ картинки в пикселях. Подставляйте свои размеры по дизайну.При выводе ссылки добавляем $strImg в нужное место
[CODE]$strImg = '';
if(intval($arItem["PARAMS"]["PICTURE"])>0 && $arItem["DEPTH_LEVEL"]==1){
$img = CFile::ResizeImageGet($arItem["PARAMS"]["PICTURE"], array('width'=>30, 'height'=>30),
BX_RESIZE_IMAGE_PROPORTIONAL, false);
$strImg = '<img alt="" src="'.$img['src'].'" />';
}[/CODE]
Все готово.
[IMG WIDTH=786 HEIGHT=151]http://julliet.ru/assets/images/stat/menu-s-kartinkami-bitriks.jpg[/IMG]