diff --git a/classes/actions/ActionAjax.class.php b/classes/actions/ActionAjax.class.php index ba2ed21a..ff3046a6 100644 --- a/classes/actions/ActionAjax.class.php +++ b/classes/actions/ActionAjax.class.php @@ -63,6 +63,7 @@ class ActionAjax extends Action { $this->AddEventPreg('/^blogs$/i','/^top$/','EventBlogsTop'); $this->AddEventPreg('/^blogs$/i','/^self$/','EventBlogsSelf'); $this->AddEventPreg('/^blogs$/i','/^join$/','EventBlogsJoin'); + $this->AddEventPreg('/^blogs$/i','/^get-by-category$/','EventBlogsGetByCategory'); $this->AddEventPreg('/^preview$/i','/^text$/','EventPreviewText'); $this->AddEventPreg('/^preview$/i','/^topic/','EventPreviewTopic'); @@ -945,6 +946,54 @@ class ActionAjax extends Action { return; } } + + /** + * Загружает список блогов конкретной категории + */ + protected function EventBlogsGetByCategory() { + if (!($oCategory=$this->Blog_GetCategoryById(getRequestStr('id')))) { + $this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error')); + return; + } + /** + * Получаем все дочерние категории + */ + $aCategoriesId=$this->Blog_GetChildrenCategoriesById($oCategory->getId(),true); + $aCategoriesId[]=$oCategory->getId(); + /** + * Формируем фильтр для получения списка блогов + */ + $aFilter=array( + 'exclude_type' => 'personal', + 'category_id' => $aCategoriesId + ); + /** + * Получаем список блогов(все по фильтру) + */ + $aResult=$this->Blog_GetBlogsByFilter($aFilter,array('blog_title'=>'asc'),1,PHP_INT_MAX); + $aBlogs=$aResult['collection']; + /** + * Получаем список блогов и формируем ответ + */ + if ($aBlogs) { + $aResult=array(); + foreach($aBlogs as $oBlog) { + $aResult[]=array( + 'id' => $oBlog->getId(), + 'title' => htmlspecialchars($oBlog->getTitle()), + 'category_id' => $oBlog->getCategoryId(), + 'type' => $oBlog->getType(), + 'rating' => $oBlog->getRating(), + 'url' => $oBlog->getUrl(), + 'url_full' => $oBlog->getUrlFull(), + ); + } + $this->Viewer_AssignAjax('aBlogs',$aResult); + } else { + $this->Message_AddErrorSingle($this->Lang_Get('blog_by_category_empty'),$this->Lang_Get('attention')); + return; + } + } /** * Предпросмотр топика * diff --git a/classes/actions/ActionBlogs.class.php b/classes/actions/ActionBlogs.class.php index f3de20f4..1112620d 100644 --- a/classes/actions/ActionBlogs.class.php +++ b/classes/actions/ActionBlogs.class.php @@ -37,6 +37,10 @@ class ActionBlogs extends Action { 'blog_join','blog_leave' )); $this->sPageRoot=Router::GetPath('blogs'); + /** + * Устанавливаем title страницы + */ + $this->Viewer_AddHtmlTitle($this->Lang_Get('blog_menu_all_list')); } /** * Регистрируем евенты @@ -104,6 +108,7 @@ class ActionBlogs extends Action { * Получаем текущую категорию */ if ($oCategory=$this->Blog_GetCategoryByUrlFull($sUrlFull)) { + $this->Viewer_AddHtmlTitle($oCategory->getTitle()); /** * Получаем все дочерние категории */ @@ -171,10 +176,6 @@ class ActionBlogs extends Action { $this->Viewer_Assign("sBlogOrder",htmlspecialchars($sOrder)); $this->Viewer_Assign("sBlogOrderWay",htmlspecialchars($sOrderWay)); $this->Viewer_Assign("sBlogOrderWayNext",htmlspecialchars($sOrderWay=='desc' ? 'asc' : 'desc')); - /** - * Устанавливаем title страницы - */ - $this->Viewer_AddHtmlTitle($this->Lang_Get('blog_menu_all_list')); /** * Устанавливаем шаблон вывода */ diff --git a/classes/blocks/BlockCategoryBlog.class.php b/classes/blocks/BlockBlogCategory.class.php similarity index 89% rename from classes/blocks/BlockCategoryBlog.class.php rename to classes/blocks/BlockBlogCategory.class.php index ab633faf..580e0f11 100644 --- a/classes/blocks/BlockCategoryBlog.class.php +++ b/classes/blocks/BlockBlogCategory.class.php @@ -21,11 +21,14 @@ * @package blocks * @since 1.1 */ -class BlockCategoryBlog extends Block { +class BlockBlogCategory extends Block { /** * Запуск обработки */ public function Exec() { + if (!Config::Get('module.blog.category_allow')) { + return; + } $aCategories=$this->Blog_GetCategoriesTree(); $aBlogsAll=$this->Blog_GetBlogsByFilter(array('exclude_type' => 'personal'),array(),1,1,array()); $this->Viewer_Assign("aBlogCategories",$aCategories); diff --git a/classes/blocks/BlockBlogNavigator.class.php b/classes/blocks/BlockBlogNavigator.class.php new file mode 100644 index 00000000..7c00d22c --- /dev/null +++ b/classes/blocks/BlockBlogNavigator.class.php @@ -0,0 +1,58 @@ +Blog_GetCategoriesTree(); + $this->Viewer_Assign("aNavigatorBlogCategories",$aCategories); + /** + * Получаем список блогов для первой категории для прогрузки в шаблон + */ + if ($oCategory=array_shift($aCategories)) { + /** + * Получаем все дочерние категории + */ + $aCategoriesId=$this->Blog_GetChildrenCategoriesById($oCategory->getId(),true); + $aCategoriesId[]=$oCategory->getId(); + /** + * Формируем фильтр для получения списка блогов + */ + $aFilter=array( + 'exclude_type' => 'personal', + 'category_id' => $aCategoriesId + ); + /** + * Получаем список блогов(все по фильтру) + */ + $aResult=$this->Blog_GetBlogsByFilter($aFilter,array('blog_title'=>'asc'),1,PHP_INT_MAX); + $this->Viewer_Assign("aNavigatorBlogs",$aResult['collection']); + } + } +} +?> \ No newline at end of file diff --git a/config/config.php b/config/config.php index 84d9f7e3..048cb752 100644 --- a/config/config.php +++ b/config/config.php @@ -424,7 +424,10 @@ $config['block']['rule_index_blog'] = array( ), 'clear' => false, ); - +$config['block']['rule_index'] = array( + 'action' => array( 'index' ), + 'blocks' => array( 'right' => array('blogNavigator'=>array('priority'=>500)) ), +); $config['block']['rule_topic_type'] = array( 'action' => array( 'link' => array('add','edit'), @@ -452,7 +455,7 @@ $config['block']['rule_tag'] = array( ); $config['block']['rule_blogs'] = array( 'action' => array( 'blogs' ), - 'blocks' => array( 'right' => array('categoryBlog') ), + 'blocks' => array( 'right' => array('blogCategory') ), ); $config['block']['userfeedBlogs'] = array( diff --git a/templates/framework/js/livestreet/blog.js b/templates/framework/js/livestreet/blog.js index ff3ff6be..35a081a3 100644 --- a/templates/framework/js/livestreet/blog.js +++ b/templates/framework/js/livestreet/blog.js @@ -177,5 +177,30 @@ ls.blog = (function ($) { return false; }; + this.loadBlogsByCategory = function(id) { + var url = aRouter['ajax']+'blogs/get-by-category/'; + var params = {id: id}; + + ls.hook.marker('loadBlogsByCategoryBefore'); + ls.ajax(url, params, function(result){ + var $blogs=$('#blog-navigator-blog').empty(); + if (result.bStateError) { + ls.msg.error(null, result.sMsg); + } else { + $(result.aBlogs).each(function(k,v){ + $('').appendTo($blogs); + }); + ls.hook.run('ls_blog_load_blogs_by_category_after',[id,result]); + } + }); + }; + + this.navigatorGoSelectBlog = function() { + var $sel=$('#blog-navigator-blog').find('option:selected'); + if ($sel.length) { + window.location.href=$sel.data('url'); + } + }; + return this; }).call(ls.blog || {},jQuery); \ No newline at end of file diff --git a/templates/language/english.php b/templates/language/english.php index 44a03b8b..75076d90 100644 --- a/templates/language/english.php +++ b/templates/language/english.php @@ -41,6 +41,7 @@ return array( 'blog_about' => 'About this blog', 'blog_expand_info' => 'More ↓', 'blog_fold_info' => 'Fold ↑', + 'blog_by_category_empty' => 'In this category, no blogs', /** * Declensions */ @@ -768,6 +769,8 @@ return array( 'block_friends_empty' => 'Empty friends list', 'block_category_blog' => 'Categories', 'block_category_blog_all' => 'All', + 'block_blog_navigator' => 'Navigation for blogs', + 'block_blog_navigator_button' => 'View', 'site_history_back' => 'Go back', 'site_go_main' => 'Go to the main page', /** diff --git a/templates/language/russian.php b/templates/language/russian.php index 5ab67df3..79e040c2 100644 --- a/templates/language/russian.php +++ b/templates/language/russian.php @@ -41,6 +41,7 @@ return array( 'blog_about' => 'О блоге', 'blog_expand_info' => 'Подробнее ↓', 'blog_fold_info' => 'Свернуть ↑', + 'blog_by_category_empty' => 'В данной категории нет блогов', /** * Declensions */ @@ -770,6 +771,8 @@ return array( 'block_friends_empty' => 'Список ваших друзей пуст', 'block_category_blog' => 'Категории', 'block_category_blog_all' => 'Все', + 'block_blog_navigator' => 'Навигация по блогам', + 'block_blog_navigator_button' => 'Смотреть', 'site_history_back' => 'Вернуться назад', 'site_go_main' => 'перейти на главную', /** diff --git a/templates/skin/developer/blocks/block.categoryBlog.tpl b/templates/skin/developer/blocks/block.blogCategory.tpl similarity index 100% rename from templates/skin/developer/blocks/block.categoryBlog.tpl rename to templates/skin/developer/blocks/block.blogCategory.tpl diff --git a/templates/skin/developer/blocks/block.blogNavigator.tpl b/templates/skin/developer/blocks/block.blogNavigator.tpl new file mode 100644 index 00000000..aeac3c07 --- /dev/null +++ b/templates/skin/developer/blocks/block.blogNavigator.tpl @@ -0,0 +1,24 @@ +{if $aNavigatorBlogCategories} +
+
+

{$aLang.block_blog_navigator}

+
+ + +
+ +

+ +

+ +
+
+{/if} \ No newline at end of file diff --git a/templates/skin/synio/blocks/block.categoryBlog.tpl b/templates/skin/synio/blocks/block.blogCategory.tpl similarity index 100% rename from templates/skin/synio/blocks/block.categoryBlog.tpl rename to templates/skin/synio/blocks/block.blogCategory.tpl diff --git a/templates/skin/synio/blocks/block.blogNavigator.tpl b/templates/skin/synio/blocks/block.blogNavigator.tpl new file mode 100644 index 00000000..aeac3c07 --- /dev/null +++ b/templates/skin/synio/blocks/block.blogNavigator.tpl @@ -0,0 +1,24 @@ +{if $aNavigatorBlogCategories} +
+
+

{$aLang.block_blog_navigator}

+
+ + +
+ +

+ +

+ +
+
+{/if} \ No newline at end of file