@Aleksander911

Как вывести иконки пунктов меню каталога?

Доброго дня всем!
Поздравляю всех с праздником Дня Защитника!
Вопрос такой. У меня пункты меню каталога выводятся автоматически, т.е. берутся названия разделов самого каталога:
.catalog.menu.php
<? $aMenuLinks = Array(); ?>
.catalog.menu_ext.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" => "/catalog/",
   "SECTION_PAGE_URL" => "#SECTION_CODE#/",
   "DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#",
   "IBLOCK_TYPE" => "catalog",
   "IBLOCK_ID" => "14", // ID - id вашего инфоблока
   "DEPTH_LEVEL" => "4",
   "CACHE_TYPE" => "A",
   "CACHE_TIME" => "0",
   "CACHE_TYPE" => "A",
   "CACHE_TIME" => "3600"
   ),
false
);
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>

вывод в section_horizontal.php
<?
			$APPLICATION->IncludeComponent(
		"bitrix:menu", 
		"menucat", 
		array(
			"ROOT_MENU_TYPE" => "catalog",
			"MENU_CACHE_TYPE" => "N",
			"MENU_CACHE_TIME" => "3600",
			"MENU_CACHE_USE_GROUPS" => "Y",
			"MENU_CACHE_GET_VARS" => array(
			),
			"MAX_LEVEL" => "4",
			"CHILD_MENU_TYPE" => "catalog",
			"USE_EXT" => "Y",
			"DELAY" => "N",
			"ALLOW_MULTI_SELECT" => "Y",
			"COMPONENT_TEMPLATE" => "menucat"
		),
		false
	);
			?>

И создан свой шаблон этого самого меню.
Такое меню не создает автоматом файла, что-то вроде:
<?
$aMenuLinks = Array(
	Array(
		"Каталог товаров", 
		"/shop/catalog/", 
		Array(), 
		Array(), 
		"false" 
	),
	Array(
		"Ремонт и сервис", 
		"/service/", 
		Array(), 
		Array(), 
		"" 
	),
 и тд
?>

в котором можно задать параметр IMG и выводить иконки к пунктам меню.
Как можно в таком меню вывести иконки? Может есть какой вариант через Дополнительные поля или как нибудь по другому?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
gromdron
@gromdron
Bitrix developer
Мне казалось это достаточно ясно.

1) Копируем компонент bitrix:menu.sections в собственное пространство имен.
2) Вносим изменения в копированный компонент

2.1) Примерно на 45 строчке в CIBlockSection::GetList добавляем изображение в select и в блоке while делаем проверку - если изображение есть - получаем его url, если нет - прописываем url к загрушке

2.2) примерно на 128 строчке, в блок:

$aMenuLinksNew[$menuIndex++] = array(
	htmlspecialcharsbx($arSection["~NAME"]),
	$arSection["~SECTION_PAGE_URL"],
	$arResult["ELEMENT_LINKS"][$arSection["ID"]],
	array(
		"FROM_IBLOCK" => true,
		"IS_PARENT" => false,
		"DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"],
	),
);


Наравне с параметрами FROM_IBLOCK, IS_PARENT добавляем свой параметр. Например IMAGE_PATH, куда и заносим изображение из 2.1

3) В .catalog.menu_ext.php подменяем вызов на свой компонент

4) В шаблоне menucat компонента bitrix:menu проверяем параметр и работаем с ним.
Как пример - можно посмотреть вопрос того же тостера: Как добавить свои классы всем пунктам меню bitrix?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы