%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/catalog/general/ |
| Current File : /home/bitrix/www/bitrix/modules/catalog/general/catalog_menu.php |
<?
IncludeModuleLangFile(__FILE__);
/**
* Class CCatalogMenu
*/
class CCatalogMenu extends CAdminMenu
{
/**
* @var string
*/
static protected $urlCurrent = '';
/**
* @param $level
* @return mixed
*/
private function _get_menu_item_width($level)
{
static $START_MAGIC_NUMBER = 30, $STEP_MAGIC_NUMBER = 21;
return $START_MAGIC_NUMBER + $level*$STEP_MAGIC_NUMBER;
}
/**
* @param $level
* @return mixed
*/
private function _get_menu_item_padding($level)
{
static $ADDED_MAGIC_NUMBER = 8;
return $this->_get_menu_item_width($level) + $ADDED_MAGIC_NUMBER;
}
/**
* @param $aMenu
* @param int $level
* @param string $urlCurrent
* @return string
*/
public function Show($aMenu, $level = 0, $urlCurrent = '')
{
if(!static::$urlCurrent)
static::$urlCurrent = $urlCurrent;
$scripts = '';
$aMenu["module_id"] = 'iblock';
$bSubmenu = (isset($aMenu["items"]) && is_array($aMenu["items"]) && !empty($aMenu["items"])) || isset($aMenu["dynamic"]) && $aMenu["dynamic"] == true;
$bSectionActive = isset($aMenu["items_id"]) && (in_array($aMenu["items_id"], array_keys($this->aActiveSections)) || $this->IsSectionActive($aMenu["items_id"]));
$icon = isset($aMenu["icon"]) && $aMenu["icon"] <> ""
? '<span class="adm-submenu-item-link-icon '.$aMenu["icon"].'"></span>'
// : ($level < 1 ? '<span class="adm-submenu-item-link-icon" id="default_menu_icon"></span>' : '');
: '';
$id = 'menu_item_'.randString(10);
?><div class="adm-sub-submenu-block<?=$level > 0 ? ' adm-submenu-level-'.($level+1) : ''?><?=$bSectionActive && isset($aMenu["items"]) && is_array($aMenu["items"]) && count($aMenu['items']) > 0 ? ' adm-sub-submenu-open' : ''?><?=$aMenu["_active"] ? ' adm-submenu-item-active' : ''?>"><?
?><div class="adm-submenu-item-name<?=!$bSubmenu ? ' adm-submenu-no-children' : ''?>" id="<?=$id?>" <?=isset($aMenu['fav_id']) ? ' data-fav-id="'.intval($aMenu['fav_id']).'"' : ''?>><?
$onclick = '';
if ($bSubmenu)
{
if(isset($aMenu["dynamic"]) && $aMenu["dynamic"] == true && (!$aMenu["items"] || count($aMenu["items"]) <= 0))
{
$onclick = "BX.adminMenu.toggleDynSection(".$this->_get_menu_item_width($level).", this.parentNode.parentNode, '".htmlspecialcharsbx(CUtil::JSEscape($aMenu["module_id"]))."', '".htmlspecialcharsbx(CUtil::JSEscape($aMenu["items_id"]))."', '".($level+1)."', '".CUtil::JSEscape(htmlspecialcharsbx(static::$urlCurrent))."')";
}
elseif(!$aMenu["dynamic"] || !$bSectionActive || $aMenu['dynamic'] && $bSectionActive && isset($aMenu["items"]) && count($aMenu["items"]) > 0)
{
$onclick = "BX.adminMenu.toggleSection(this.parentNode.parentNode, '".htmlspecialcharsbx(CUtil::JSEscape($aMenu["items_id"]))."', '".($level+1)."')";
} //endif;
}
?><span class="adm-submenu-item-arrow"<?=$level > 0 ? ' style="width:'.$this->_get_menu_item_width($level).'px;"' : ''?><?=$onclick ? ' onclick="'.$onclick.'"' : ''?>><span class="adm-submenu-item-arrow-icon"></span></span><?
if(isset($aMenu["url"]) && $aMenu["url"] <> ""):
?><a class="adm-submenu-item-name-link<?=(isset($aMenu["readonly"]) && $aMenu["readonly"] == true? ' menutext-readonly':'')?>"<?=$level > 0 ? ' style="padding-left:'.$this->_get_menu_item_padding($level).'px;"' : ''?> href="<?=htmlspecialcharsbx($aMenu["url"]);?>"><?=$icon?><span class="adm-submenu-item-name-link-text"><?=$aMenu["text"]?></span></a><?
elseif ($bSubmenu):
if(isset($aMenu["dynamic"]) && $aMenu["dynamic"] == true && !$bSectionActive && (!$aMenu["items"] || count($aMenu["items"]) <= 0)):
?><a class="adm-submenu-item-name-link<?=(isset($aMenu["readonly"]) && $aMenu["readonly"] == true? ' menutext-readonly':'')?>"<?=$level > 0 ? ' style="padding-left:'.$this->_get_menu_item_padding($level).'px;"' : ''?> href="javascript:void(0)" onclick="BX.adminMenu.toggleDynSection(<?=$this->_get_menu_item_width($level-1)?>, this.parentNode.parentNode, '<?=htmlspecialcharsbx(CUtil::JSEscape($aMenu["module_id"]))?>', '<?=htmlspecialcharsbx(CUtil::JSEscape($aMenu["items_id"]))?>', '<?=$level+1?>', '<?=CUtil::JSEscape(htmlspecialcharsbx(static::$urlCurrent))?>')"><?=$icon?><span class="adm-submenu-item-name-link-text"><?=$aMenu["text"]?></span></a><?
elseif(!$aMenu["dynamic"] || !$bSectionActive || $aMenu['dynamic'] && $bSectionActive && isset($aMenu["items"]) && count($aMenu["items"]) > 0):
?><a class="adm-submenu-item-name-link<?=(isset($aMenu["readonly"]) && $aMenu["readonly"] == true? ' menutext-readonly':'')?>"<?=$level > 0 ? ' style="padding-left:'.$this->_get_menu_item_padding($level).'px;"' : ''?> href="javascript:void(0)" onclick="BX.adminMenu.toggleSection(this.parentNode.parentNode, '<?=htmlspecialcharsbx(CUtil::JSEscape($aMenu["items_id"]))?>', '<?=$level+1?>')"><?=$icon?><span class="adm-submenu-item-name-link-text"><?=$aMenu["text"]?></span></a><?
endif;
else:
?><span class="adm-submenu-item-name-link<?=(isset($aMenu["readonly"]) && $aMenu["readonly"] == true? ' menutext-readonly':'')?>"<?=$level > 0 ? ' style="padding-left:'.$this->_get_menu_item_padding($level).'px"' : ''?>><?=$icon?><span class="adm-submenu-item-name-link-text"><?=$aMenu["text"]?></span></span><?
endif;
?></div><?
if(($bSubmenu || (isset($aMenu["dynamic"]) && $aMenu["dynamic"] == true)) && is_array($aMenu["items"]))
{
echo '<div class="adm-sub-submenu-block-children">';
foreach($aMenu["items"] as $submenu)
{
if($submenu)
$scripts .= $this->Show($submenu, $level+1);
}
echo "</div>";
}
else
echo '<div class="adm-sub-submenu-block-children"></div>';
?></div><?
if (isset($aMenu["fav_id"]))
{
$scripts .= "BX.adminMenu.registerItem('".$id."', {FAV_ID:'".CUtil::JSEscape($aMenu['fav_id'])."'});";
}
elseif (isset($aMenu["items_id"]) && $aMenu['url'])
{
$scripts .= "BX.adminMenu.registerItem('".$id."', {ID:'".CUtil::JSEscape($aMenu['items_id'])."', URL:'".CUtil::JSEscape(htmlspecialcharsback($aMenu['url']))."', MODULE_ID:'".$aMenu['module_id']."'});";
}
elseif (isset($aMenu["items_id"]))
{
$scripts .= "BX.adminMenu.registerItem('".$id."', {ID:'".CUtil::JSEscape($aMenu['items_id'])."', MODULE_ID:'".$aMenu['module_id']."'});";
}
elseif ($aMenu['url'])
{
$scripts .= "BX.adminMenu.registerItem('".$id."', {URL:'".CUtil::JSEscape(htmlspecialcharsback($aMenu['url']))."'});";
}
return $scripts;
}
/**
* @param $menu_id
* @param string $urlBack
* @param string $mode
*/
public function ShowSubmenu($menu_id, $urlBack, $mode="menu")
{
foreach($this->aGlobalMenu as $key=>$menu)
if($this->_ShowSubmenu($this->aGlobalMenu[$key], $menu_id, $mode, $urlBack))
break;
}
/**
* @param $aMenu
* @param $menu_id
* @param $mode
* @param int $urlBack
* @param int $level
* @return bool
*/
public function _ShowSubmenu(&$aMenu, $menu_id, $mode, $urlBack, $level=0)
{
$bSubmenu = (is_array($aMenu["items"]) && count($aMenu["items"])>0);
if($bSubmenu)
{
if($aMenu["items_id"] == $menu_id)
{
if($mode == "menu")
{
$menuScripts = "";
foreach($aMenu["items"] as $submenu)
{
if(is_array($submenu))
{
if($level >= 3)
$level = $level - 3;
if($urlBack)
$submenu = self::fReplaceUrl($submenu, $urlBack);
$menuScripts .= $this->Show($submenu, $level, $urlBack);
}
}
if($menuScripts != "")
echo '<script type="text/javascript">'.$menuScripts.'</script>';
}
return true;
}
else
{
foreach($aMenu["items"] as $submenu)
if($this->_ShowSubmenu($submenu, $menu_id, $mode, $urlBack, $level+1))
return true;
}
}
return false;
}
/**
* @param $submenu
* @param $urlCurrent
* @return mixed
*/
public static function fReplaceUrl($submenu, $urlCurrent)
{
$urlCurrentDefault = $urlCurrent;
$arUrlAdd = array("set_filter" => "Y");
$url = $submenu["url"];
$urlParse = parse_url($url);
$arUrlTag = explode("&", $urlParse["query"]);
foreach ($arUrlTag as $tag)
{
$tmp = explode("=", $tag);
if ($tmp[0] == "IBLOCK_ID" || $tmp[0] == "find_section_section")
{
if ($tmp[0] == "find_section_section")
$tmp[0] = "filter_section";
$urlCurrent = CHTTP::urlDeleteParams($urlCurrent, array($tmp[0]));
$arUrlAdd[$tmp[0]] = $tmp[1];
}
}
$url = CHTTP::urlAddParams($urlCurrent, $arUrlAdd, array("encode", "skip_empty"));
$submenu["url"] = $url;
if (isset($submenu["items"]) && count($submenu["items"]) > 0)
{
$subCatalog = self::fReplaceUrl($submenu["items"], $urlCurrentDefault);
$submenu["items"] = $subCatalog;
}
return $submenu;
}
}