Документация для разработчиков
Темная тема

GetMenuHtmlEx

Описание и параметры

string
CMain::GetMenuHtmlEx(
	string type = "left",
	bool MenuExt = false,
	mixed template = false,
	mixed InitDir = false
)

Возвращает HTML-код для отображения меню заданного типа. В отличие от метода CMain::GetMenuHtml шаблон меню будет подключаться только один раз. Нестатический метод.

Примечание. В шаблоне меню, используемом данным методом, в обязательном порядке необходимо инициализировать переменную $sMenu, в которой должен храниться HTML представляющий из себя все меню целиком.

Параметры

ПараметрОписание С версии
type Тип меню.
Необязателен. По умолчанию "left".
MenuExt Если значение - "true", то для формирования массива меню, помимо файлов .тип меню.menu.php будут также подключаться файлы с именами вида .тип меню.menu_ext.php. В которых вы можете манипулировать массивом меню $aMenuLinks произвольно, по вашему усмотрению (например, дополнять пункты меню значениями из инфо-блоков).
Необязателен. По умолчанию - "false".
template Путь относительно корня к шаблону меню.
Необязателен. По умолчанию - "false", что означает искать по алгоритму указанному на странице Построение и показ меню.
InitDir Каталог для которого будет строится меню.
Необязателен. По умолчанию - "false", что означает - текущий каталог.
3.3.21

Примеры

Пример выпадающего верхнего меню

Вывод меню в файле /bitrix/templates/demo/header.php:

<script language="JavaScript1.2" src="/bitrix/templates/demo/js/ddnmenu.js"></script>
<?echo $APPLICATION->GetMenuHtmlEx("top");?>

Файл /.top.menu.php:

<?
// основной файл меню
// данный файл может редактироваться в редакторе меню
$aMenuLinks = Array(
	Array(
		"Главная", 
		"/index.php", 
		Array(), 
		Array(), 
		"" 
	),
	Array(
		"Каталог", 
		"/catalog/", 
		Array(), 
		Array(), 
		"" 
	),
	Array(
		"Поддержка", 
		"/support/", 
		Array(), 
		Array(), 
		"" 
	),
	Array(
		"Партнёры", 
		"/partners/", 
		Array(), 
		Array(), 
		"" 
	),
	Array(
		"Компания", 
		"/about/", 
		Array(), 
		Array(), 
		"" 
	)
);
?>

Файл /bitrix/templates/demo/top.menu_template.php:

<?
// шаблон меню
$sMenu = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="0%"><img src="/bitrix/templates/demo/images/top_menu_corner.gif" alt="" width="15" height="19"></td>';

