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

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