Просмотр исходного кода

Ticket #4641 - Use HTMX to load page content without genaral page structure.

AntonLV 2 лет назад
Родитель
Сommit
6f452fcb40

+ 10 - 0
inc/classes/BxDolMenu.php

@@ -253,6 +253,11 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         return true;
     }
 
+    public function isHtmx()
+    {
+        return $this->_bHx;
+    }
+
     /**
      * Check if the menu is visible. The menu is visible if at least one menu item is visible.
      * @return boolean
@@ -320,6 +325,11 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         $this->_bDynamicMode = $bDynamicMode;
     }
 
+    public function setHtmx($bHx)
+    {
+        $this->_bHx = $bHx;
+    }
+
     /**
      * Get an arrey of replacable markers.
      * @return an array with markers

+ 20 - 11
modules/boonex/artificer/data/template/system/scripts/BxTemplMenuSidebarSite.php

@@ -12,12 +12,16 @@
  */
 class BxTemplMenuSidebarSite extends BxTemplMenu
 {
+    protected $_sPageUri;
     protected $_aHideFromMenu;
 
     public function __construct ($aObject, $oTemplate = false)
     {
         parent::__construct ($aObject, $oTemplate);
-        
+
+        list($sPageUrl, $aPageParams) = bx_get_base_url_inline();
+        $this->_sPageUri = !empty($aPageParams['i']) ? $aPageParams['i'] : '';
+
         $this->_aHideFromMenu = ['search', 'more-auto'];
     }
 
@@ -30,7 +34,7 @@ class BxTemplMenuSidebarSite extends BxTemplMenu
         if(empty($aResult) || !is_array($aResult))
             return $aResult;
 
-        $aTmplVarsSubmenu = array();
+        $aTmplVarsSubmenu = [];
         $bTmplVarsSubmenu = !empty($aResult['submenu_object']);
         if($bTmplVarsSubmenu) {
             $aResult['bx_if:onclick'] = [
@@ -40,24 +44,29 @@ class BxTemplMenuSidebarSite extends BxTemplMenu
             ]];
             $aResult['class_add'] .= ' bx-si-dropdown-has';
 
-            if(($oSubmenu = BxDolMenu::getObjectInstance($aResult['submenu_object'])) !== false)
+            if(($oSubmenu = BxDolMenu::getObjectInstance($aResult['submenu_object'])) !== false) {
+                $aSubmenuItems = $oSubmenu->getMenuItemsRaw();
+                if($oSubmenu->isHtmx() && !$this->_isSelected($a) && !array_key_exists($this->_sPageUri, $aSubmenuItems))
+                    $oSubmenu->setHtmx(false);
+
                 $aTmplVarsSubmenu['bx_repeat:submenu_items'] = $oSubmenu->getMenuItems();
+            }
         }
 
-        $aResult['bx_if:show_arrow'] = array (
+        $aResult['bx_if:show_arrow'] = [
             'condition' => false && $bTmplVarsSubmenu,
-            'content' => array(),
-        );
+            'content' => [true],
+        ];
 
-        $aResult['bx_if:show_line'] = array (
+        $aResult['bx_if:show_line'] = [
             'condition' => true,
-            'content' => array(),
-        );
+            'content' => [true],
+        ];
 
-        $aResult['bx_if:show_submenu'] = array (
+        $aResult['bx_if:show_submenu'] = [
             'condition' => $bTmplVarsSubmenu,
             'content' => $aTmplVarsSubmenu,
-        );
+        ];
 
         return $aResult;
     }

+ 4 - 0
modules/boonex/artificer/js/utils.js

@@ -148,4 +148,8 @@ BxArtificerUtils.prototype.submenuClickAl = function(oElement) {
     oItem.parents('li:first').siblings().removeClass(sClass);
     if(oItem.parents('.bx-popup-applied.bx-popup-menu'))
         $('.bx-popup-applied:visible').dolPopupHide();
+
+    var sSidebar = 'site';
+    if(bx_sidebar_active(sSidebar))
+        bx_sidebar_toggle(sSidebar);
 };