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}
+
+
+