AntonLV 6 лет назад
Родитель
Сommit
3bed943a62

+ 5 - 0
inc/classes/BxDolMenu.php

@@ -225,6 +225,11 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
     	return $bVisible;
     }
 
+    public function setTemplate ($sTemplate)
+    {
+        $this->_aObject['template'] = $sTemplate;
+    }
+
     /**
      * Set selected menu item for current menu object only.
      * @param $sModule menu item module to set as selected

+ 5 - 1
install/sql/system.sql

@@ -3961,7 +3961,9 @@ INSERT INTO `sys_menu_templates` (`id`, `template`, `title`, `visible`) VALUES
 (21, 'menu_profile_stats.html', '_sys_menu_template_title_profile_stats', 0),
 (22, 'menu_interactive.html', '_sys_menu_template_title_interactive', 0),
 (23, 'menu_buttons_icon_hor.html', '_sys_menu_template_title_buttons_icon_hor', 1),
-(24, 'menu_floating_blocks_dash.html', '_sys_menu_template_title_floating_blocks_dash', 0);
+(24, 'menu_floating_blocks_dash.html', '_sys_menu_template_title_floating_blocks_dash', 0),
+(25, 'menu_block_submenu_hor.html', '_sys_menu_template_title_block_submenu_hor', 1),
+(26, 'menu_block_submenu_ver.html', '_sys_menu_template_title_block_submenu_ver', 1);
 
 CREATE TABLE IF NOT EXISTS `sys_objects_menu` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
@@ -4889,6 +4891,8 @@ CREATE TABLE IF NOT EXISTS `sys_pages_blocks` (
   `title_system` varchar(255) NOT NULL,
   `title` varchar(255) NOT NULL,
   `designbox_id` int(11) NOT NULL DEFAULT '11',
+  `submenu` varchar(64) NOT NULL DEFAULT '',
+  `tabs` tinyint(4) NOT NULL DEFAULT '0',
   `visible_for_levels` int(11) NOT NULL DEFAULT '2147483647',
   `hidden_on` varchar(255) NOT NULL DEFAULT '',
   `type` enum('raw','html','lang','image','rss','menu','custom','service','wiki') NOT NULL DEFAULT 'raw',

+ 4 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -536,6 +536,8 @@
 	<string name="_adm_bp_txt_block_hidden_on_desktop"><![CDATA[desktop]]></string>
         <string name="_adm_bp_txt_block_hidden_on_mobile"><![CDATA[mobile app]]></string>
 	<string name="_adm_bp_txt_block_selected"><![CDATA[blocks selected]]></string>
+        <string name="_adm_bp_txt_block_submenu"><![CDATA[Block submenu]]></string>
+        <string name="_adm_bp_txt_block_tabs"><![CDATA[Use 'tabs' based block submenu]]></string>
 	<string name="_adm_bp_txt_block_title"><![CDATA[Title]]></string>
 	<string name="_adm_bp_txt_block_visible_for"><![CDATA[Visible For]]></string>
 	<string name="_adm_bp_txt_block_visible_for_all"><![CDATA[Anyone]]></string>
@@ -2675,6 +2677,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_menu_set_title_toolbar_member"><![CDATA[Toolbar Member]]></string>
 	<string name="_sys_menu_set_title_toolbar_site"><![CDATA[Toolbar Site]]></string>
 	<string name="_sys_menu_set_title_snippet_meta"><![CDATA[Snippet Meta Info]]></string>
+        <string name="_sys_menu_template_title_block_submenu_hor"><![CDATA[Horizontal Block Submenu]]></string>
+        <string name="_sys_menu_template_title_block_submenu_ver"><![CDATA[Vertical Block Submenu]]></string>
 	<string name="_sys_menu_template_title_buttons_hor"><![CDATA[Horizontal Buttons]]></string>
         <string name="_sys_menu_template_title_buttons_icon_hor"><![CDATA[Horizontal Buttons (icons only)]]></string>
 	<string name="_sys_menu_template_title_buttons_ver"><![CDATA[Vertical Buttons]]></string>

+ 6 - 4
modules/boonex/polls/classes/BxPollsTemplate.php

@@ -111,10 +111,12 @@ class BxPollsTemplate extends BxBaseModTextTemplate
         $aTmplVars = parent::getTmplVarsText($aData);
         $aTmplVars = array_merge($aTmplVars, array(
             'menu' => BxTemplFunctions::getInstance()->designBoxMenu($oMenu, array(
-                'menu' => array(
-                    'id' => $sMenuId, 
-                    'class' => $sMenu, 
-                    'onclick' => "bx_menu_slide_inline('#" . $sMenuId . "', this, $(this).parents('.bx-db-menu:first'))"
+                array(
+                    'menu' => array(
+                        'id' => $sMenuId, 
+                        'class' => $sMenu, 
+                        'onclick' => "bx_menu_slide_inline('#" . $sMenuId . "', this, $(this).parents('.bx-db-menu:first'))"
+                    )
                 )
             )),
             'bx_if:show_subentries' => array(

+ 4 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -536,6 +536,8 @@
 	<string name="_adm_bp_txt_block_hidden_on_desktop"><![CDATA[настольном компьютере]]></string>
         <string name="_adm_bp_txt_block_hidden_on_mobile"><![CDATA[мобильное приложение]]></string>
 	<string name="_adm_bp_txt_block_selected"><![CDATA[блоков выбрано]]></string>
+        <string name="_adm_bp_txt_block_submenu"><![CDATA[Подменю блока]]></string>
+        <string name="_adm_bp_txt_block_tabs"><![CDATA[Использовать подменю блока в виде вкладок]]></string>
 	<string name="_adm_bp_txt_block_title"><![CDATA[Заголовок]]></string>
 	<string name="_adm_bp_txt_block_visible_for"><![CDATA[Видимо для]]></string>
 	<string name="_adm_bp_txt_block_visible_for_all"><![CDATA[Всех]]></string>
@@ -2631,6 +2633,8 @@
 	<string name="_sys_menu_set_title_toolbar_member"><![CDATA[Панель инструментов - Пользователь]]></string>
 	<string name="_sys_menu_set_title_toolbar_site"><![CDATA[Панель инструментов - Сайт]]></string>
 	<string name="_sys_menu_set_title_snippet_meta"><![CDATA[Мета информация в карточке]]></string>
+        <string name="_sys_menu_template_title_block_submenu_hor"><![CDATA[Горизонтальное подменю блолка]]></string>
+        <string name="_sys_menu_template_title_block_submenu_ver"><![CDATA[Вертикальное подменю блолка]]></string>
 	<string name="_sys_menu_template_title_buttons_hor"><![CDATA[Горизонтальные кнопки]]></string>
         <string name="_sys_menu_template_title_buttons_icon_hor"><![CDATA[Горизонтальные кнопки (только иконки)]]></string>
 	<string name="_sys_menu_template_title_buttons_ver"><![CDATA[Вертикальные кнопки]]></string>

+ 15 - 2
studio/classes/BxDolStudioBuilderPageQuery.php

@@ -229,9 +229,20 @@ class BxDolStudioBuilderPageQuery extends BxDolStudioPageQuery
         return (int)$this->getOne("SELECT FOUND_ROWS()");
     }
 
-    function getSubmenus()
+    function getSubmenus($mixedTemplateIds = 8)
     {
-        return BxDolDb::getInstance()->getPairs('SELECT `object`, `title` FROM `sys_objects_menu` WHERE `template_id` = 8', 'object', 'title');
+        if(!is_array($mixedTemplateIds))
+            $mixedTemplateIds = array($mixedTemplateIds);
+
+        return BxDolDb::getInstance()->getPairs('SELECT `object`, `title` FROM `sys_objects_menu` WHERE `template_id` IN (' . $this->implode_escape($mixedTemplateIds) . ')', 'object', 'title');
+    }
+
+    function getBlockSubmenus($mixedTemplateIds = array(25, 26))
+    {
+        if(!is_array($mixedTemplateIds))
+            $mixedTemplateIds = array($mixedTemplateIds);
+        
+        return BxDolDb::getInstance()->getPairs('SELECT `object`, `title` FROM `sys_objects_menu` WHERE `template_id` IN (' . $this->implode_escape($mixedTemplateIds) . ')', 'object', 'title');
     }
 
     function getLayouts($aParams, &$aItems, $bReturnCount = true)
@@ -404,6 +415,8 @@ class BxDolStudioBuilderPageQuery extends BxDolStudioPageQuery
                 `tpb`.`title_system` AS `title_system`,
                 `tpb`.`title` AS `title`,
                 `tpb`.`designbox_id` AS `designbox_id`,
+                `tpb`.`submenu` AS `submenu`,
+                `tpb`.`tabs` AS `tabs`,
                 `tpb`.`hidden_on` AS `hidden_on`,
                 `tpb`.`visible_for_levels` AS `visible_for_levels`,
                 `tpb`.`type` AS `type`,

+ 28 - 1
studio/template/scripts/BxBaseStudioBuilderPage.php

@@ -638,7 +638,7 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
         if(empty($aBlock) || !is_array($aBlock))
             return array('msg' => _t('_adm_bp_err_block_not_found'));
 
-		bx_import('BxDolStudioUtils');
+        bx_import('BxDolStudioUtils');
         $aForm = array(
             'form_attrs' => array(
                 'id' => 'adm-bp-block-edit',
@@ -698,6 +698,28 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
                         'error' => _t('_adm_bp_err_block_designbox'),
                     ),
                 ),
+                'submenu' => array(
+                    'type' => 'select',
+                    'name' => 'submenu',
+                    'caption' => _t('_adm_bp_txt_block_submenu'),
+                    'info' => '',
+                    'value' => isset($aBlock['submenu']) ? $aBlock['submenu'] : '',
+                    'required' => '0',
+                    'db' => array (
+                        'pass' => 'Xss',
+                    ),
+                ),
+                'tabs' => array(
+                    'type' => 'switcher',
+                    'name' => 'tabs',
+                    'caption' => _t('_adm_bp_txt_block_tabs'),
+                    'info' => '',
+                    'value' => '1',
+                    'checked' => $aBlock['tabs'] == '1',
+                    'db' => array (
+                        'pass' => 'Int',
+                    )
+                ),
                 'hidden_on' => array(
                     'type' => 'select_multiple',
                     'name' => 'hidden_on',
@@ -783,6 +805,11 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
         foreach($aDBoxes as $aDBox)
             $aForm['inputs']['designbox_id']['values'][] = array('key' => $this->sSelectKeyPrefix . $aDBox['id'], 'value' => _t($aDBox['title']));
 
+        $aSubmenus = $this->oDb->getBlockSubmenus();
+        $aForm['inputs']['submenu']['values'][] = array('key' => '', 'value' => _t('_sys_no_menu'));
+        foreach ($aSubmenus as $sObject => $sTitle)
+            $aForm['inputs']['submenu']['values'][] = array('key' => $sObject, 'value' => _t($sTitle));
+
         BxDolStudioUtils::getVisibilityValues($aBlock['visible_for_levels'], $aForm['inputs']['visible_for_levels']['values'], $aForm['inputs']['visible_for_levels']['value']);
 
         $aForm['inputs'] = $this->addInArray($aForm['inputs'], 'visible_for_levels', $this->getBlockContent($aBlock));

+ 3 - 0
template/designbox_menu.html

@@ -0,0 +1,3 @@
+<div class="bx-db-menu">
+    <div class="bx-db-menu-tab bx-db-menu-tab-btn">__content__</div>
+</div>

+ 5 - 0
template/designbox_menu_button.html

@@ -0,0 +1,5 @@
+<a href="javascript:void(0);" __attrs__>
+    <bx_if:show_icon><i class="sys-icon __icon__ bx-def-font-h2"></i></bx_if:show_icon>
+    <bx_if:show_icon_a><i class="sys-icon-a" data-rotate="down" data-icon="__icon_a__"></i></bx_if:show_icon_a>
+    <bx_if:show_title>__title__</bx_if:show_title>
+</a>

+ 1 - 0
template/menu_block_submenu_hor.html

@@ -0,0 +1 @@
+<bx_include_auto:menu_horizontal.html />

+ 1 - 0
template/menu_block_submenu_ver.html

@@ -0,0 +1 @@
+<bx_include_auto:menu_vertical.html />

+ 134 - 51
template/scripts/BxBaseFunctions.php

@@ -10,7 +10,13 @@
 class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
 {
     protected $_oTemplate;
-    protected $_sDesignBoxIcon = 'chevron';
+
+    protected $_sDesignBoxMenuIcon;
+    protected $_sDesignBoxMenuIconType;
+    protected $_sDesignBoxMenuClick;
+    protected $_sDesignBoxMenuTmplTabs;
+    protected $_sDesignBoxMenuTmplPopup;
+    
 
     protected function __construct($oTemplate)
     {
@@ -20,6 +26,12 @@ class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
         parent::__construct();
 
         $this->_oTemplate = $oTemplate ? $oTemplate : BxDolTemplate::getInstance();
+
+        $this->_sDesignBoxMenuIcon = 'chevron';
+        $this->_sDesignBoxMenuIconType = 'icon-a';
+        $this->_sDesignBoxMenuClick = "bx_menu_slide_inline('#{design_box_menu}', this)";
+        $this->_sDesignBoxMenuTmplTabs = 'menu_block_submenu_hor.html';
+        $this->_sDesignBoxMenuTmplPopup = 'menu_block_submenu_ver.html';
     }
 
     /**
@@ -201,6 +213,9 @@ class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
      *      - object: instance of BxTemplMenu class
      *      - string: menu object identifier
      *      - array: array of menu links to create menu from
+     * @param $mixedButtons - design box menu representation, it can be:
+     *      - false: design box menu will be used as horizontal menu (tabs)
+     *      - array: array of menu links to create menu from. If empty array is used and 'design box menu' isn't empty, then 'design box menu' will be added as one of menu items automatically. If non-empty array is used and 'design box menu' isn't empty then it should be added as one of menu items. Use array('menu' => 1) to define menu item for 'design box menu'.
      * @return string
      *
      * @see BX_DB_CONTENT_ONLY
@@ -211,87 +226,155 @@ class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
      * @see BX_DB_PADDING_DEF
      * @see BX_DB_PADDING_NO_CAPTION
      */
