RomanL 8 лет назад
Родитель
Сommit
c09c53381c

+ 1 - 1
modules/boonex/glossary/classes/BxGlsrDb.php

@@ -22,7 +22,7 @@ class BxGlsrDb extends BxBaseModTextDb
     public function getAlphabeticalIndex()
     {
         $CNF = &$this->_oConfig->CNF;
-        return  $this->getColumn("SELECT DISTINCT UPPER(LEFT(TRIM(`" . $CNF['FIELD_TITLE'] . "`),1)) FROM " . $CNF['TABLE_ENTRIES'] . " ORDER BY UPPER(LEFT(TRIM(`" . $CNF['FIELD_TITLE'] . "`),1)) ");
+        return  $this->getAll("SELECT MIN(`id`) AS `row_number`, `letter`, '' AS `url` FROM ( SELECT `a`.`id`, UPPER(LEFT(TRIM(`a`.`" . $CNF['FIELD_TITLE'] . "`) ,1)) as `letter`, COUNT(*) AS `row_number` FROM " . $CNF['TABLE_ENTRIES'] . " `a` JOIN " . $CNF['TABLE_ENTRIES'] . " `b` ON `a`.`id` >= `b`.`id` AND UPPER(LEFT(TRIM(`a`.`" . $CNF['FIELD_TITLE'] . "`), 1)) = UPPER(LEFT(TRIM(`a`.`" . $CNF['FIELD_TITLE'] . "`), 1)) GROUP BY `a`.`id`, UPPER(LEFT(TRIM(`a`.`" . $CNF['FIELD_TITLE'] . "`), 1))) AS `t` GROUP BY `letter` ");
     }
 }
 

+ 15 - 2
modules/boonex/glossary/classes/BxGlsrModule.php

