Модернизация профиля. Часть 2. Облако интересов
Буквально на прошлой неделе доделал облако интересов.
Суть облака интересов, показывать теги, в которых пользователь заинтересован. То есть, либо теги, которыми он маркирует свои посты (ну а кто из вас пишет о неинтересном? :)), либо теги постов, который пользователь добавляет в «избранное».
Для первого в LS уже существует практически все, нужно лишь немного модифицировать файл
classes/actions/ActionProfile.class.php
ищем
после этого вставляем
и в файл whois.tpl добавляем
Для того, чтобы объединить это с «избранным» немного усложним наработку.
Проделываем предыдущее, а дальше, в файл classes/modules/topic/mapper/Topic.mapper.class.php
в самый конец вставляем
в конец сlasses/modules/topic/Topic.class.php вставляем
ну а теперь, немного поменяем то, что мы вставили в classes/actions/ActionProfile.class.php
строку
меняем на
в итоге получается примерно так
PS знаю, что код кривой, сильно не бейте :) лучше помогите оптимизировать)
PPS код для css
ну и в общем то, всё в камментарии
Суть облака интересов, показывать теги, в которых пользователь заинтересован. То есть, либо теги, которыми он маркирует свои посты (ну а кто из вас пишет о неинтересном? :)), либо теги постов, который пользователь добавляет в «избранное».
Для первого в LS уже существует практически все, нужно лишь немного модифицировать файл
classes/actions/ActionProfile.class.php
ищем
/** * Вызов хуков */ $this->Hook_Run('profile_whois_show',array("oUserProfile"=>$this->oUserProfile)); /** * Загружаем переменные в шаблон */
после этого вставляем
$aTagsUser=$this->Topic_GetTopicTagsByUserId($this->oUserProfile->getId(), 100); if ($aTagsUser) { $iMinSize=1; // минимальный размер шрифта $iMaxSize=10; // максимальный размер шрифта $iSizeRange=$iMaxSize-$iMinSize; $iMin=10000; $iMax=0; foreach ($aTagsUser 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 ($aTagsUser as $oTag) { $iTagSize=$iMinSize+(log($oTag->getCount()+1)-$iMinCount)*($iSizeRange/$iCountRange); $oTag->setSize(round($iTagSize)); // результирующий размер шрифта для тега } /** * Устанавливаем шаблон вывода */ $this->Viewer_Assign("aTagsUser",$aTagsUser); }
и в файл whois.tpl добавляем
{if $aTagsUser} <h2>Облако интересов:</h2> <ul class="cloud"> {foreach from=$aTagsUser 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> {/if}
Для того, чтобы объединить это с «избранным» немного усложним наработку.
Проделываем предыдущее, а дальше, в файл classes/modules/topic/mapper/Topic.mapper.class.php
в самый конец вставляем
public function GetTopicFavouriteTagsByUserId($sUserId,$sUserId) { /*Запрос писал сам, потому сильно не бейте, если что*/ $sql = " SELECT temp.topic_tag_text, COUNT( temp.topic_tag_text ) AS count FROM( SELECT topic_tag_text FROM ".DB_TABLE_TOPIC_TAG." WHERE user_id = ? UNION ALL SELECT tt.topic_tag_text FROM ".DB_TABLE_TOPIC_TAG." tt join ".DB_TABLE_FAVOURITE_TOPIC." ft on (ft.topic_id=tt.topic_id and ft.topic_publish=1) WHERE ft.user_id = ?) as temp GROUP BY temp.topic_tag_text LIMIT 100 "; $aReturn=array(); if ($aRows=$this->oDb->select($sql,$sUserId,$sUserId)) { foreach ($aRows as $aRow) { $aReturn[]=new TopicEntity_TopicTag($aRow); } } return $aReturn; }
в конец сlasses/modules/topic/Topic.class.php вставляем
public function GetTopicFavouriteTagsByUserId($sUserId,$sUserId) { if (false === ($data = $this->Cache_Get("tag_user_{$sUserId}_{$sUserId}"))) { $data = $this->oMapperTopic->GetTopicFavouriteTagsByUserId($sUserId,$sUserId); $this->Cache_Set($data, "tag_user_{$sUserId}_{$sUserId}", array("topic_update_user_{$sUserId}","topic_new_user_{$sUserId}"), 60*15); } return $data; }
ну а теперь, немного поменяем то, что мы вставили в classes/actions/ActionProfile.class.php
строку
$aTagsUser=$this->Topic_GetTopicTagsByUserId($this->oUserProfile->getId(), 100);
меняем на
$aTagsUser=$this->Topic_GetTopicFavouriteTagsByUserId($this->oUserProfile->getId(), $this->oUserProfile->getId());
в итоге получается примерно так
PS знаю, что код кривой, сильно не бейте :) лучше помогите оптимизировать)
PPS код для css
.cloud { text-align: center; } .cloud li { display: inline; margin-right: 5px; line-height: 28px; } .cloud li a { color: #333; text-decoration: none; font-size: 18px; } .cloud li a:hover { background: #333; color: #fff; } .cloud li a.w1 { font-size: 11px; } .cloud li a.w2 { font-size: 12px; } .cloud li a.w3 { font-size: 14px; } .cloud li a.w4 { font-size: 16px; } .cloud li a.w5 { font-size: 18px; } .cloud li a.w6 { font-size: 20px; } .cloud li a.w7 { font-size: 22px; } .cloud li a.w8 { font-size: 24px; } .cloud li a.w9 { font-size: 26px; } .cloud li a.w10 { font-size: 28px; }
ну и в общем то, всё в камментарии
Зачастую маркетологи с целью экономии бюджета прибегают к нестандартным решениям, использование QR кодов один из таких оригинальных и современных способов. Зашифровать ссылку на сайт в QR код проще всего с помощью специализированного сервиса.
57 комментариев
У меня не получилось проверить:
Это, кстати, тоже может быть причиной попадания под фильтр.
Так же причиной попадания под фильтр может быть то, что используется почтовик хостера, а большинство крупных почтовых сервисов это не жалует.
меняем
все пропадает
Делал по мануалу, в паре мест недосчитался закрывающих }
Но что то у меня не вышло как задумано, буду ждать вердикта.
У меня исправно работает, только не работает почему то выбор размера шрифта.
Я вот тут подумал, может второй вариант вообще исключительно правильный?
То что пользователь добавил в избранное, это 110% ему интересно.
Нельзя это отдельно реализовать?
сlasses/modules/topic/Topic.class.php и classes/actions/ActionProfile.class.php
вроде больше косяков я не вижу. Проверьте пожалуйста
а насчет только избранного все очень просто. делаем по второму варианту, но SQL запрос будет такой (писал навскидку, могу ошибиться)
Щас попробую отдельно второй вариант.
рад бы O_o
точно должно помочь. постоянно про ксс забываю((((
А я со своей стороны почему то решил что стандартный .block.tags ul.cloud li должен сработать, с чего бы.
ps только избранное пока не заработало
не понял. всмысле?)))
Пока в избранном был один топик, все работало. Как только напихал еще топиков:
тогда что-то вроде этого. но придется работать еще и с остальными файлами
Большое спасибо, имхо нужно все в шапку, по вариантам, кому что ближе.
Еще раз спасибо, жаль плюсануть не могу, не дорос.
и да, это полный текст ошибки? подозреваю, что нет
public function GetTopicFavouriteTagsByUserId($sUserId,$sUserId) { на этой строчке
вставлять до "?>" или после?
то, что описано в первом этапе работает без проблем.
Кстати заметил такую штуку, если темы помеченные какими то тегами давно удалены, то в профайле пользователя они все равно выводятся! Каким образом можно их удалять, чтобы не лезть в пхпмайадмин?
а что во второй части не понятно?
Листинг classes/modules/topic/mapper/Topic.mapper.class.php в шапке топика он уже исправленный или нет? (в комментариях просто мотрю есть еще какие то рекомендации по правки запросов бд).
Кстати весь код функции вставляешь до:
Верно?
конечно.
правда насчет последнего } неуверен))) не могу в данный момент посмотреть код