-    function designBoxContent ($sTitle, $sContent, $iTemplateNum = BX_DB_DEF, $mixedMenu = false)
+    function designBoxContent ($sTitle, $sContent, $iTemplateNum = BX_DB_DEF, $mixedMenu = false, $mixedButtons = array())
     {
         return $this->_oTemplate->parseHtmlByName('designbox_' . (int)$iTemplateNum . '.html', array(
             'title' => $sTitle,
             'designbox_content' => $sContent,
-            'caption_item' => $this->designBoxMenu ($mixedMenu, array (array('menu' => 1))),
+            'caption_item' => $this->designBoxMenu($mixedMenu, $mixedButtons),
         ));
     }
 
-    function designBoxMenu ($mixedMenu, $aButtons = array ())
+    function designBoxMenu ($mixedMenu, $mixedButtons = array())
     {
-        $sCode = '';
-        $aButtonMenu = false;
-        if ($mixedMenu) {
-
-            $sMenu = '';
-
-            if (is_string($mixedMenu)) {
+        $bUseTabs = is_bool($mixedButtons) && $mixedButtons === true;
 
+        $sMenu = '';
+        if(!empty($mixedMenu)) {
+            if(is_string($mixedMenu)) {
                 $oMenu = BxTemplMenu::getObjectInstance($mixedMenu);
-                $sMenu = $oMenu ? $oMenu->getCode () : $mixedMenu;
-
-            } elseif (is_object($mixedMenu) && is_a($mixedMenu, 'BxTemplMenu')) {
-
-                $sMenu = $mixedMenu->getCode();
-
-            } elseif (is_array($mixedMenu)) {
+                if($oMenu) {
+                    if($bUseTabs)
+                        $oMenu->setTemplate($this->_sDesignBoxMenuTmplTabs);
 
-                if (isset($mixedMenu['template']) && isset($mixedMenu['menu_items']))
+                    $sMenu = $oMenu->getCode();
+                }
+                else
+                    $sMenu = $mixedMenu;
+            } 
+            else if(is_array($mixedMenu)) {
+                if(isset($mixedMenu['template']) && isset($mixedMenu['menu_items']))
                     $aMenu = $mixedMenu;
                 else
-                    $aMenu = array ('template' => 'menu_vertical.html', 'menu_items' => $mixedMenu);
+                    $aMenu = array('template' => $this->_sDesignBoxMenuTmplPopup, 'menu_items' => $mixedMenu);
+
+                if($bUseTabs)
+                    $aMenu['template'] = $this->_sDesignBoxMenuTmplTabs;
 
                 $oMenu = new BxTemplMenu($aMenu, $this->_oTemplate);
-                $sMenu = $oMenu->getCode ();
+                $sMenu = $oMenu ? $oMenu->getCode() : '';
             }
+            else if(is_object($mixedMenu) && is_a($mixedMenu, 'BxTemplMenu')) {
+                if($bUseTabs)
+                    $mixedMenu->setTemplate($this->_sDesignBoxMenuTmplTabs);
 
-            if ($sMenu) {
-                $bButtonMenu = !empty($aButtons['menu']) && is_array($aButtons['menu']);
-
-                $sId = $bButtonMenu && !empty($aButtons['menu']['id']) ? $aButtons['menu']['id'] : 'bx-menu-db-' . time() . rand(0, PHP_INT_MAX);
-                $sCode .= $this->slideBox($sId, $sMenu, true);
-
-                $aButtonMenu = array('icon-a' => $this->_sDesignBoxIcon, 'onclick' => "bx_menu_slide_inline('#" . $sId . "', this)");
-                if($bButtonMenu) {
-                    $aButtonMenu = array_merge($aButtonMenu, $aButtons['menu']);
-                    $aButtons[] = array('menu' => 1);
+                $sMenu = $mixedMenu->getCode();
+            }
+        }
+        $bMenu = !empty($sMenu);
 
-                    unset($aButtons['menu']);
+        $sResult = '';
+        if($bUseTabs && $bMenu)
+            $sResult = $sMenu;
+        else if(is_array($mixedButtons)) {
+            $sPopup = '';
+
+            if($bMenu) {
+                $aButton = array();
+                if(empty($mixedButtons))
+                    list($aButton, $sPopup) = $this->_designBoxMenuButton($sMenu);
+                //--- For backward compatibility
+                else if(!empty($mixedButtons['menu']) && is_array($mixedButtons['menu'])) {
+                    list($aButton, $sPopup) = $this->_designBoxMenuButton($sMenu, $mixedButtons['menu']);
+                    unset($mixedButtons['menu']);
                 }
+
+                if(!empty($aButton))
+                    $mixedButtons[] = $aButton;
             }
 
-        }
+            foreach($mixedButtons as $aButton) {
+                if($bMenu && isset($aButton['menu'])) {
+                    if(is_numeric($aButton['menu']) && (int)$aButton['menu'] == 1)
+                        list($aButton, $sPopup) = $this->_designBoxMenuButton($sMenu);
+                    else if(is_array($aButton['menu']))
+                        list($aButton, $sPopup) = $this->_designBoxMenuButton($sMenu, $aButton['menu']);
 
-        if ($aButtons) {
-            $sCode .= '<div class="bx-db-menu"><div class="bx-db-menu-tab bx-db-menu-tab-btn">';
-            foreach ($aButtons as $aButton) {
-                if (isset($aButton['menu']) && $aButton['menu']) {
-                    if (!$aButtonMenu)
+                    if(isset($aButton['menu']))
                         continue;
-
-                    $aButton = $aButtonMenu;
                 }
 
-                $aAttrs = array ();
-                if (!empty($aButton['onclick']))
+                $aAttrs = array();
+                if(!empty($aButton['onclick']))
                     $aAttrs['onclick'] = $aButton['onclick'];
-                if (!empty($aButton['class']))
+                if(!empty($aButton['class']))
                     $aAttrs['class'] = $aButton['class'];
-                $sAttrs = bx_convert_array2attrs ($aAttrs, 'bx-def-margin-sec-left');
 
-                $sCode .= '<a href="javascript:void(0);" ' . $sAttrs . '>';
-                $sCode .= !empty($aButton['icon']) ? '<i class="sys-icon ' . $aButton['icon'] . ' bx-def-font-h2"></i>' : '';
-                $sCode .= !empty($aButton['icon-a']) ? '<i class="sys-icon-a" data-rotate="down" data-icon="' . $aButton['icon-a'] . '"></i>' : '';
-                $sCode .= !empty($aButton['title']) ? $aButton['title'] : '';
-                $sCode .= '</a>';
+                $bTmplVarsButtonIcon = !empty($aButton['icon']);
+                $aTmplVarsButtonIcon = !$bTmplVarsButtonIcon ? array() : array(
+                    'icon' => $aButton['icon']
+                );
+
+                $bTmplVarsButtonIconA = !empty($aButton['icon-a']);
+                $aTmplVarsButtonIconA = !$bTmplVarsButtonIconA ? array() : array(
+                    'icon_a' => $aButton['icon-a']
+                );
+
+                $bTmplVarsButtonTitle = !empty($aButton['title']);
+                $aTmplVarsButtonTitle = !$bTmplVarsButtonTitle ? array() : array(
+                    'title' => $aButton['title']
+                );
+
+                $sResult .= $this->_oTemplate->parseHtmlByName('designbox_menu_button.html', array(
+                    'attrs' => bx_convert_array2attrs($aAttrs, 'bx-def-margin-sec-left'),
+                    'bx_if:show_icon' => array(
+                        'condition' => $bTmplVarsButtonIcon,
+                        'content' => $aTmplVarsButtonIcon
+                    ),
+                    'bx_if:show_icon_a' => array(
+                        'condition' => $bTmplVarsButtonIconA,
+                        'content' => $aTmplVarsButtonIconA
+                    ),
+                    'bx_if:show_title' => array(
+                        'condition' => $bTmplVarsButtonTitle,
+                        'content' => $aTmplVarsButtonTitle
+                    )
+                ));
             }
-            $sCode .= '</div></div>';
+
+            $sResult .= $sPopup;
         }
 
-        return $sCode;
+        if(!empty($sResult))
+            $sResult = $this->_oTemplate->parseHtmlByName('designbox_menu.html', array(
+                'content' => $sResult
+            ));
+
+        return $sResult;
+    }
+
+    protected function _designBoxMenuId ()
+    {
+        return 'bx-menu-db-' . time() . rand(0, PHP_INT_MAX);
+    }
+
+    protected function _designBoxMenuButton ($sMenu, $aParams = array())
+    {
+        $sId = $this->_designBoxMenuId();
+        $aButton = array($this->_sDesignBoxMenuIconType => $this->_sDesignBoxMenuIcon, 'onclick' => $this->_sDesignBoxMenuClick);
+
+        if(!empty($aParams)) {
+            if(!empty($aParams['id']))
+                $sId = $aParams['id'];
+
+            $aButton = array_merge($aButton, $aParams);
+        }
+
+        $aButton['onclick'] = bx_replace_markers($aButton['onclick'], array(
+            'design_box_menu' => $sId
+        ));
+
+        return array($aButton, $this->slideBox($sId, $sMenu, true));
     }
 
     /**

+ 33 - 9
template/scripts/BxBasePage.php

@@ -373,17 +373,41 @@ class BxBasePage extends BxDolPage
 
             $sTitle = $this->getBlockTitle($aBlock);
 
-            if (is_array($mixedContent) && !empty($mixedContent['content'])) {
-				$sContentWithBox = $oFunctions->designBoxContent(
-                	isset($mixedContent['title']) ? $mixedContent['title'] : $sTitle,
+            if(is_array($mixedContent) && !empty($mixedContent['content'])) {
+                $aParams = array(
+                    isset($mixedContent['title']) ? $mixedContent['title'] : $sTitle,
                     $mixedContent['content'],
-                    isset($mixedContent['designbox_id']) ? $mixedContent['designbox_id'] : $aBlock['designbox_id'],
-                    isset($mixedContent['menu']) ? $mixedContent['menu'] : false
-				);
-            } 
-            elseif (is_string($mixedContent) && !empty($mixedContent)) {                    
-                $sContentWithBox = $oFunctions->designBoxContent($sTitle, $mixedContent, $aBlock['designbox_id']);
+                    isset($mixedContent['designbox_id']) ? $mixedContent['designbox_id'] : $aBlock['designbox_id']
+                );
+
+                $mixedMenu = false;
+                if(isset($mixedContent['menu']))
+                    $mixedMenu = $mixedContent['menu'];
+                else if(!empty($aBlock['submenu']))
+                    $mixedMenu = $aBlock['submenu'];
+                $aParams[] = $mixedMenu;
+
+                if(isset($mixedContent['buttons']))
+                    $aParams[] = $mixedContent['buttons'];
+                else if($mixedMenu)
+                    $aParams[] = (int)$aBlock['tabs'] == 1 ? true : array();
             }
+            else if(is_string($mixedContent) && !empty($mixedContent)) {
+                $aParams = array(
+                    $sTitle,
+                    $mixedContent,
+                    $aBlock['designbox_id']
+                );
+
+                $mixedMenu = !empty($aBlock['submenu']) ? $aBlock['submenu'] : false;
+                $aParams[] = $mixedMenu;
+
+                if($mixedMenu)
+                    $aParams[] = (int)$aBlock['tabs'] == 1 ? true : array();
+            }
+
+            if(!empty($aParams))
+                $sContentWithBox = call_user_func_array(array($oFunctions, 'designBoxContent'), $aParams);
         }
 
         if (isset($GLOBALS['bx_profiler'])) $GLOBALS['bx_profiler']->endPageBlock($aBlock['id'], $sContentWithBox ? false : true, false );