@@ -25,9 +25,22 @@ class BxGlsrModule extends BxBaseModTextModule
      */
     public function serviceBrowseAlphabetical ($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
     {
-        $aIndexData = $this->_oDb->getAlphabeticalIndex();
         $aTmp = $this->_serviceBrowse('alphabetical', $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
-        $sRv = $this->_oTemplate->getAlphabeticalList($aIndexData, $aTmp['content']);
+        $iPerPage = getParam('bx_glossary_per_page_browse');   
+        $aLetterData = $this->_oDb->getAlphabeticalIndex();
+        
+        $iStartPage = bx_get('start') ? bx_get('start') : 0;
+        foreach ($aLetterData as $key => $aLetter){
+            $iStart = floor($aLetter['row_number'] / $iPerPage) * $iPerPage;
+            if ($iStartPage == $iStart){
+                $aLetterData[$key]['url'] = "javascript:BxGlsrAlphabeticalList_goAnchor('" . $aLetter['letter'] . "')";
+            }
+            else{
+                $aBaseLink = bx_get('dynamic') ? parse_url($_SERVER['HTTP_REFERER']) : parse_url($_SERVER['REQUEST_URI']);
+                $aLetterData[$key]['url'] = $aBaseLink['path'] . ($iStart>0 ? '?start=' . $iStart  . '&per_page=' . $iPerPage . '&letter=' . $aLetter['letter'] :  '?letter=' . $aLetter['letter']); 
+            }
+        }
+        $sRv = $this->_oTemplate->getAlphabeticalList($aLetterData, $aTmp['content']);
         $aTmp['content'] = $sRv;
         return $aTmp;
     }

+ 36 - 14
modules/boonex/glossary/classes/BxGlsrSearchResult.php

@@ -100,20 +100,19 @@ class BxGlsrSearchResult extends BxBaseModTextSearchResult
                 $this->aCurrent['sorting'] = 'updated';
                 break;
 
-            case '': // search results
-                $this->sBrowseUrl = BX_DOL_SEARCH_KEYWORD_PAGE;
-                $this->aCurrent['title'] = _t('_bx_glossary');
-                unset($this->aCurrent['paginate']['perPage'], $this->aCurrent['rss']);
-                break;
-                
             case 'alphabetical':
-                $this->sBrowseUrl = BxDolPermalinks::getInstance()->permalink($CNF['URL_POPULAR']);
+                $this->sBrowseUrl = BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']);
                 $this->aCurrent['title'] = _t('_bx_glossary_page_title_browse_alphabetical');
                 $this->aCurrent['rss']['link'] = 'modules/?r=glossary/rss/' . $sMode;
                 $this->aCurrent['sorting'] = 'alphabetical';
-                unset($this->aCurrent['paginate']['perPage']);
                 break;
 
+            case '': // search results
+                $this->sBrowseUrl = BX_DOL_SEARCH_KEYWORD_PAGE;
+                $this->aCurrent['title'] = _t('_bx_glossary');
+                unset($this->aCurrent['paginate']['perPage'], $this->aCurrent['rss']);
+                break;
+                
             default:
                 $sMode = '';
                 $this->isError = true;
@@ -149,18 +148,30 @@ class BxGlsrSearchResult extends BxBaseModTextSearchResult
     
     function displayResultBlock ()
     {
+        if ($this->bShowcaseView){
+            $this->addContainerClass(array('bx-def-margin-sec-lefttopright-neg', 'bx-base-unit-showcase-wrapper'));
+			$this->aCurrent['paginate']['perPage'] = $this->getItemPerPageInShowCase();
+			$this->oModule->_oTemplate->addCss(array(BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'flickity/|flickity.css'));
+            $this->oModule->_oTemplate->addJs(array('flickity/flickity.pkgd.min.js','modules/base/general/js/|showcase.js'));
+		}
+        
+        $bIsAlphabetical = false;
+        if ($this->aCurrent['sorting'] == 'alphabetical')
+            $bIsAlphabetical = true;
+        
         $CNF = &$this->oModule->_oConfig->CNF;
         $sCode = '';
         $sLetter = '';
-        
         $aData = $this->getSearchData();
         if ($this->aCurrent['paginate']['num'] > 0) {
             $sCode .= $this->addCustomParts();
             foreach ($aData as $aValue){
-                $sTmp = mb_strtoupper(get_mb_substr($aValue[$CNF['FIELD_TITLE']], 0, 1));
-                if($sTmp != $sLetter){
-                    $sLetter = $sTmp;
-                    $sCode .= $this->oModule->_oTemplate->getAlphabeticalAnchor($sLetter);
+                if ($bIsAlphabetical){
+                    $sTmp = mb_strtoupper(get_mb_substr($aValue[$CNF['FIELD_TITLE']], 0, 1));
+                    if($sTmp != $sLetter){
+                        $sLetter = $sTmp;
+                        $sCode .= $this->oModule->_oTemplate->getAlphabeticalAnchor($sLetter);
+                    }
                 }
                 $sCode .= $this->displaySearchUnit($aValue);
             }
@@ -176,8 +187,19 @@ class BxGlsrSearchResult extends BxBaseModTextSearchResult
                         });
                     </script>";
             }
+            if ($bIsAlphabetical){
+                $this->oModule->_oTemplate->addJs('alphabetical_list.js');
+                if (bx_get('letter')){
+                    $sCode .= "
+                    <script>
+                        $(document).ready(function() {
+                            BxGlsrAlphabeticalList_goAnchor('" . bx_get('letter') . "')
+                        });
+                    </script>";
+                }
+            }
         }
-        return $sCode;
+        return $sCode;   
     }
     
 }

+ 1 - 1
modules/boonex/glossary/classes/BxGlsrTemplate.php

@@ -36,7 +36,7 @@ class BxGlsrTemplate extends BxBaseModTextTemplate
     {
         $aVars = array();
         foreach ($aLetterData as $aLetter)
-            array_push($aVars, array ('letter' => $aLetter, 'url' => $_SERVER['REQUEST_URI'] . '#' . $aLetter));
+            array_push($aVars, array ('letter' => $aLetter['letter'], 'url' => $aLetter['url']));
         return $this->parseHtmlByName('alphabetical_list.html', array ('bx_repeat:items' => $aVars, 'content_list' => $sContentList));
     }
     

+ 8 - 32
modules/boonex/glossary/install/langs/en.xml

@@ -186,38 +186,14 @@
     <string name="_bx_glossary_search_extended_cmts"><![CDATA[Terms Comments Search]]></string>
 
     <string name="_bx_glossary_pre_lists_cats"><![CDATA[Term categories]]></string>
