فهرست منبع

#3890 - Discussions & Tags cloud

roman.lesnikov@gmail.com 4 سال پیش
والد
کامیت
fcab166d27
27فایلهای تغییر یافته به همراه471 افزوده شده و 131 حذف شده
  1. 8 0
      inc/js/functions.js
  2. 2 1
      install/sql/system.sql
  3. 4 4
      modules/boonex/artificer/data/template/system/css/general.css
  4. 3 3
      modules/boonex/artificer/data/template/system/css/menu.css
  5. 1 1
      modules/boonex/artificer/data/template/system/menu_vertical_more_less.html
  6. 2 0
      modules/boonex/english/data/langs/system/en.xml
  7. 1 1
      modules/boonex/forum/classes/BxForumGrid.php
  8. 230 0
      modules/boonex/forum/classes/BxForumMenuCategories.php
  9. 0 71
      modules/boonex/forum/classes/BxForumModule.php
  10. 3 0
      modules/boonex/forum/install/langs/en.xml
  11. 10 4
      modules/boonex/forum/install/sql/enable.sql
  12. 0 19
      modules/boonex/forum/template/category_list.html
  13. 3 0
      modules/boonex/forum/template/css/main.css
  14. 1 1
      modules/boonex/forum/template/entry-preview.html
  15. 0 3
      modules/boonex/forum/template/images/icons/all-cat.svg
  16. 0 3
      modules/boonex/forum/template/images/icons/default-cat.svg
  17. 6 6
      modules/boonex/forum/template/unit.html
  18. 5 5
      modules/boonex/protean/data/template/system/css/menu.less
  19. 2 0
      modules/boonex/russian/data/langs/system/ru.xml
  20. 4 1
      plugins_public/tailwind/css/tailwind.css
  21. 0 0
      plugins_public/tailwind/css/tailwind.min.css
  22. 2 2
      template/css/general.css
  23. 1 1
      template/menu_vertical_more_less.html
  24. 1 1
      template/scripts/BxBaseMenuProfileStats.php
  25. 167 0
      template/scripts/BxBaseMenuTagsCloud.php
  26. 8 0
      template/scripts/BxBaseMetatags.php
  27. 7 4
      template/scripts/BxBaseServiceMetatags.php

+ 8 - 0
inc/js/functions.js

@@ -1407,4 +1407,12 @@ function bx_regexp_escape(s)
         .replace(/-/mg, '\\x2d');
 }
 
+function bx_click_area(link, event)
+{
+    var oEl = $(event.srcElement);
+    if (oEl.parents('A').length == 0){
+        location.href = link;
+    }
+}
+
 /** @} */

+ 2 - 1
install/sql/system.sql

@@ -4325,7 +4325,7 @@ INSERT INTO `sys_menu_templates` (`id`, `template`, `title`, `visible`) VALUES
 (18, 'menu_main_submenu_more_auto.html', '_sys_menu_template_title_main_submenu_more_auto', 0),
 (19, 'menu_floating_blocks_wide.html', '_sys_menu_template_title_floating_blocks_wide', 0),
 (20, 'menu_custom_ver.html', '_sys_menu_template_title_custom_ver', 0),
