Хак: Все теги

Привет, некорфилам, или тем кто еще на 0.3.1. Хочу поделится хаком «Все теги» для ЛС 0.3.1.
За основу был взят существующий клас BlockTags.class.php и шаблон block.tags.tpl. Пример работи хака можно посмотреть здесь live.bete.tv/tagall
Если одобрите, пошлю в модули.
Начнем с templates\language\russian.php. Вписуем куда-то строчку
'tagall' => 'Все теги',

Лезем в classes\actions создем ActionTagall.class.php. Пихаем туда код:
<?php

class ActionTagall extends Action {
	/**
	 * Главное меню
	 *
	 * @var unknown_type
	 */
	
	protected $sMenuHeadItemSelect='blog';
	
	public function Init() {
		$this->SetDefaultEvent('index');
		$this->Viewer_AddHtmlTitle($this->Lang_Get('tagall'));
		
		/**
		 * Определяем какие блоки нужно выводить справа
		 */
		$this->Viewer_AddBlocks('right',array('stream','blogs'));		
	}
	
	protected function RegisterEvent() {		
		$this->AddEvent('index','EventTagAll');	
			
	}
		
		
	public function EventTagAll() {
		/**
		 * Получаем список тегов
		 */
		$aTagsall=$this->oEngine->Topic_GetTopicTags(500);
		//dump($aTags);
		/**
		 * Расчитываем логарифмическое облако тегов
		 */
		if ($aTagsall) {
			$iMinSize=2; // минимальный размер шрифта
			$iMaxSize=12; // максимальный размер шрифта
			$iSizeRange=$iMaxSize-$iMinSize;
			
			$iMin=10000;
			$iMax=0;
			foreach ($aTagsall as $oTag) {
				if ($iMax<$oTag->getCount()) {
					$iMax=$oTag->getCount();
				}
				if ($iMin>$oTag->getCount()) {
					$iMin=$oTag->getCount();
				}
			}			
			
			$iMinCount=log($iMin+1);
			$iMaxCount=log($iMax+1);
			$iCountRange=$iMaxCount-$iMinCount;
			if ($iCountRange==0) {
				$iCountRange=1;
			}
			foreach ($aTagsall as $oTag) {
				$iTagSize=$iMinSize+(log($oTag->getCount()+1)-$iMinCount)*($iSizeRange/$iCountRange);
				$oTag->setSize(round($iTagSize)); // результирующий размер шрифта для тега
			}
			/**
		 	* Устанавливаем шаблон вывода
		 	*/
			$this->Viewer_Assign("aTagsall",$aTagsall);
		}
	}
	/**
	 * Выполняется при завершении работы экшена
	 *
	 */
	public function EventShutdown() {		
		/**
		 * Загружаем в шаблон необходимые переменные
		 */
		$this->Viewer_Assign('sMenuHeadItemSelect',$this->sMenuHeadItemSelect);		
	}
}
?>

Находим classes\modules\sys_viewer\Viewer.class.php Находим ето: (строчка где-то 140)
/**
		 * Константы роутинга страниц
		 */
		$this->Assign("ROUTE_PAGE_ERROR",ROUTE_PAGE_ERROR);
		$this->Assign("ROUTE_PAGE_REGISTRATION",ROUTE_PAGE_REGISTRATION);

и пихаем сюда ето:
$this->Assign("ROUTE_PAGE_TAGALL",ROUTE_PAGE_TAGALL);

дальше идем в config\config.route.php находим
define("ROUTE_PAGE_BLOGS",'blogs');

пихаем ниже
define("ROUTE_PAGE_TAGALL",'tagall');

здесь же находим
ROUTE_PAGE_BLOGS => 'ActionBlogs',

пихаем
ROUTE_PAGE_TAGALL => 'ActionTagall',

Теперь натягиваем шкуру, лезем в templates\skin\new\actions создаем папку ActionTagall, внутри создаем файл index.tpl, пихаем внутрь ето:
{include file='header.tpl' menu='blog'}
<h1>{$aLang.tagall}</h1>
			<div class="block tags">
				<div class="tl"><div class="tr"></div></div>
				<div class="cl"><div class="cr">
					
					<ul class="cloud">						
						{foreach from=$aTagsall item=oTag}
							<li><a class="w{$oTag->getSize()}" rel="tag" href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TAG}/{$oTag->getText()|escape:'html'}/">{$oTag->getText()|escape:'html'}</a></li>	
						{/foreach}
					</ul>
					
				</div></div>
				<div class="bl"><div class="br"></div></div>
			</div>


{include file='footer.tpl'}

Ну и осталось вывести линк на новую страницу, лезем в templates\skin\new\block.tags.tpl находим
{foreach from=$aTags item=oTag}
							<li><a class="w{$oTag->getSize()}" rel="tag" href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TAG}/{$oTag->getText()|escape:'html'}/">{$oTag->getText()|escape:'html'}</a></li>	
						{/foreach}
					</ul>

и ниже пихаем:
<div class="right"><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TAGALL}/">{$aLang.tagall}</a></div>


Все, должно пахать)) Пинайте если че, я не обижусь.

5 комментариев

avatar
livestreet.ru/blog/3249.html

а так молодец
avatar
черт, чуствую себя как Денис Попов со своей новой ОС Bolgenos ((
кто ж знал что ето «метки» а не «теги» + модуля в каталоге то нету… я обижен и расстроен
avatar
Да, да, я тоже искал теги и ничего не получил!
Ты молодец, хотя бы потому что теперь если будут искать теги, найдут комментарий randomtoy :) Ему тоже за упрощение спасибо.
Через этот топик многие по поиску пройдут, разумеется чтобы уже попасть в другой.
avatar
Привет, некорфилам, или тем кто еще на 0.3.1
а 0.4.1 єто уже идет в комплекте???
avatar
а на 0.5.1 есть данное решение?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.