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

#26 - fixing gallery/extended browsing view switcher

Alex Trofimov 12 лет назад
Родитель
Сommit
f2c456cc4a

+ 3 - 1
inc/js/functions.js

@@ -63,12 +63,14 @@ function getHtmlData( elem, url, callback, method , confirmation)
     }
 }
 
-function loadDynamicBlockAutoPaginate (e, iStart, iPerPage) {
+function loadDynamicBlockAutoPaginate (e, iStart, iPerPage, sAdditionalUrlParams) {
 
     sUrl = location.href;
 
     sUrl = sUrl.replace(/start=\d+/, '').replace(/per_page=\d+/, '').replace(/[&\?]+$/, '');
     sUrl = bx_append_url_params(sUrl, 'start=' + parseInt(iStart) + '&per_page=' + parseInt(iPerPage));
+    if ('undefined' != typeof(sAdditionalUrlParams))
+        sUrl = bx_append_url_params(sUrl, sAdditionalUrlParams);
 
     return loadDynamicBlockAuto(e, sUrl);
 }

+ 1 - 2
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -191,8 +191,7 @@ class BxBaseModGeneralModule extends BxDolModule
 
     // ====== PROTECTED METHODS
 
-    //TODO: Need to check and fix. When $bAjaxPaginate is TRUE, "View" selector (gallery/extended view) has an empty 'onclick'. 
-    protected function _serviceBrowse ($sMode, $aParams = false, $iDesignBox = BX_DB_PADDING_DEF, $bDisplayEmptyMsg = false, $bAjaxPaginate = false)
+    protected function _serviceBrowse ($sMode, $aParams = false, $iDesignBox = BX_DB_PADDING_DEF, $bDisplayEmptyMsg = false, $bAjaxPaginate = true)
     {
         if (CHECK_ACTION_RESULT_ALLOWED !== ($sMsg = $this->checkAllowedBrowse()))
             return MsgBox($sMsg);

+ 22 - 2
modules/base/text/classes/BxBaseModTextSearchResult.php

@@ -35,13 +35,33 @@ class BxBaseModTextSearchResult extends BxBaseModGeneralSearchResult
 
         return array_merge(
             array(
-                array('name' => 'gallery', 'title' => _t('_sys_menu_title_gallery'), 'link' => $this->getCurrentUrl(array($this->sUnitViewParamName => 'gallery')), 'icon' => 'th'),
-                array('name' => 'extended', 'title' => _t('_sys_menu_title_extended'), 'link' => $this->getCurrentUrl(array($this->sUnitViewParamName => 'extended')), 'icon' => 'list'),
+                array(
+                    'name' => 'gallery', 
+                    'title' => _t('_sys_menu_title_gallery'), 
+                    'link' => $this->getCurrentUrl(array($this->sUnitViewParamName => 'gallery')), 
+                    'onclick' => $this->getCurrentOnclick(array($this->sUnitViewParamName => 'gallery')), 
+                    'icon' => 'th'),
+                array(
+                    'name' => 'extended', 
+                    'title' => _t('_sys_menu_title_extended'), 
+                    'link' => $this->getCurrentUrl(array($this->sUnitViewParamName => 'extended')), 
+                    'onclick' => $this->getCurrentOnclick(array($this->sUnitViewParamName => 'extended')), 
+                    'icon' => 'list'),
             ),
             $aMenu
         );
     }
 
+    protected function getCurrentOnclick($aAdditionalParams = array(), $bReplacePagesParams = true) 
+    {
+        // always add UnitView as additional param
+        $sUnitView = bx_process_input(bx_get($this->sUnitViewParamName));
+        if ($sUnitView && isset($this->aUnitViews[$sUnitView]))
+            $aAdditionalParams = array_merge(array($this->sUnitViewParamName => $sUnitView), $aAdditionalParams);
+
+        return parent::getCurrentOnclick($aAdditionalParams, $bReplacePagesParams);
+    }
+
     function _getPseud ()
     {
         return array(

+ 9 - 10
template/scripts/BxBaseSearchResult.php

@@ -221,21 +221,20 @@ class BxBaseSearchResult extends BxDolSearchResult
             return "return !loadDynamicBlockAuto(this, '{$sLoadDynamicUrl}');";
 
         } else {
-
-            return "return !loadDynamicBlockAutoPaginate(this, '{start}', '{per_page}');";
+            
+            return "return !loadDynamicBlockAutoPaginate(this, '{start}', '{per_page}', " . (empty($aAdditionalParams) ? 'undefined' : "'" . trim($this->addAdditionalUrlParams('', $aAdditionalParams, false, false), '&?') . "'") . ");"; 
 
         }
     }
 
-    //TODO: $aAdditionalParams variable was used but was not initiated or even defined anywhere in the method. Additionale params were not attached to the URL because of it.
-    //So, I added the the variable as function parameter and updated method calls accordingly.
-    protected function addAdditionalUrlParams($sUrl, $aAdditionalParams, $bReplacePagesParams)
+    protected function addAdditionalUrlParams($sUrl, $aAdditionalParams, $bReplacePagesParams, $bAddPaginateParams = true)
     {
-        // add pages params
-        $sUrl = bx_append_url_params($sUrl, array (
-            'start' => $bReplacePagesParams ? (int)$this->aCurrent['paginate']['start'] : '{start}',
-            'per_page' => $bReplacePagesParams ? (int)$this->aCurrent['paginate']['perPage'] : '{per_page}',
-        ));
+        if ($bAddPaginateParams) { // add pages params
+            $sUrl = bx_append_url_params($sUrl, array (
+                'start' => $bReplacePagesParams ? (int)$this->aCurrent['paginate']['start'] : '{start}',
+                'per_page' => $bReplacePagesParams ? (int)$this->aCurrent['paginate']['perPage'] : '{per_page}',
+            ));
+        }
 
         foreach ($this->aGetParams as $sGetParam) {
             $sValue = false;