-(21, 'menu_profile_stats.html', '_sys_menu_template_title_profile_stats', 0),
+(21, 'menu_vertical_more_less.html', '_sys_menu_template_title_vertical_more_less', 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),
@@ -4377,6 +4377,7 @@ INSERT INTO `sys_objects_menu` (`object`, `title`, `set_name`, `module`, `templa
 ('sys_account_popup', '_sys_menu_title_account_popup', '', 'system', 12, 0, 1, 'BxTemplMenuAccountPopup', ''),
 ('sys_account_notifications', '_sys_menu_title_account_notifications', 'sys_account_notifications', 'system', 19, 0, 1, 'BxTemplMenuAccountNotifications', ''),
 ('sys_profile_stats', '_sys_menu_title_profile_stats', 'sys_profile_stats', 'system', 21, 0, 1, 'BxTemplMenuProfileStats', ''),
+('sys_tags_cloud', '_sys_menu_title_tags_cloud', '', 'system', 21, 0, 1, 'BxBaseMenuTagsCloud', ''),
 ('sys_profile_followings', '_sys_menu_title_profile_followings', 'sys_profile_followings', 'system', 27, 0, 1, 'BxTemplMenuProfileFollowings', ''),
 ('sys_switch_language_popup', '_sys_menu_title_switch_language_popup', 'sys_switch_language', 'system', 6, 0, 1, 'BxTemplMenuSwitchLanguage', ''),
 ('sys_switch_language_inline', '_sys_menu_title_switch_language_inline', 'sys_switch_language', 'system', 3, 0, 1, 'BxTemplMenuSwitchLanguage', ''),

+ 4 - 4
modules/boonex/artificer/data/template/system/css/general.css

@@ -72,14 +72,14 @@ import url(../../../../../../../template/css/general.css);
 }
 
 /*--- Profile Stats ---*/
-.bx-menu-profile-stats li.bx-psmi-show-more,
-.bx-menu-profile-stats li.bx-psmi-show-less {
+.bx-menu-vertical-more-less li.bx-psmi-show-more,
+.bx-menu-vertical-more-less li.bx-psmi-show-less {
     text-transform: uppercase;
     font-size: 0.875rem;
 }
 
-.bx-menu-profile-stats  li.bx-psmi-show-more:hover,
-.bx-menu-profile-stats  li.bx-psmi-show-less:hover {
+.bx-menu-vertical-more-less li.bx-psmi-show-more:hover,
+.bx-menu-vertical-more-less li.bx-psmi-show-less:hover {
     background-color: transparent;
 }
 

+ 3 - 3
modules/boonex/artificer/data/template/system/css/menu.css

@@ -163,12 +163,12 @@ div.bx-popup-menu-main.sys-add-content ul {
 
 /*--- Profile Stats/Followings Menu ---*/
 .bx-db-content .bx-profile-stats .bx-profile-avatar-cnt,
-.bx-db-content .bx-profile-stats .bx-menu-profile-stats,
-.bx-db-content.bx-content-padding-block .bx-menu-profile-stats,
+.bx-db-content .bx-profile-stats .bx-menu-vertical-more-less,
+.bx-db-content.bx-content-padding-block .bx-menu-vertical-more-less,
 .bx-db-content.bx-content-padding-block .bx-menu-profile-followings {
     margin: -0.75rem;
 }
-.bx-main.bx-pt-application .bx-main-column.narrow .bx-menu-profile-stats,
+.bx-main.bx-pt-application .bx-main-column.narrow .bx-menu-vertical-more-less,
 .bx-main.bx-pt-application .bx-main-column.narrow .bx-menu-profile-followings {
     margin-left: -0.75rem;
     margin-right: -0.75rem;

+ 1 - 1
modules/boonex/artificer/data/template/system/menu_profile_stats.html → modules/boonex/artificer/data/template/system/menu_vertical_more_less.html

@@ -1,4 +1,4 @@
-<ul class="bx-menu-profile-stats bx-menu-ver bx-menu-object-__object__ space-y-2">
+<ul class="bx-menu-vertical-more-less bx-menu-ver bx-menu-object-__object__ space-y-2">
     <bx_repeat:menu_items>
         <li class="bx-menu-item-__name__ __class_add__ rounded-md">
             <div class="bx-menu-item-cnt bx-stl-mil group">

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

@@ -3033,6 +3033,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_menu_template_title_custom_hor"><![CDATA[Horizontal menu with custom items]]></string>
     <string name="_sys_menu_template_title_custom_ver"><![CDATA[Vertical menu with custom items]]></string>
     <string name="_sys_menu_template_title_profile_followings"><![CDATA[Profile Following Menu]]></string>
+    <string name="_sys_menu_template_title_vertical_more_less"><![CDATA[Vertical menu with more/less]]></string>
     <string name="_sys_menu_template_title_profile_stats"><![CDATA[Profile Stats Menu]]></string>
     <string name="_sys_menu_title_account_dashboard"><![CDATA[Account Dashboard Menu]]></string>
     <string name="_sys_menu_title_account_dashboard_manage_tools"><![CDATA[Account Dashboard Manage Tools Menu]]></string>
@@ -3062,6 +3063,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_menu_title_profiles_create"><![CDATA[Create Profiles]]></string>
     <string name="_sys_menu_title_profile_followings"><![CDATA[Profile Following]]></string>
     <string name="_sys_menu_title_profile_stats"><![CDATA[Profile Stats]]></string>
+    <string name="_sys_menu_title_tags_cloud"><![CDATA[Tags Cloud]]></string>
     <string name="_sys_menu_title_rss"><![CDATA[RSS]]></string>
     <string name="_sys_menu_title_set_acl_level"><![CDATA[ACL Levels]]></string>
     <string name="_sys_menu_title_set_badges"><![CDATA[Badges]]></string>

+ 1 - 1
modules/boonex/forum/classes/BxForumGrid.php

@@ -230,7 +230,7 @@ class BxForumGrid extends BxTemplGrid
         $CNF = &$this->_oModule->_oConfig->CNF;
     	$oObject = isset($CNF['OBJECT_COMMENTS']) ? BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $aRow[$CNF['FIELD_ID']]) : null;
       
-        $mixedValue = $oObject ? $oObject->getCounter(['show_counter_empty' => true, 'show_counter' => false, 'show_counter_style' => 'simple', 'dynamic_mode' => true, 'caption' => '', 'show_icon' => false, 'caption_empty' => '']) : '';
+        $mixedValue = $oObject ? $oObject->getCounter(['show_counter_empty' => true, 'show_counter' => false, 'show_counter_style' => 'simple', 'dynamic_mode' => true, 'show_icon' => false, 'caption_empty' => '']) : '';
 
         return self::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     }

+ 230 - 0
modules/boonex/forum/classes/BxForumMenuCategories.php

@@ -0,0 +1,230 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaBaseView UNA Base Representation Classes
+ * @{
+ */
+
+/**
+ * Menu representation.
+ * @see BxDolMenu
+ */
+class BxForumMenuCategories extends BxTemplMenu
+{
+    protected $_iMenuItemsMin;
+    protected $_oModule;
+
+    public function __construct ($aObject, $oTemplate)
+    {
+        parent::__construct ($aObject, $oTemplate);
+
+        $this->_sModule = 'bx_forum';
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+        $this->_bDisplayAddons = true;
+    }
+
+    public function getMenuItems ()
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+        
+        $aItems = [];
+        
+        $aCategoriest = bx_srv('system', 'categories_list', ['bx_forum_cats', ['show_empty' => true]], 'TemplServiceCategory');
+        
+        if (!($o = BxDolCategory::getObjectInstance('bx_forum_cats')))
+            return $aItems;
+
+		$aCategories = $o->getCategoriesList(false, true);
+        
+		if(!isset($aCategories['bx_repeat:cats']))
+			return $aItems;
+        
+        $iCount = 0;
+        foreach ($aCategories['bx_repeat:cats'] as $sKey => $aCategory) {
+            $iCount +=  $aCategories['bx_repeat:cats'][$sKey]['num'];
+        }
+        
+        $aItems[] =  [
+            'class_add' => 'bx-psmi-show-' . $aCategories['bx_repeat:cats'][$sKey]['value'] . (bx_get('category') == '' ? ' bx-menu-item-active' : ''),
+            'name' => 'show-0',
+            'title' => _t('_bx_forum_txt_all_categories'),
+            'link' => BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']),
+            'onclick' => 'javascript:',
+            'attrs' => '',
+            'bx_if:image' => array (
+                'condition' => false,
+                'content' => [],
+            ),
+            'bx_if:image_inline' => array (
+                'condition' => false,
+                'content' => [],
+            ),
+            'bx_if:icon' => array (
+                'condition' => true,
+                'content' => ['icon' => 'swatchbook'],
+            ),
+            'bx_if:icon-a' => array (
+                'condition' => false,
+                'content' => [],
+            ),
+            'bx_if:icon-html' => array (
+                'condition' => false,
+                'content' => [],
+            ),
+            'bx_if:addon' => [
+                'condition' => true,
+                'content' => ['addon' => $iCount]
+            ]
+        ];
+        
+        
+        foreach ($aCategories['bx_repeat:cats'] as $sKey => $aCategory) {    
+            $aCategoryData = $this->_oModule->_oDb->getCategories(array('type' => 'by_category', 'category' => $aCategory['value']));
+            if(
+                isset($aCategoryData['visible_for_levels']) && $aCategoryData['visible_for_levels'] != '' && 
+                BxDolAcl::getInstance()->isMemberLevelInSet($aCategoryData['visible_for_levels'])){
+                
+                $aCategories['bx_repeat:cats'][$sKey]['icon'] = $this->_oTemplate->getImage(isset($aCategoryData['icon']) ? $aCategoryData['icon'] : 'folder', array('class' => 'sys-icon sys-colored'));
+                
+                if (!isset($aCategoryData['icon']) || $aCategoryData['icon'] == '')
+                    $aCategoryData['icon'] = 'folder';
+                
+                list($sIcon, $sIconUrl, $sIconA, $sIconHtml) = BxTemplFunctions::getInstance()->getIcon($aCategoryData['icon']);
+                
+                $aItems[] =  [
+                    // TODO
+                    'class_add' => 'bx-psmi-show-' . $aCategories['bx_repeat:cats'][$sKey]['value'] . (bx_get('category') == $aCategories['bx_repeat:cats'][$sKey]['value'] ? ' bx-menu-item-active' : ''),
+                    'name' => 'show-' . $aCategories['bx_repeat:cats'][$sKey]['value'],
+                    'title' => $aCategories['bx_repeat:cats'][$sKey]['name'],
+                    'link' => $aCategories['bx_repeat:cats'][$sKey]['url'],
+                    'onclick' => 'javascript:',
+                    'attrs' => '',
+                    'bx_if:image' => array (
+                        'condition' => (bool)$sIconUrl,
+                        'content' => array('icon_url' => $sIconUrl),
+                    ),
+                    'bx_if:image_inline' => array (
+                        'condition' => false,
+                        'content' => array('image' => ''),
+                    ),
+                    'bx_if:icon' => array (
+                        'condition' => (bool)$sIcon,
+                        'content' => array('icon' => $sIcon),
+                    ),
+                    'bx_if:icon-a' => array (
+                        'condition' => (bool)$sIconA,
+                        'content' => array('icon-a' => $sIconA),
+                    ),
+                    'bx_if:icon-html' => array (
+                        'condition' => (bool)$sIconHtml,
+                        'content' => array('icon' => $sIconHtml),
+                    ),
+                    'bx_if:addon' => [
+                        'condition' => true,
+                        'content' => ['addon' => $aCategories['bx_repeat:cats'][$sKey]['num']]
+                    ]
+                ];
+            }
+        }
+        
+        if(empty($aItems) || !is_array($aItems))
+            return $aItems;
+
+        $iMaxNum = count($aItems);
+        $iMenuItemsMin = (int)getParam('bx_forum_visible_categories');
+        if($iMaxNum <= $iMenuItemsMin)
+            return $aItems;
+
+        $mixedCollpsed = $this->getUserChoiceCollapsed();
+        $bCollpsed = $mixedCollpsed === false || $mixedCollpsed == 1;
+
+        for($i = $iMenuItemsMin; $i < $iMaxNum; $i++)
+            $aItems[$i]['class_add'] .= ' bx-mi-aux' . ($bCollpsed ? ' bx-mi-hidden' : '');
+
+        $aShowMoreLinks = [
+            'more' => ['title' => '_sys_show_more', 'icon' => 'chevron-down', 'class' => $bCollpsed ? '' : 'bx-mi-hidden'],
+            'less' => ['title' => '_sys_show_less', 'icon' => 'chevron-up', 'class' => !$bCollpsed ? '' : 'bx-mi-hidden']
+        ];
+
+        foreach($aShowMoreLinks as $sLink => $aLink)
+            $aItems[] = array(
+                'class_add' => 'bx-psmi-show-' . $sLink . ' ' . $aLink['class'],
+                'name' => 'show-' . $sLink,
+                'title' => _t($aLink['title']),
+                'link' => 'javascript:void(0)',
+                'onclick' => 'bx_menu_show_more_less(this, \'' . $this->_sObject . '\', \'.bx-menu-object-' . $this->_sObject . '\')',
+                'attrs' => '',
+                'bx_if:image' => [
+                    'condition' => false,
+                    'content' => ['icon_url' => ''],
+                ],
+                'bx_if:image_inline' => [
+                    'condition' => false,
+                    'content' => ['image' => ''],
+                ],
+                'bx_if:icon' => [
+                    'condition' => true,
+                    'content' => ['icon' => $aLink['icon']],
+                ],
+                'bx_if:icon-html' => [
+                    'condition' => false,
+                    'content' => ['icon-a' => ''],
+                ],
+                'bx_if:icon-a' => [
+                    'condition' => false,
+                    'content' => ['icon-a' => ''],
+                ],
+                'bx_if:addon' => [
+                    'condition' => false,
+                    'content' => []
+                ]
+            );
+
+        return $aItems;
+    }
+
+    protected function getMenuItemsRaw ()
+    {
+        $aItems = $this->_oQuery->getMenuItemsBy(array(
+            'type' => 'set_name', 
+            'set_name' => $this->_aObject['set_name']
+        ));
+
+        $aDuplicates = $this->_oQuery->getMenuItemsBy(array(
+            'type' => 'set_name_duplicates', 
+            'set_name' => $this->_aObject['set_name']
+        ));
+
+        $oProfile = BxDolProfile::getInstance();
+        if(!$oProfile)
+            return array();
+
+        $sModule = $oProfile->getModule();
+
+        $aResult = array();
+        foreach($aItems as $aItem) {
+            if(in_array($aItem['name'], $aDuplicates) && $aItem['module'] != $sModule)
+                continue;
+            
+            $aResult[$aItem['name']] = $aItem;
+        }
+
+        return $aResult;
+    }
+    
+    protected function _getMenuItem($a)
+    {
+        $mixedResult = parent::_getMenuItem($a);
+
+        if($mixedResult !== false && !empty($mixedResult['link']) && strpos($mixedResult['link'], 'javascript:') === false)
+            $mixedResult['link'] = bx_append_url_params($mixedResult['link'], [
+                'owner' => 1
+            ]);
+
+        return $mixedResult;
+    }
+}
+
+/** @} */

+ 0 - 71
modules/boonex/forum/classes/BxForumModule.php

@@ -158,77 +158,6 @@ class BxForumModule extends BxBaseModTextModule
         return $aContentInfo;
     }
     
-    /**
-     * @page service Service Calls
-     * @section bx_forum Discussions 
-     * @subsection bx_forum-page_blocks Page Blocks
-     * @subsubsection bx_forum-categories_list categories_list
-     * 
-     * @code bx_srv('bx_forum', 'categories_list', [...]); @endcode
-     * 
-     * Get reviews rating for particular content
-     * @param $aParams additional params array, such as 'show_empty'
-     * 
-     * @see BxForumModule::serviceCategoriesList
-     */
-    /** 
-     * @ref bx_forum-categories_list "categories_list"
-     */
-    public function serviceCategoriesList($aParams = array())
-    {
-        $aCategoriest = bx_srv('system', 'categories_list', ['bx_forum_cats', ['show_empty' => true]],'TemplServiceCategory');
-        
-        $bShowEmpty = isset($aParams['show_empty']) ? (bool)$aParams['show_empty'] : false;
-    	$bShowEmptyCategories = isset($aParams['show_empty_categories']) ? (bool)$aParams['show_empty_categories'] : false;
-
-        if (!($o = BxDolCategory::getObjectInstance('bx_forum_cats')))
-            return $bShowEmpty ? MsgBox(_t('_Empty')) : '';
-
-		$aCategories = $o->getCategoriesList($bShowEmptyCategories, true);
-        
-		if(!isset($aCategories['bx_repeat:cats']))
-			return $bShowEmpty ? MsgBox(_t('_Empty')) : '';
-    
-        $iCount = 0;
-        foreach ($aCategories['bx_repeat:cats'] as $sKey => $aCategory) {
-            $aCategories['bx_repeat:cats'][$sKey]['icon'] = '';
-            $aCategories['bx_repeat:cats'][$sKey]['class'] = $aCategory['value'] == bx_get('category') ? 'bx-forum-category-list-item-selected' : '';
-            $aCategoryData = $this->_oDb->getCategories(array('type' => 'by_category', 'category' => $aCategory['value']));
-            
-            if(isset($aCategoryData['icon']))
-                $aCategories['bx_repeat:cats'][$sKey]['icon'] = $this->_oTemplate->getImage($aCategoryData['icon'], array('class' => 'sys-icon sys-colored'));
-            else
-                $aCategories['bx_repeat:cats'][$sKey]['icon'] = $this->_oTemplate->parseImage($this->_oTemplate->getIconUrl('default-cat.svg'), ['class' => 'sys-icon sys-colored gray']);
-            
-            $aCategories['bx_repeat:cats'][$sKey]['icon'] = $this->_oTemplate->getImage(isset($aCategoryData['icon']) ? $aCategoryData['icon'] : 'folder', array('class' => 'sys-icon sys-colored'));
-            
-            $aCategories['bx_repeat:cats'][$sKey]['bx_if:show_icon'] = [
-                'condition' => $aCategories['bx_repeat:cats'][$sKey]['icon'] != '', 
-                'content' => [
-                    'icon' => $aCategories['bx_repeat:cats'][$sKey]['icon']
-                ]
-            ];
-            
-            if(isset($aCategoryData['visible_for_levels']) && $aCategoryData['visible_for_levels'] != '' && !BxDolAcl::getInstance()->isMemberLevelInSet($aCategoryData['visible_for_levels'])){
-                unset($aCategories['bx_repeat:cats'][$sKey]);
-            }  
-            $iCount +=  $aCategories['bx_repeat:cats'][$sKey]['num'];
-        }
-        
-        $CNF = &$this->_oConfig->CNF;
-        
-
-        $aCategories['bx_repeat:cats'] = array_merge([[
-            'icon' => $this->_oTemplate->parseImage($this->_oTemplate->getIconUrl('all-cat.svg'), ['class' => 'sys-icon sys-colored gray']),
-            'class' => bx_get('category') == '' ? 'bx-forum-category-list-item-selected' : '',
-            'url' => BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']),
-            'name' => _t('_bx_forum_txt_all_categories'),
-            'num' => $iCount
-        ]], $aCategories['bx_repeat:cats']);
-        
-        return $this->_oTemplate->parseHtmlByName('category_list.html', $aCategories);
-    }
-    
     /**
      * @page service Service Calls
      * @section bx_forum Discussions

+ 3 - 0
modules/boonex/forum/install/langs/en.xml

@@ -17,6 +17,8 @@
     <string name="_bx_forum_option_autosubscribe_replied"><![CDATA[Autosubscribe to replied discussions]]></string>
     <string name="_bx_forum_option_auto_activation_for_categories"><![CDATA[Auto-Activation For Categories]]></string>
     <string name="_bx_forum_option_per_page_for_favorites_lists"><![CDATA[Number of favorite lists per page]]></string>
+    <string name="_bx_forum_option_visible_categories"><![CDATA[Number of visible categories]]></string>
+    <string name="_bx_forum_option_visible_hashtags"><![CDATA[Number of visible hashtags]]></string>
 
     <string name="_bx_forum_form_entry"><![CDATA[Forum]]></string>
     <string name="_bx_forum_form_entry_display_add"><![CDATA[New discussion]]></string>
@@ -336,6 +338,7 @@
     <string name="_bx_forum_menu_item_title_sm_status"><![CDATA[Status]]></string>
     <string name="_bx_forum_menu_item_title_system_sm_badges"><![CDATA[Badges]]></string>
     <string name="_bx_forum_menu_item_title_sm_badges"><![CDATA[Badges]]></string>
+    <string name="_bx_forum_menu_title_categories"><![CDATA[Categories]]></string>
   
 
     <string name="_bx_forum_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>

+ 10 - 4
modules/boonex/forum/install/sql/enable.sql

@@ -21,7 +21,8 @@ INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `c
 ('bx_forum_per_page_for_favorites_lists', '5', @iCategId, '_bx_forum_option_per_page_for_favorites_lists', 'digit', '', '', '', 17),
 ('bx_forum_rss_num', '10', @iCategId, '_bx_forum_option_rss_num', 'digit', '', '', '', 20),
 ('bx_forum_searchable_fields', 'title,text,text_comments', @iCategId, '_bx_forum_option_searchable_fields', 'list', '', '', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:21:"get_searchable_fields";}', 30),
-('bx_forum_auto_activation_for_categories', 'on', @iCategId, '_bx_forum_option_auto_activation_for_categories', 'checkbox', '', '', '', 35);
+('bx_forum_auto_activation_for_categories', 'on', @iCategId, '_bx_forum_option_auto_activation_for_categories', 'checkbox', '', '', '', 35),
+('bx_forum_visible_categories', '10', @iCategId, '_bx_forum_option_visible_categories', 'digit', '', '', '', 40);
 -- ('bx_forum_autosubscribe_created', '', @iCategId, '_bx_forum_option_autosubscribe_created', 'checkbox', '', '', '', 40),
 -- ('bx_forum_autosubscribe_replied', '', @iCategId, '_bx_forum_option_autosubscribe_replied', 'checkbox', '', '', '', 41),
 
@@ -115,7 +116,7 @@ INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module
 
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
 ('bx_forum_category', 2, @sName, '_bx_forum_page_block_title_sys_entries_by_category', '_bx_forum_page_block_title_entries_by_category', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"browse_category";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 0, 1, 1),
-('bx_forum_category', 1, @sName, '', '_bx_forum_page_block_title_cats', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:15:\"categories_list\";}', 0, 0, 1, 1);
+('bx_forum_category', 1, @sName, '', '_bx_forum_page_block_title_cats', 11, 2147483647, 'menu', 'bx_forum_categories', 0, 0, 1, 1);
 
 -- PAGE: entries by keyword
 INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
@@ -159,11 +160,11 @@ INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module
 
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `async`, `cache_lifetime`, `submenu`, `tabs`, `hidden_on`, `visible_for_levels`, `type`, `content`, `help`, `deletable`, `copyable`, `active`, `order`) VALUES 
 ('bx_forum_home', 1, @sName, '_bx_forum_page_block_title_sys_featured_entries_view_showcase', '_bx_forum_page_block_title_featured_entries_view_showcase', 0, 0, NULL, '', 0, '', 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:15:\"browse_featured\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:8:\"showcase\";s:13:\"empty_message\";b:0;s:13:\"ajax_paginate\";b:0;}}', NULL, 0, 1, 1, 0),
-('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_cats', 11, 0, NULL, '', 0, 0, 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:15:\"categories_list\";}', NULL, 0, 1, 1, 0),
+('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_cats', 11, 0, NULL, '', 0, 0, 2147483647, 'menu', 'bx_forum_categories', NULL, 0, 1, 1, 0),
 ('bx_forum_home', 2, @sName, '_bx_forum_page_block_title_sys_multicats', '_bx_forum_page_block_title_multicats', 11, 0, NULL, '', 0, '', 2147483647, 'service', 'a:2:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:21:\"categories_multi_list\";}', NULL, 0, 1, 0, 1),
 ('bx_forum_home', 3, @sName, '', '_bx_forum_page_block_title_home', 11, 0, NULL, '', 0, '', 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:13:\"browse_latest\";s:6:\"params\";a:3:{i:0;s:5:\"table\";i:1;b:1;i:2;b:0;}}', NULL, 0, 1, 1, 1),
 ('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_browse_labels', 11, 0, NULL, '', 0, '', 2147483647, 'service', 'a:3:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:13:\"browse_labels\";s:5:\"class\";s:20:\"TemplServiceMetatags\";}', NULL, 0, 1, 0, 2),
-('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_popular_keywords', 11, 0, NULL, '', 0, '', 2147483647, 'service', 'a:4:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:14:\"keywords_cloud\";s:6:\"params\";a:2:{i:0;s:8:\"bx_forum\";i:1;s:8:\"bx_forum\";}s:5:\"class\";s:20:\"TemplServiceMetatags\";}', NULL, 0, 1, 1, 3),
+('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_popular_keywords', 11, 0, NULL, '', 0, '', 2147483647, 'service', 'a:4:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:14:\"keywords_cloud\";s:6:\"params\";a:3:{i:0;s:8:\"bx_forum\";i:1;s:8:\"bx_forum\";i:2;a:1:{s:9:\"menu_view\";b:1;}}s:5:\"class\";s:20:\"TemplServiceMetatags\";}', NULL, 0, 1, 1, 3),
 ('bx_forum_home', 2, @sName, '_bx_forum_page_block_title_popular_entries_view_extended', '_bx_forum_page_block_title_popular_entries', 11, 0, NULL, '', 0, '', 2147483647, 'service', 'a:3:{s:6:\"module\";s:8:\"bx_forum\";s:6:\"method\";s:14:\"browse_popular\";s:6:\"params\";a:1:{i:0;s:8:\"extended\";}}', NULL, 0, 1, 1, 3);
 
 
@@ -395,6 +396,11 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
 ('sys_profile_stats', @sName, 'profile-stats-my-forum', '_bx_forum_menu_item_title_system_discussions', '_bx_forum_menu_item_title_discussions', 'page.php?i=discussions-author&profile_id={member_id}', '', '', 'far comments col-blue2', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:19:"get_discussions_num";}', '', 2147483646, 1, 0, 2);
 
+-- MENU: categories
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_forum_categories', '_bx_forum_menu_title_categories', '', 'bx_forum', 21, 0, 1, 'BxForumMenuCategories', 'modules/boonex/forum/classes/BxForumMenuCategories.php');
+
+
 -- MENU: dashboard manage tools
 SET @iManageMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_account_dashboard_manage_tools' LIMIT 1);
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 

+ 0 - 19
modules/boonex/forum/template/category_list.html

@@ -1,19 +0,0 @@
-<ul class="bx-menu-ver bx-menu-object-sys_profile_stats space-y-2 bx-forum-category-list">
-	<bx_repeat:cats>
-		<li class="bx-menu-item-profile-stats-profile rounded-md __class__ bx-category-list-item bx-forum-category-list-item">
-            <div class="bx-menu-item-cnt bx-stl-mil group">
-                <a class="flex flex-2 items-center truncate" href="__url__">
-                    <bx_if:show_icon>
-                        <span class="bx-menu-item-icon bx-forum-icon bx-stl-mii group-hover:text-gray-700 dark:group-hover:text-gray-300">
-                            __icon__
-                        </span>
-                    </bx_if:show_icon>
-                    <span class="bx-menu-item-title bx-stl-mit">__name__</span>
-                </a>
-				<div class="bx-menu-addon bx-stl-mia flex-none group-hover:text-gray-800 dark:group-hover:text-gray-100">
-                        <div class="bx-menu-addon-cnt">__num__</div>
-				</div>
-            </div>
-        </li>
-	</bx_repeat:cats>
-</ul>

+ 3 - 0
modules/boonex/forum/template/css/main.css

@@ -542,6 +542,9 @@
 .bx-forum-grid .sys-action-counter-label.bx-score-counter-label{
 	padding: 0px !important;
 }
+.bx-forum-grid .sys-action-counter-iconset .sys-action-counter-text{
+    display: none;
+}
 
 
 /* ---------------new meta menu need to move incore*/

+ 1 - 1
modules/boonex/forum/template/entry-preview.html

@@ -1,4 +1,4 @@
-<div class="group block hover:bg-gray-50 dark:hover:bg-gray-700/20">
+<div class="group block hover:bg-gray-50 dark:hover:bg-gray-700/20" onClick="bx_click_area('__url__', event)">
     <div class="p-4">
         <div class="min-w-0 flex sm:items-top justify-between align-top">
             <div class="pr-4 flex-1 grow">

+ 0 - 3
modules/boonex/forum/template/images/icons/all-cat.svg

@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="#6B7280">
-  <path fill-rule="evenodd" d="M4 2a2 2 0 00-2 2v11a3 3 0 106 0V4a2 2 0 00-2-2H4zm1 14a1 1 0 100-2 1 1 0 000 2zm5-1.757l4.9-4.9a2 2 0 000-2.828L13.485 5.1a2 2 0 00-2.828 0L10 5.757v8.486zM16 18H9.071l6-6H16a2 2 0 012 2v2a2 2 0 01-2 2z" clip-rule="evenodd" />
-</svg>

+ 0 - 3
modules/boonex/forum/template/images/icons/default-cat.svg

@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="#6B7280">
-  <path d="M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z" />
-</svg>

+ 6 - 6
modules/boonex/forum/template/unit.html

@@ -1,10 +1,10 @@
 <div class="__class__ bx-base-text-unit bx-forum-unit bx-def-gal-unit-size flex flex-col w-full box-border relative border-b border-gray-200 pb-1 mb-2">
     <div class="bx-base-text-unit-text box-border max-w-full">
-            <div class="bx-base-text-unit-title flex items-center text-left mb-1">
-                <a href="__content_url__" class="overflow-hidden text-base font-semibold text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white">__title__</a>
-            </div>
-            <div class="bx-base-text-unit-info text-xs">
-                 <bx_if:meta><div class="bx-base-general-unit-meta pb-2">__meta__</div></bx_if:meta>
-            </div>
+        <div class="bx-base-text-unit-title flex items-center text-left mb-1">
+            <a href="__content_url__" class="overflow-hidden text-base font-semibold text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white">__title__</a>
         </div>
+        <div class="bx-base-text-unit-info text-xs">
+             <bx_if:meta><div class="bx-base-general-unit-meta pb-2">__meta__</div></bx_if:meta>
+        </div>
+    </div>
 </div>

+ 5 - 5
modules/boonex/protean/data/template/system/css/menu.less

@@ -13,24 +13,24 @@
     }
 
     /* --------------- profile stats menu */
-    ul.bx-menu-ver.bx-menu-profile-stats li {
+    ul.bx-menu-ver.bx-menu-vertical-more-less li {
         margin-top: 0;
 
         border-top: 1px solid @bx-border-color-hr; 
     }
-    ul.bx-menu-ver.bx-menu-profile-stats li > .bx-def-padding-thd-topbottom {
+    ul.bx-menu-ver.bx-menu-vertical-more-less li > .bx-def-padding-thd-topbottom {
         padding-top: 0.5rem;
         padding-bottom: 0.5rem;
     }
-    ul.bx-menu-ver.bx-menu-profile-stats li > .bx-def-padding-sec-leftright {
+    ul.bx-menu-ver.bx-menu-vertical-more-less li > .bx-def-padding-sec-leftright {
         padding-left: 1.0rem;
         padding-right: 1.0rem;
     }
-    ul.bx-menu-ver.bx-menu-profile-stats li > .bx-def-padding-sec-right {
+    ul.bx-menu-ver.bx-menu-vertical-more-less li > .bx-def-padding-sec-right {
         padding-right: 1.0rem;
     }
 
-    ul.bx-menu-ver.bx-menu-profile-stats li.bx-menu-item-profile-stats-profile .bx-menu-addon .bx-def-label.menu {
+    ul.bx-menu-ver.bx-menu-vertical-more-less li.bx-menu-item-profile-stats-profile .bx-menu-addon .bx-def-label.menu {
         background-color: rgba(0,134,214, 1);
     }
 

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

@@ -3010,6 +3010,7 @@
     <string name="_sys_menu_template_title_custom_hor"><![CDATA[Горизонтальное меню с индивидуальными элементами]]></string>
     <string name="_sys_menu_template_title_custom_ver"><![CDATA[Вертикальное меню с индивидуальными элементами]]></string>
     <string name="_sys_menu_template_title_profile_followings"><![CDATA[Подписки профиля - Меню]]></string>
+    <string name="_sys_menu_template_title_vertical_more_less"><![CDATA[Вертикальное меню с больше/меньше]]></string>
     <string name="_sys_menu_template_title_profile_stats"><![CDATA[Статистика профиля - Меню]]></string>
     <string name="_sys_menu_title_account_dashboard"><![CDATA[Панель аккаунта - Меню]]></string>
     <string name="_sys_menu_title_account_dashboard_manage_tools"><![CDATA[Панель аккаунта - Меню инструментов управления]]></string>
@@ -3039,6 +3040,7 @@
     <string name="_sys_menu_title_profiles_create"><![CDATA[Профиль - Создание]]></string>
     <string name="_sys_menu_title_profile_followings"><![CDATA[Профиль - Подписки]]></string>
     <string name="_sys_menu_title_profile_stats"><![CDATA[Профиль - Статистика]]></string>
+    <string name="_sys_menu_title_tags_cloud"><![CDATA[Облако тегов]]></string>
     <string name="_sys_menu_title_rss"><![CDATA[RSS]]></string>
     <string name="_sys_menu_title_set_acl_level"><![CDATA[Уровни доступа]]></string>
     <string name="_sys_menu_title_set_badges"><![CDATA[Бейджи]]></string>

+ 4 - 1
plugins_public/tailwind/css/tailwind.css

@@ -838,12 +838,15 @@
     .bx-stl-mil-active {
         @apply active:bg-gray-300 dark:active:bg-black/50;
     }
+    
     .bx-popup ul:not(.bx-menu-hor) .bx-stl-mil,
     .bx-popup ul:not(.bx-menu-hor) .bx-stl-mil-sm {
         @apply rounded-none;
     }
     .bx-menu-tab-active .bx-stl-mil,
-    .bx-menu-tab-active .bx-stl-mil-sm {
+    .bx-menu-tab-active .bx-stl-mil-sm,
+    .bx-menu-item-active .bx-stl-mil
+    {
         @apply ring-1 ring-white/50 dark:ring-gray-800/50 bg-gray-200 dark:bg-gray-900 text-gray-900 dark:text-white;
     }
     .bx-popup .bx-menu-tab-active .bx-stl-mil,

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
plugins_public/tailwind/css/tailwind.min.css


+ 2 - 2
template/css/general.css

@@ -389,8 +389,8 @@ div.bx-account-unit-online {
     text-overflow: ellipsis;
 }
 
-.bx-menu-profile-stats li.bx-psmi-show-more:hover,
-.bx-menu-profile-stats li.bx-psmi-show-less:hover {
+.bx-menu-vertical-more-less li.bx-psmi-show-more:hover,
+.bx-menu-vertical-more-less li.bx-psmi-show-less:hover {
     background-color: transparent;
 }
 

+ 1 - 1
template/menu_profile_stats.html → template/menu_vertical_more_less.html

@@ -1,4 +1,4 @@
-<ul class="bx-menu-profile-stats bx-menu-ver bx-menu-object-__object__ bx-def-font-middle bx-clearfix">
+<ul class="bx-menu-vertical-more-less bx-menu-ver bx-menu-object-__object__ bx-def-font-middle bx-clearfix">
     <bx_repeat:menu_items>
         <li class="bx-menu-item-__name__ bx-def-round-corners bx-def-color-bg-hl-hover __class_add__">
             <div class="bx-menu-item-cnt bx-def-padding-thd-topbottom bx-def-padding-sec-leftright">

+ 1 - 1
template/scripts/BxBaseMenuProfileStats.php

@@ -50,7 +50,7 @@ class BxBaseMenuProfileStats extends BxTemplMenuAccountNotifications
                 'name' => 'show-' . $sLink,
                 'title' => _t($aLink['title']),
                 'link' => 'javascript:void(0)',
-                'onclick' => 'bx_menu_show_more_less(this, \'' . $this->_sObject . '\', \'.bx-menu-profile-stats\')',
+                'onclick' => 'bx_menu_show_more_less(this, \'' . $this->_sObject . '\', \'.bx-menu-object-' . $this->_sObject . '\')',
                 'attrs' => '',
                 'bx_if:image' => [
                     'condition' => false,

+ 167 - 0
template/scripts/BxBaseMenuTagsCloud.php

@@ -0,0 +1,167 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaBaseView UNA Base Representation Classes
+ * @{
+ */
+
+/**
+ * Menu representation.
+ * @see BxDolMenu
+ */
+class BxBaseMenuTagsCloud extends BxTemplMenu
+{
+    protected $_iMenuItemsMin;
+    protected $_aItems;
+
+    public function __construct ($aObject, $oTemplate)
+    {
+        parent::__construct ($aObject, $oTemplate);
+        
+        $this->_bDisplayAddons = true;
+        $this->_iMenuItemsMin = 10;
+    }
+    
+    public function setKeywords($aKeywords, $oMetaObject, $mixedSection)
+    {
+        foreach ($aKeywords as $sKeyword => $iCount) {    
+            $aItems[] =  [
+                'class_add' => 'bx-psmi-show-' . $sKeyword . ' ',
+                'name' => 'show-' . $sKeyword,
+                'title' => htmlspecialchars_adv($sKeyword),
+                'link' => $oMetaObject->keywordsGetHashTagUrl($sKeyword, 0, $mixedSection),
+                'onclick' => 'javascript:',
+                'attrs' => '',
+                'bx_if:image' => array (
+                    'condition' => false,
+                    'content' => [],
+                ),
+                'bx_if:image_inline' => array (
+                    'condition' => false,
+                    'content' => [],
+                ),
+                'bx_if:icon' => array (
+                    'condition' => true,
+                    'content' => array('icon' => 'hashtag'),
+                ),
+                'bx_if:icon-a' => array (
+                    'condition' => false,
+                    'content' => [],
+                ),
+                'bx_if:icon-html' => array (
+                    'condition' => false,
+                    'content' => [],
+                ),
+                'bx_if:addon' => [
+                    'condition' => true,
+                    'content' => ['addon' => $iCount]
+                ]
+            ];
+        }
+        
+        $this->_aItems = $aItems;
+    }
+    
+    public function getMenuItems ()
+    {
+        $aItems = $this->_aItems;
+        if(empty($aItems) || !is_array($aItems))
+            return $aItems;
+
+        $iMaxNum = count($aItems);
+        if($iMaxNum <= $this->_iMenuItemsMin)
+            return $aItems;
+
+        $mixedCollpsed = $this->getUserChoiceCollapsed();
+        $bCollpsed = $mixedCollpsed === false || $mixedCollpsed == 1;
+
+        for($i = $this->_iMenuItemsMin; $i < $iMaxNum; $i++)
+            $aItems[$i]['class_add'] .= ' bx-mi-aux' . ($bCollpsed ? ' bx-mi-hidden' : '');
+
+        $aShowMoreLinks = [
+            'more' => ['title' => '_sys_show_more', 'icon' => 'chevron-down', 'class' => $bCollpsed ? '' : 'bx-mi-hidden'],
+            'less' => ['title' => '_sys_show_less', 'icon' => 'chevron-up', 'class' => !$bCollpsed ? '' : 'bx-mi-hidden']
+        ];
+
+        foreach($aShowMoreLinks as $sLink => $aLink)
+            $aItems[] = array(
+                'class_add' => 'bx-psmi-show-' . $sLink . ' ' . $aLink['class'],
+                'name' => 'show-' . $sLink,
+                'title' => _t($aLink['title']),
+                'link' => 'javascript:void(0)',
+                'onclick' => 'bx_menu_show_more_less(this, \'' . $this->_sObject . '\', \bx-menu-object-' . $this->_sObject . '\')',
+                'attrs' => '',
+                'bx_if:image' => [
+                    'condition' => false,
+                    'content' => ['icon_url' => ''],
+                ],
+                'bx_if:image_inline' => [
+                    'condition' => false,
+                    'content' => ['image' => ''],
+                ],
+                'bx_if:icon' => [
+                    'condition' => true,
+                    'content' => ['icon' => $aLink['icon']],
+                ],
+                'bx_if:icon-html' => [
+                    'condition' => false,
+                    'content' => ['icon-a' => ''],
+                ],
+                'bx_if:icon-a' => [
+                    'condition' => false,
+                    'content' => ['icon-a' => ''],
+                ],
+                'bx_if:addon' => [
+                    'condition' => false,
+                    'content' => []
+                ]
+            );
+
+        return $aItems;
+    }
+
+    protected function getMenuItemsRaw ()
+    {
+        $aItems = $this->_oQuery->getMenuItemsBy(array(
+            'type' => 'set_name', 
+            'set_name' => $this->_aObject['set_name']
+        ));
+
+        $aDuplicates = $this->_oQuery->getMenuItemsBy(array(
+            'type' => 'set_name_duplicates', 
+            'set_name' => $this->_aObject['set_name']
+        ));
+
+        $oProfile = BxDolProfile::getInstance();
+        if(!$oProfile)
+            return array();
+
+        $sModule = $oProfile->getModule();
+
+        $aResult = array();
+        foreach($aItems as $aItem) {
+            if(in_array($aItem['name'], $aDuplicates) && $aItem['module'] != $sModule)
+                continue;
+            
+            $aResult[$aItem['name']] = $aItem;
+        }
+
+        return $aResult;
+    }
+    
+    protected function _getMenuItem($a)
+    {
+        $mixedResult = parent::_getMenuItem($a);
+
+        if($mixedResult !== false && !empty($mixedResult['link']) && strpos($mixedResult['link'], 'javascript:') === false)
+            $mixedResult['link'] = bx_append_url_params($mixedResult['link'], [
+                'owner' => 1
+            ]);
+
+        return $mixedResult;
+    }
+}
+
+/** @} */

+ 8 - 0
template/scripts/BxBaseMetatags.php

@@ -68,6 +68,13 @@ class BxBaseMetatags extends BxDolMetatags
         $aKeywords = $this->keywordsPopularList($iMaxCount, isset($aParams['context_id']) ? $aParams['context_id'] : 0);
         if(!$aKeywords)
             return $bAsArray ? array() : '';
+        
+        if (isset($aParams['menu_view']) && $aParams['menu_view'] == true){
+            $oMenu = BxDolMenu::getObjectInstance('sys_tags_cloud');
+            arsort($aKeywords);
+            $oMenu->setKeywords($aKeywords, $this, $mixedSection);
+            return $oMenu->getCode();
+        }
 
         ksort($aKeywords, SORT_LOCALE_STRING);
 
@@ -96,6 +103,7 @@ class BxBaseMetatags extends BxDolMetatags
             return $aVars;
 
         $this->addCssJs();
+        
         return $this->_oTemplate->parseHtmlByName('metatags_keywords_cloud.html', $aVars);
     }
 

+ 7 - 4
template/scripts/BxBaseServiceMetatags.php

@@ -50,12 +50,15 @@ class BxBaseServiceMetatags extends BxDol
     {
     	$iMaxCount = isset($aParams['max_count']) ? (int)$aParams['max_count'] : BX_METATAGS_KEYWORDS_IN_CLOUD;
     	$bShowEmpty = isset($aParams['show_empty']) ? (bool)$aParams['show_empty'] : false;
-
+        $bMenuView = isset($aParams['menu_view']) ? (bool)$aParams['menu_view'] : false;
+        
         $aContextInfo = bx_get_page_info();
+        
+        $aParams = ['menu_view' => $bMenuView];
         if ($aContextInfo !== false)
-            $sResult = BxDolMetatags::getObjectInstance($sObject)->getKeywordsCloud($mixedSection, $iMaxCount, false, ['context_id' => $aContextInfo['context_profile_id']]);
-        else
-            $sResult = BxDolMetatags::getObjectInstance($sObject)->getKeywordsCloud($mixedSection, $iMaxCount);
+            $aParams['context_id'] = $aContextInfo['context_profile_id'];
+
+        $sResult = BxDolMetatags::getObjectInstance($sObject)->getKeywordsCloud($mixedSection, $iMaxCount, false, $aParams);
 
         if(empty($sResult))
             return $bShowEmpty ? MsgBox(_t('_Empty')) : '';

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است