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

Ticket #367 - Browse categories and metatags.

AntonLV 10 лет назад
Родитель
Сommit
649b41f244

+ 32 - 0
modules/boonex/forum/classes/BxForumCategory.php

@@ -0,0 +1,32 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ *
+ * @defgroup    Forum Forum
+ * @ingroup     TridentModules
+ *
+ * @{
+ */
+
+class BxForumCategory extends BxTemplCategory
+{
+	protected $MODULE;
+	protected $_oModule;
+
+	public function __construct($aObject, $oTemplate = null)
+    {
+    	$this->MODULE = 'bx_forum';
+    	$this->_oModule = BxDolModule::getInstance($this->MODULE);
+
+        parent::__construct($aObject, $oTemplate);
+
+        $CNF = $this->_oModule->_oConfig->CNF;
+
+        $this->_sBrowseUrl = bx_append_url_params(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_CATEGORY_ENTRIES']), array(
+			'category' => '{keyword}'
+		));
+    }
+}
+
+/** @} */

+ 1 - 0
modules/boonex/forum/classes/BxForumConfig.php

@@ -57,6 +57,7 @@ class BxForumConfig extends BxBaseModTextConfig
             'URI_VIEW_ENTRY' => 'view-discussion',
             'URI_AUTHOR_ENTRIES' => 'discussions-author',
         	'URI_CATEGORY_ENTRIES' => 'discussions-category',
+        	'URI_KEYWORD_ENTRIES' => 'discussions-keyword',
             'URI_ADD_ENTRY' => 'create-discussion',
         	'URI_EDIT_ENTRY' => 'edit-discussion',
         	'URI_MANAGE_COMMON' => 'discussions-manage',

+ 40 - 20
modules/boonex/forum/classes/BxForumModule.php

@@ -115,11 +115,6 @@ class BxForumModule extends BxBaseModTextModule
         return $this->_serviceBrowseTable(array('type' => 'author', 'where' => array('fld' => 'author', 'val' => $iProfileId, 'opr' => '=')), false);
     }
 