-    <string name="_bx_glossary_cat_Animals_Pets"><![CDATA[Animals & Pets]]></string>
-    <string name="_bx_glossary_cat_Architecture"><![CDATA[Architecture]]></string>
-    <string name="_bx_glossary_cat_Art"><![CDATA[Art]]></string>
-    <string name="_bx_glossary_cat_Cars_Motorcycles"><![CDATA[Cars & Motorcycles]]></string>
-    <string name="_bx_glossary_cat_Celebrities"><![CDATA[Celebrities]]></string>
-    <string name="_bx_glossary_cat_Design"><![CDATA[Design]]></string>
-    <string name="_bx_glossary_cat_DIY_Crafts"><![CDATA[DIY & Crafts]]></string>
-    <string name="_bx_glossary_cat_Education"><![CDATA[Education]]></string>
-    <string name="_bx_glossary_cat_Film_Music_Books"><![CDATA[Film, Music & Books]]></string>
-    <string name="_bx_glossary_cat_Food_Drink"><![CDATA[Food & Drink]]></string>
-    <string name="_bx_glossary_cat_Gardening"><![CDATA[Gardening]]></string>
-    <string name="_bx_glossary_cat_Geek"><![CDATA[Geek]]></string>
-    <string name="_bx_glossary_cat_Hair_Beauty"><![CDATA[Hair & Beauty]]></string>
-    <string name="_bx_glossary_cat_Health_Fitness"><![CDATA[Health & Fitness]]></string>
-    <string name="_bx_glossary_cat_History"><![CDATA[History]]></string>
-    <string name="_bx_glossary_cat_Holidays_Events"><![CDATA[Holidays & Events]]></string>
-    <string name="_bx_glossary_cat_Home_Decor"><![CDATA[Home Decor]]></string>
-    <string name="_bx_glossary_cat_Humor"><![CDATA[Humor]]></string>
-    <string name="_bx_glossary_cat_Illustrations_Posters"><![CDATA[Illustrations & Posters]]></string>
-    <string name="_bx_glossary_cat_Kids_Parenting"><![CDATA[Kids & Parenting]]></string>
-    <string name="_bx_glossary_cat_Mens_Fashion"><![CDATA[Men's Fashion]]></string>
-    <string name="_bx_glossary_cat_Outdoors"><![CDATA[Outdoors]]></string>
-    <string name="_bx_glossary_cat_Photography"><![CDATA[Photography]]></string>
-    <string name="_bx_glossary_cat_Products"><![CDATA[Products]]></string>
-    <string name="_bx_glossary_cat_Quotes"><![CDATA[Quotes]]></string>
-    <string name="_bx_glossary_cat_Science_Nature"><![CDATA[Science & Nature]]></string>
-    <string name="_bx_glossary_cat_Sports"><![CDATA[Sports]]></string>
-    <string name="_bx_glossary_cat_Tattoos"><![CDATA[Tattoos]]></string>
-    <string name="_bx_glossary_cat_Technology"><![CDATA[Technology]]></string>
-    <string name="_bx_glossary_cat_Travel"><![CDATA[Travel]]></string>
-    <string name="_bx_glossary_cat_Weddings"><![CDATA[Weddings]]></string>
-    <string name="_bx_glossary_cat_Womens_Fashion"><![CDATA[Women's Fashion]]></string>
+    <string name="_bx_glossary_cat_Nouns"><![CDATA[Nouns]]></string>
+    <string name="_bx_glossary_cat_Pronouns"><![CDATA[Pronouns]]></string>
+    <string name="_bx_glossary_cat_Verbs"><![CDATA[Verbs]]></string>
+    <string name="_bx_glossary_cat_Adverbs"><![CDATA[Adverbs]]></string>
+    <string name="_bx_glossary_cat_Adjectives"><![CDATA[Adjectives]]></string>
+    <string name="_bx_glossary_cat_Interjections"><![CDATA[Interjections]]></string>
+    <string name="_bx_glossary_cat_Prepositions"><![CDATA[Prepositions]]></string>
+    <string name="_bx_glossary_cat_Infinitives"><![CDATA[Infinitives]]></string>
 
     <string name="_bx_glossary_txt_all_entries_by"><![CDATA[<a href="{0}">All Terms by {1} ({2})</a>]]></string>
     <string name="_bx_glossary_txt_sample_single"><![CDATA[term]]></string>

+ 8 - 32
modules/boonex/glossary/install/sql/install.sql

@@ -228,38 +228,14 @@ INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUE
 
 INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
 ('bx_glossary_cats', '', 0, '_sys_please_select', ''),
-('bx_glossary_cats', '1', 1, '_bx_glossary_cat_Animals_Pets', ''),
-('bx_glossary_cats', '2', 2, '_bx_glossary_cat_Architecture', ''),
-('bx_glossary_cats', '3', 3, '_bx_glossary_cat_Art', ''),
-('bx_glossary_cats', '4', 4, '_bx_glossary_cat_Cars_Motorcycles', ''),
-('bx_glossary_cats', '5', 5, '_bx_glossary_cat_Celebrities', ''),
-('bx_glossary_cats', '6', 6, '_bx_glossary_cat_Design', ''),
-('bx_glossary_cats', '7', 7, '_bx_glossary_cat_DIY_Crafts', ''),
-('bx_glossary_cats', '8', 8, '_bx_glossary_cat_Education', ''),
-('bx_glossary_cats', '9', 9, '_bx_glossary_cat_Film_Music_Books', ''),
-('bx_glossary_cats', '10', 10, '_bx_glossary_cat_Food_Drink', ''),
-('bx_glossary_cats', '11', 11, '_bx_glossary_cat_Gardening', ''),
-('bx_glossary_cats', '12', 12, '_bx_glossary_cat_Geek', ''),
-('bx_glossary_cats', '13', 13, '_bx_glossary_cat_Hair_Beauty', ''),
-('bx_glossary_cats', '14', 14, '_bx_glossary_cat_Health_Fitness', ''),
-('bx_glossary_cats', '15', 15, '_bx_glossary_cat_History', ''),
-('bx_glossary_cats', '16', 16, '_bx_glossary_cat_Holidays_Events', ''),
-('bx_glossary_cats', '17', 17, '_bx_glossary_cat_Home_Decor', ''),
-('bx_glossary_cats', '18', 18, '_bx_glossary_cat_Humor', ''),
-('bx_glossary_cats', '19', 19, '_bx_glossary_cat_Illustrations_Posters', ''),
-('bx_glossary_cats', '20', 20, '_bx_glossary_cat_Kids_Parenting', ''),
-('bx_glossary_cats', '21', 21, '_bx_glossary_cat_Mens_Fashion', ''),
-('bx_glossary_cats', '22', 22, '_bx_glossary_cat_Outdoors', ''),
-('bx_glossary_cats', '23', 23, '_bx_glossary_cat_Photography', ''),
-('bx_glossary_cats', '24', 24, '_bx_glossary_cat_Products', ''),
-('bx_glossary_cats', '25', 25, '_bx_glossary_cat_Quotes', ''),
-('bx_glossary_cats', '26', 26, '_bx_glossary_cat_Science_Nature', ''),
-('bx_glossary_cats', '27', 27, '_bx_glossary_cat_Sports', ''),
-('bx_glossary_cats', '28', 28, '_bx_glossary_cat_Tattoos', ''),
-('bx_glossary_cats', '29', 29, '_bx_glossary_cat_Technology', ''),
-('bx_glossary_cats', '30', 30, '_bx_glossary_cat_Travel', ''),
-('bx_glossary_cats', '31', 31, '_bx_glossary_cat_Weddings', ''),
-('bx_glossary_cats', '32', 32, '_bx_glossary_cat_Womens_Fashion', '');
+('bx_glossary_cats', '1', 1, '_bx_glossary_cat_Nouns', ''),
+('bx_glossary_cats', '2', 2, '_bx_glossary_cat_Pronouns', ''),
+('bx_glossary_cats', '3', 3, '_bx_glossary_cat_Verbs', ''),
+('bx_glossary_cats', '4', 4, '_bx_glossary_cat_Adverbs', ''),
+('bx_glossary_cats', '5', 5, '_bx_glossary_cat_Adjectives', ''),
+('bx_glossary_cats', '6', 6, '_bx_glossary_cat_Interjections', ''),
+('bx_glossary_cats', '7', 7, '_bx_glossary_cat_Prepositions', ''),
+('bx_glossary_cats', '8', 8, '_bx_glossary_cat_Infinitives', '');
 
 -- COMMENTS
 INSERT INTO `sys_objects_cmts` (`Name`, `Module`, `Table`, `CharsPostMin`, `CharsPostMax`, `CharsDisplayMax`, `Html`, `PerView`, `PerViewReplies`, `BrowseType`, `IsBrowseSwitch`, `PostFormPosition`, `NumberOfLevels`, `IsDisplaySwitch`, `IsRatable`, `ViewingThreshold`, `IsOn`, `RootStylePrefix`, `BaseUrl`, `ObjectVote`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldTitle`, `TriggerFieldComments`, `ClassName`, `ClassFile`) VALUES

+ 7 - 0
modules/boonex/glossary/js/alphabetical_list.js

@@ -0,0 +1,7 @@
+function BxGlsrAlphabeticalList_goAnchor(sAnchor) {
+    if ($('[name=' + sAnchor + ']').length){
+        $('html, body').animate({
+            scrollTop: $('[name=' + sAnchor + ']').offset().top
+        }, 100);
+    }
+}