for($i=0; $i<count($arMENU); $i++)
{
	$MENU_ITEM = $arMENU[$i];
	extract($MENU_ITEM);

	if($SELECTED)
		$clrtext = 'topmenuact';
	else
		$clrtext = 'topmenu';

	$sMenu .= '<td>';
	$sMenu .= '<table border="0" cellspacing="0" cellpadding="0"><tr>';
	$sMenu .= '<td bgcolor="#7B9DBB" onmouseover="show('.$i.')" onmouseout="hidden('.$i.')"><a href="'.$LINK.'" class="'.$clrtext.'"><nobr> '.$TEXT.' </nobr></a></td>';
	$sMenu .= '<td width="0%" bgcolor="#7B9DBB">';

	if($iInit($LINK);
	if(count($popup_menu->arMenu) > 0)
	{
		//if left menu exists then we display it in the hidden layer
		$popup_menu->template = "/bitrix/templates/demo/popup.menu_template.php";
		$sMenu .= '<div style="position:relative; width: 100%;">';
		$sMenu .= '<div onMouseOver="show('.$i.')" onMouseOut="hidden('.$i.')" id="menu'.$i.'" style="visibility: hidden; position: absolute; z-index: +1; top: 0px;" >';
		$sMenu .= $popup_menu->GetMenuHtmlEx();
		$sMenu .= '</div></div>';
	}
	$sMenu .= '</td>';
}
$sMenu .= '<td width="100%" bgcolor="#7B9DBB"><img src="/bitrix/templates/demo/images/1.gif" width="50" height="1" alt=""></td></tr></table>';
?>

Файл /bitrix/templates/demo/popup.menu_template.php:

<?
$sMenu =
	'<table border="0" cellspacing="0" cellpadding="0" width="110">'.
	'<tr><td bgcolor="#E6EFF7" valign="top"><table border="0" cellspacing="0" cellpadding="0" width="100%">';

for($i=0; $i<count($arMENU); $i++)
{
	$MENU_ITEM = $arMENU[$i];
	extract($MENU_ITEM);

	if ($PERMISSION > "D")
	{
		$sMenu .=
	'<tr valign="top"><td nowrap onmouseover="this.className=\'popupmenuact\'" onmouseout="this.className=\'popupmenu\'" onclick="window.location=\''.$LINK.'\'"  class="popupmenu" style="cursor: hand">'.
	'<nobr><a href="'.$LINK.'" style="text-decoration: none;"><font class="popupmenutext">'.$TEXT.'</font></a>'.
	'</nobr></td></tr>';
	}
	else
	{
		$sMenu .=
		'<tr valign="top"><td nowrap onmouseover="this.className=\'popupmenuact\'" onmouseout="this.className=\'popupmenu\'" onclick="window.location=\''.$LINK.'\'"  class="popupmenu" style="cursor: hand">'.
		'<nobr><font class="popupmenuclosed">'.$TEXT.'</font>'.
		'</nobr></td></tr>';
	}
}
$sMenu .= '</table></td></tr></table>';
?>

Файл /bitrix/templates/demo/js/ddnmenu.js:

var brname=navigator.appName, BrVer='';
if(brname.substring(0,2)=="Mi")
	BrVer='E';
var timer = 0;
lastid = -1;

function show(id)
{
	if(!((document.all)?document.all['menu'+id]:document.getElementById('menu'+id)))
		return;
	clearTimeout(timer);
	if((id != lastid) && (lastid!=-1))
		((document.all)?document.all['menu'+lastid]:document.getElementById('menu'+lastid)).style.visibility = 'hidden';
	hideElement("SELECT", document.getElementById('menu'+lastid));
	lastid = id;
	((document.all)?document.all['menu'+lastid]:document.getElementById('menu'+lastid)).style.visibility = 'visible';
}

function hidden(id)
{
	if(!((document.all)?document.all['menu'+id]:document.getElementById('menu'+id)))
		return;
	showElement("SELECT");
	timer = setTimeout("if('"+id+"' == '"+lastid+"'){((document.all)?document.all['menu"+lastid+"']:document.getElementById('menu"+lastid+"')).style.visibility = 'hidden';}", 500)
}


function GetPos(el)
{
	if (!el || !el.offsetParent)return false;
	var res=Array()
	res["left"] = el.offsetLeft;
	res["top"] = el.offsetTop;
	var objParent = el.offsetParent;
	while (objParent.tagName.toUpperCase()!="BODY")
	{
		res["left"] += objParent.offsetLeft;
		res["top"] += objParent.offsetTop;
		objParent = objParent.offsetParent;
	}
	res["right"]=res["left"]+el.offsetWidth;
	res["bottom"]=res["top"]+el.offsetHeight;
	return res;
}

function hideElement(elName, Menu)
{
	if(BrVer!='E') return;
	for (i = 0; i < document.all.tags(elName).length; i++)
	{
		Obj = document.all.tags(elName)[i];
		if(!(pMenu=GetPos(Menu)))continue;
		if(!(pObj=GetPos(Obj)))continue;

		if(pObj["left"]<pMenu["right"] && pMenu["left"]<pObj["right"] && pObj["top"]<pMenu["bottom"] && pMenu["top"]<pObj["bottom"])
		Obj.style.visibility = "hidden";
	}
}

function showElement(elName)
{
	if(BrVer!='E') return;
	for (i = 0; i < document.all.tags(elName).length; i++)
	{
		obj = document.all.tags(elName)[i];
		if (!obj || !obj.offsetParent)continue;
		if(obj.style.visibility=="hidden")
			obj.style.visibility = "visible";
	}
}


Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх