Bitrix Site Manager

CMain::GetMenuHtml

string
CMain::GetMenuHtml(
 string type = "left",
 bool use_ext = false,
 mixed template_path = false,
 mixed init_dir = false
)

The method GetMenuHtml returns the HTML code which displays the menu of the specified type. Unlike the method CMain::GetMenuHtmlEx, the menu template is applied to every item of the menu.

Parameters

ParameterDescription
type Type of the menu.
Optional; left by default.
use_ext If true, the menu is built using files .menu type.menu_ext.php in addition to the standard files .menu type.menu.php. The _ext files allows you to modify the menu array $aMenuLinks as desired, for example add menu items.
Optional; false by default.
template_path Path relative to the site root to the menu template.
Optional; false by default, which specifies to search for the template using the algorithm described in the "Menu" section.
init_dir Folder for which the menu is to be built.
Optional; false by default, which means the current folder.

See Also

Examples

The following is an example of the left menu with items collected from the information block.

Displaying the menu in the file /bitrix/templates/demo/header.php:

<?
echo $APPLICATION->GetMenuHtml("left", true);
?>

File /.left.menu.php:

<?
// main menu
// this file can be edited in the menu editor
$aMenuLinks = Array(
);
?>

File /.left.menu_ext.php:

<?
// additional menu
// adds sections of the phone catalogue to the main menu array
if (CModule::IncludeModule("iblock")):

    $IBLOCK_TYPE = "catalog";   // information block type
    $IBLOCK_ID = 21;            // information block ID
    $CACHE_TIME = 3600;         // cache for 1 hour

    $aMenuLinksNew = array();

    // create an object to cache the menu
    $CACHE_ID = __FILE__.$IBLOCK_ID;
    $obMenuCache = new CPHPCache;
    // if the array is cached...
    if($obMenuCache->InitCache($CACHE_TIME, $CACHE_ID, "/"))
    {
        // take data from the cache
        $arVars = $obMenuCache->GetVars();
        $aMenuLinksNew = $arVars["aMenuLinksNew"];
    }
    else
    {
        // otherwise, build it
        $rsSections = GetIBlockSectionList($IBLOCK_ID, 
                                           false, 
                                           array("SORT" => "ASC", "ID" => "ASC"), 
                                           false, 
                                           array("ACTIVE"=>"Y"));
        while ($arSection = $rsSections->Fetch())
        {
            $arrAddLinks = 
                array(SITE_DIR."catalog/phone/element.php?SECTION_ID=".$arSection["ID"]);
            // iterate the section elements
            if ($rsElements = 
                GetIBlockElementListEx($IBLOCK_TYPE, 
                                       false, false, array(), false, 
                                       array("ACTIVE" => "Y", 
                                             "IBLOCK_ID" => $IBLOCK_ID, 
                                             "SECTION_ID" => $arSection["ID"]), 
                                       array("ID", "IBLOCK_ID", "DETAIL_PAGE_URL")))
            {
                while ($arElement = $rsElements->GetNext()) 
                       $arrAddLinks[] = $arElement["DETAIL_PAGE_URL"];
            }
            $aMenuLinksNew[] = array(
                $arSection["NAME"], 
                SITE_DIR."catalog/phone/section.php?SECTION_ID=".$arSection["ID"],
                $arrAddLinks);        
        }
    }
    // store data in the cache
    if($obMenuCache->StartDataCache())
    {
        $obMenuCache->EndDataCache(Array("aMenuLinksNew" => $aMenuLinksNew));
    }

    // merge the main and additional menu arrays
    $aMenuLinks = array_merge($aMenuLinksNew, $aMenuLinks);

endif;
?>

Menu template /bitrix/templates/demo/left.menu_template.php:

<?
// This file is the template for one menu item iteration

// Set item mark: selected folder, folder, page
if ($ITEM_TYPE=="D")
{
    if ($SELECTED)
        $strDir = "<td width='0%' bgcolor='#A0C4E0' valign='middle' 
                       align='center'><img height='13' 
                                           src='../../../../../../bitrix/templates/demo/images/left_folder_open.gif' 
                                           width='17' border='0'></td>";
    else
        $strDir = "<td width='0%' bgcolor='#CCDFEE' valign='middle' 
                       align='center'><img height='13' 
                                           src='../../../../../../bitrix/templates/demo/images/left_folder.gif' 
                                           width='17' border='0'></td>";
}
else
{
    if ($SELECTED)
    {
        $strDir = "<td width='0%' bgcolor='#A0C4E0' valign='middle' 
                       align='center'><img height='13' 
                                           src='../../../../../../bitrix/templates/demo/images/left_bullet.gif' 
                                           width='17' border='0'></td>";
        $strDir_d = "<td width='0%' bgcolor='#A0C4E0' valign='middle' 
                         align='center'><img height='13' 
                                             src='../../../../../../bitrix/templates/demo/images/left_bullet_d.gif' 
                                             width='17' border='0' alt='Private section'></td>";
    }
    else
    {
        $strDir = "<td width='0%' bgcolor='#CCDFEE' valign='middle' 
                       align='center'><img height='13' 
                                           src='../../../../../../bitrix/templates/demo/images/left_bullet.gif' 
                                           width='17' border='0'></td>";
        $strDir_d = "<td width='0%' bgcolor='#CCDFEE' valign='middle' 
                         align='center'><img height='13' 
                                             src='../../../../../../bitrix/templates/demo/images/left_bullet_d.gif' 
                                             width='17' border='0' alt='Private section'></td>";
    }
}

// if $SELECTED then this item is current (active) item
if ($SELECTED)
    $strtext = "leftmenuact";
else
    $strtext = "leftmenu";
    
// if $PARAMS["SEPARATOR"]=="Y" this item 
// should be shown with different style applied

if ($PARAMS["SEPARATOR"]=="Y")
{
    $strstyle = " style='background-color: #D5ECE6; border-top: 1px solid #A6D0D7; 
                  border-bottom: 1px solid #A6D0D7; padding:8;'";
    $strDir = "<img height='13' src='../../../../../../bitrix/templates/demo/images/1.gif' 
                    width='17' border='0'>";
    $strtext = "leftmenu";
}
else
    $strstyle = " style='padding:8;'";


// Content of variable $sMenuProlog is typed 
// just before all menu items iterations
// Content of variable $sMenuEpilog is typed 
// right after all menu items iterations
$sMenuProlog = "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";
$sMenuEpilog = '<tr><td colspan=2 
                        background="/bitrix/templates/demo/images/l_menu_border.gif"><img 
                        src="/bitrix/templates/demo/images/1.gif" 
                        width="1" height="1"></td></tr></table>';

// if $PERMISSION > "D" then current user can access this page
if ($PERMISSION > "D")
{
    $sMenuBody = '<tr><td colspan=2 
                          background="/bitrix/templates/demo/images/l_menu_border.gif"><img 
                          src="/bitrix/templates/demo/images/1.gif" 
                          width="1" height="1"></td></tr><tr>'.$strDir.'<td 
                          valign="top"'.$strstyle.' width="100%"><a 
                          href="'.$link.'" class="'.$strtext.'">'.$TEXT.'</a></td></tr>';
}
else
{
    $sMenuBody = '<td colspan=2 
                      background="/bitrix/templates/demo/images/l_menu_border.gif"><img 
                      src="/bitrix/templates/demo/images/1.gif" 
                      width="1" height="1"></td></tr><tr>'.$strDir_d.'</td><td 
                      valign="top"'.$strstyle.' width="100%"><a 
                      href="'.$link.'" class='.$strtext.'>'.$TEXT.'</a></td></tr>';

}
?>