-    public function serviceBrowseCategories($bEmptyMessage = true)
-    {
-    	return $this->_oTemplate->getCategories($bEmptyMessage);
-    }
-
     public function serviceBrowseCategory($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
     {
     	$sType = 'category';
@@ -135,6 +130,27 @@ class BxForumModule extends BxBaseModTextModule
 		return $this->_serviceBrowseTable(array('type' => $sType, 'where' => array('fld' => 'cat', 'val' => $iCategory, 'opr' => '=')));
     }
 
+    public function serviceBrowseKeywords()
+    {
+    	$CNF = $this->_oConfig->CNF;
+
+    	$aSrvParams = array($CNF['OBJECT_METATAGS'], $this->_oConfig->getName(), array(
+			'browse_url' => bx_append_url_params(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_KEYWORD_ENTRIES']), array('keyword' => '{keyword}'))
+    	));
+    	return BxDolService::call('system', 'keywords_cloud', $aSrvParams, 'TemplServiceMetatags');
+    }
+
+	public function serviceBrowseKeyword($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
+    {
+    	$sType = 'keyword';
+    	$sKeyword = bx_process_input(bx_get('keyword'));
+
+    	if($sUnitView != 'table')   
+        	return $this->_serviceBrowse($sType, $sUnitView ? array('unit_view' => $sUnitView) : false, BX_DB_PADDING_DEF, $bEmptyMessage, $bAjaxPaginate);
+
+		return $this->_serviceBrowseTable(array('type' => $sType, 'where' => $this->_getSearchKeywordDescriptor('#' . $sKeyword)));
+    }
+
     public function serviceBrowseSearchResults($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
     {
     	$sType = 'search';
@@ -157,18 +173,8 @@ class BxForumModule extends BxBaseModTextModule
         if(!empty($iCategory))
         	$aWhereGroupAnd['cnds'][] = array('fld' => 'cat', 'val' => $iCategory, 'opr' => '=');
 
-        if(!empty($sKeyword)) {
-        	$aWhereGroupOr = array('grp' => true, 'opr' => 'OR', 'cnds' => array(
-        		array('fld' => 'title', 'val' => $sKeyword, 'opr' => 'LIKE'),
-        		array('fld' => 'text', 'val' => $sKeyword, 'opr' => 'LIKE')
-        	));
-
-        	$aEntriesIds = $this->_oDb->getComments(array('type' => 'entries_keyword_search', 'keyword' => $sKeyword));
-        	if(!empty($aEntriesIds) && is_array($aEntriesIds))
-        		$aWhereGroupOr['cnds'][] = array('fld' => 'id', 'val' => $aEntriesIds, 'opr' => 'IN');
-
-        	$aWhereGroupAnd['cnds'][] = $aWhereGroupOr;
-        }
+        if(!empty($sKeyword))
+        	$aWhereGroupAnd['cnds'][] = $this->_getSearchKeywordDescriptor($sKeyword);
 
 		return $this->_serviceBrowseTable(array('type' => $sType, 'where' => $aWhereGroupAnd), false);
     }
@@ -191,7 +197,7 @@ class BxForumModule extends BxBaseModTextModule
      */
     public function serviceTriggerCommentPost ($iContentId, $iProfileId, $iCommentId, $iTimestamp = 0, $sCommentText = '')
     {
-    	$CNT = $this->_oConfig->CNF;
+    	$CNF = $this->_oConfig->CNF;
 
     	$iContentId = (int)$iContentId;
         if(!$iContentId)
@@ -208,10 +214,10 @@ class BxForumModule extends BxBaseModTextModule
 			return false;
 
         // send notification to author
-        if($iProfileId != $aContentInfo[$CNT['FIELD_AUTHOR']]) {
+        if($iProfileId != $aContentInfo[$CNF['FIELD_AUTHOR']]) {
 	        $oProfile = BxDolProfile::getInstance($iProfileId);
 	        if($oProfile)
-                sendMailTemplate('bx_forum_new_reply', 0, $aContentInfo[$CNT['FIELD_AUTHOR']], array(
+                sendMailTemplate('bx_forum_new_reply', 0, $aContentInfo[$CNF['FIELD_AUTHOR']], array(
                     'SenderDisplayName' => $oProfile->getDisplayName(),
                     'SenderUrl' => $oProfile->getUrl(),
                     'Message' => $sCommentText,
@@ -360,6 +366,20 @@ class BxForumModule extends BxBaseModTextModule
 
         return $oGrid->getCode($isDisplayHeader);
     }
+
+    protected function _getSearchKeywordDescriptor($sKeyword)
+    {
+		$aWhereGroupOr = array('grp' => true, 'opr' => 'OR', 'cnds' => array(
+			array('fld' => 'title', 'val' => $sKeyword, 'opr' => 'LIKE'),
+			array('fld' => 'text', 'val' => $sKeyword, 'opr' => 'LIKE')
+		));
+		
+		$aEntriesIds = $this->_oDb->getComments(array('type' => 'entries_keyword_search', 'keyword' => $sKeyword));
+		if(!empty($aEntriesIds) && is_array($aEntriesIds))
+			$aWhereGroupOr['cnds'][] = array('fld' => 'id', 'val' => $aEntriesIds, 'opr' => 'IN');
+			
+		return $aWhereGroupOr;
+    }
 }
 
 /** @} */

+ 6 - 0
modules/boonex/forum/classes/BxForumPageBrowse.php

@@ -27,6 +27,12 @@ class BxForumPageBrowse extends BxBaseModTextPageBrowse
 	        	'category_id' => $iCategory,
 	        	'category_name' => BxDolCategory::getObjectInstance($this->_oModule->_oConfig->CNF['OBJECT_CATEGORY'])->getCategoryTitle($iCategory),
 	        ));
+
+		$sKeyword = bx_process_input(bx_get('keyword'));
+        if(!empty($sKeyword))
+	        $this->addMarkers(array(
+	        	'keyword_name' => '#' . $sKeyword
+	        ));
     }
 
 	public function getCode()

+ 0 - 28
modules/boonex/forum/classes/BxForumTemplate.php

@@ -136,34 +136,6 @@ class BxForumTemplate extends BxBaseModTextTemplate
         return $this->parseHtmlByName('participants.html', $aVars);
     }
 
-    function getCategories($bEmptyMessage = true)
-    {
-    	$CNF = BxDolModule::getInstance($this->MODULE)->_oConfig->CNF;
-
-    	$aCategories = BxDolForm::getDataItems($CNF['OBJECT_CATEGORY']);
-    	if(empty($aCategories) ||  !is_array($aCategories))
-    		return $bEmptyMessage ? MsgBox(_t('Empty')) : '';
-
-		$oPermalink = BxDolPermalinks::getInstance();
-		$oCategories = BxDolCategory::getObjectInstance($CNF['OBJECT_CATEGORY']);
-
-		$aTmplVarsCategories = array();
-		foreach($aCategories as $iValue => $sTitle) {
-			if(empty($iValue))
-				continue;
-
-			$aTmplVarsCategories[] = array(
-				'title' => $sTitle,
-				'link' => BX_DOL_URL_ROOT . $oPermalink->permalink('page.php?i=' . $CNF['URI_CATEGORY_ENTRIES'] . '&category=' . $iValue),
-				'count' => $oCategories->getItemsNum($iValue)
-			);
-        }
-
-        return $this->parseHtmlByName('categories.html', array(
-        	'bx_repeat:categories' => $aTmplVarsCategories
-        ));
-    }
-
 	function getEntryAuthor($aRow)
     {
     	$oProfileAuthor = BxDolProfile::getInstance($aRow['author']);

+ 5 - 1
modules/boonex/forum/install/langs/en.xml

@@ -47,7 +47,7 @@
 	<string name="_bx_forum_form_search_input_do_submit"><![CDATA[Search]]></string>
 	<string name="_bx_forum_form_search_input_sys_do_submit"><![CDATA[Search]]></string>
 
-	<string name="_bx_forum_acl_action_create_entry"><![CDATA[New discussion]]></string>
+	<string name="_bx_forum_acl_action_create_entry"><![CDATA[Create new discussion]]></string>
 	<string name="_bx_forum_acl_action_delete_entry"><![CDATA[Delete discussion]]></string>
 	<string name="_bx_forum_acl_action_view_entry"><![CDATA[View discussion]]></string>
 	<string name="_bx_forum_acl_action_edit_any_entry"><![CDATA[Edit any discussion]]></string>
@@ -112,6 +112,10 @@
     <string name="_bx_forum_page_title_entries_by_category"><![CDATA[Discussions by {category_name}]]></string>
     <string name="_bx_forum_page_block_title_sys_entries_by_category"><![CDATA[Discussions by category]]></string>
     <string name="_bx_forum_page_block_title_entries_by_category"><![CDATA[Discussions by {category_name}]]></string>
+    <string name="_bx_forum_page_title_sys_entries_by_keyword"><![CDATA[Discussions by keyword]]></string>
+    <string name="_bx_forum_page_title_entries_by_keyword"><![CDATA[Discussions by {keyword_name}]]></string>
+    <string name="_bx_forum_page_block_title_sys_entries_by_keyword"><![CDATA[Discussions by keyword]]></string>
+    <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Discussions by {keyword_name}]]></string>
     <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
     <string name="_bx_forum_page_title_entries_of_author"><![CDATA[Discussions by {display_name}]]></string>
     <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[Discussions by <a href="{profile_link}">{display_name}</a>]]></string>

+ 13 - 5
modules/boonex/forum/install/sql/enable.sql

@@ -85,7 +85,7 @@ INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module
 ('bx_forum_categories', 'discussions-categories', '_bx_forum_page_title_sys_entries_categories', '_bx_forum_page_title_entries_categories', @sName, 5, 2147483647, 1, 'page.php?i=discussions-categories', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
 
 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_categories', 1, @sName, '', '_bx_forum_page_block_title_entries_categories', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:17:"browse_categories";}', 0, 0, 1, 0);
+('bx_forum_categories', 1, @sName, '', '_bx_forum_page_block_title_entries_categories', 13, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:15:"categories_list";s:6:"params";a:2:{i:0;s:13:"bx_forum_cats";i:1;a:1:{s:10:"show_empty";b:1;}}s:5:"class";s:20:"TemplServiceCategory";}', 0, 0, 1, 0);
 
 -- PAGE: entries by category
 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 
@@ -94,6 +94,14 @@ 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', 1, @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);
 
+-- 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 
+('bx_forum_keyword', 'discussions-keyword', '_bx_forum_page_title_sys_entries_by_keyword', '_bx_forum_page_title_entries_by_keyword', @sName, 5, 2147483647, 1, 'page.php?i=discussions-keyword', '', '', '', 0, 1, 0, 'BxForumPageBrowse', 'modules/boonex/forum/classes/BxForumPageBrowse.php');
+
+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_keyword', 1, @sName, '_bx_forum_page_block_title_sys_entries_by_keyword', '_bx_forum_page_block_title_entries_by_keyword', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:14:"browse_keyword";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 0, 1, 1);
+
+
 -- PAGE: entries of author
 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 
 ('bx_forum_author', 'discussions-author', '_bx_forum_page_title_sys_entries_of_author', '_bx_forum_page_title_entries_of_author', @sName, 5, 2147483647, 1, 'page.php?i=discussions-author', '', '', '', 0, 1, 0, 'BxForumPageAuthor', 'modules/boonex/forum/classes/BxForumPageAuthor.php');
@@ -108,8 +116,8 @@ 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_home', 1, @sName, '', '_bx_forum_page_block_title_latest_entries', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_latest";s:6:"params";a:1:{i:0;s:5:"table";}}', 0, 1, 1, 0),
-('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_cats', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:17:"browse_categories";}', 0, 1, 1, 0),
-('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_popular_keywords', 11, 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";}', 0, 1, 1, 1);
+('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_cats', 11, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:15:"categories_list";s:6:"params";a:2:{i:0;s:13:"bx_forum_cats";i:1;a:1:{s:10:"show_empty";b:1;}}s:5:"class";s:20:"TemplServiceCategory";}', 0, 1, 1, 0),
+('bx_forum_home', 2, @sName, '', '_bx_forum_page_block_title_popular_keywords', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"browse_keywords";}', 0, 1, 1, 1);
 
 -- PAGE: module search
 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 
@@ -244,7 +252,7 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 
 -- GRIDS: main
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_mode`, `sorting_fields`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
-(@sName, 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'text', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php');
+(@sName, 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'text,cmt_text', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php');
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
 (@sName, 'author', '', '10%', '', 1),
@@ -393,7 +401,7 @@ INSERT INTO `sys_objects_metatags` (`object`, `table_keywords`, `table_locations
 
 -- CATEGORY
 INSERT INTO `sys_objects_category` (`object`, `search_object`, `form_object`, `list_name`, `table`, `field`, `join`, `where`, `override_class_name`, `override_class_file`) VALUES
-('bx_forum_cats', @sName, @sName, 'bx_forum_cats', 'bx_forum_discussions', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = `bx_forum_discussions`.`author`)', 'AND `sys_profiles`.`status` = ''active''', '', '');
+('bx_forum_cats', @sName, @sName, 'bx_forum_cats', 'bx_forum_discussions', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = `bx_forum_discussions`.`author`)', 'AND `sys_profiles`.`status` = ''active''', 'BxForumCategory', 'modules/boonex/forum/classes/BxForumCategory.php');
 
 
 -- COMMENTS

+ 0 - 7
modules/boonex/forum/template/categories.html

@@ -1,7 +0,0 @@
-<div class="bx-category-list">
-	<bx_repeat:categories>
-		<div class="bx-category-list-item">
-			<a href="__link__">__title__</a> (__count__)
-		</div>
-	</bx_repeat:categories>
-</div>

+ 5 - 1
modules/boonex/russian/data/langs/bx_forum/ru.xml

@@ -47,7 +47,7 @@
 	<string name="_bx_forum_form_search_input_do_submit"><![CDATA[Искать]]></string>
 	<string name="_bx_forum_form_search_input_sys_do_submit"><![CDATA[Искать]]></string>
 
-	<string name="_bx_forum_acl_action_create_entry"><![CDATA[Новое обсуждение]]></string>
+	<string name="_bx_forum_acl_action_create_entry"><![CDATA[Создавать новое обсуждение]]></string>
 	<string name="_bx_forum_acl_action_delete_entry"><![CDATA[Удалить обсуждение]]></string>
 	<string name="_bx_forum_acl_action_view_entry"><![CDATA[Просмотреть обсуждение]]></string>
 	<string name="_bx_forum_acl_action_edit_any_entry"><![CDATA[Редактировать любое обсуждение]]></string>
@@ -112,6 +112,10 @@
     <string name="_bx_forum_page_title_entries_by_category"><![CDATA[Обсуждения в {category_name}]]></string>
     <string name="_bx_forum_page_block_title_sys_entries_by_category"><![CDATA[Обсуждения в категории]]></string>
     <string name="_bx_forum_page_block_title_entries_by_category"><![CDATA[Обсуждения в {category_name}]]></string>
+    <string name="_bx_forum_page_title_sys_entries_by_keyword"><![CDATA[Обсуждения по хэштегу]]></string>
+    <string name="_bx_forum_page_title_entries_by_keyword"><![CDATA[Обсуждения по хэштегу: {keyword_name}]]></string>
+    <string name="_bx_forum_page_block_title_sys_entries_by_keyword"><![CDATA[Обсуждения по Хэштегу]]></string>
+    <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Обсуждения по хэштегу: {keyword_name}]]></string>
     <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Обсуждения автора]]></string>
     <string name="_bx_forum_page_title_entries_of_author"><![CDATA[{display_name} - Обсуждения]]></string>
     <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[<a href="{profile_link}">{display_name}</a> - Обсуждения]]></string>