+60.64
447 читателей, 104 топика

Вставка видео из Вконтакте, Livestreet 0.4

Давно хотел сделать возможность добавления видео из вконтакте.

Нам понадобится отредактировать файл: engine/modules/text/Text.class.php
Update 14.07.2010: Под 0.3.1 тоже работает.

Читать дальше →

Плагин "Дополнительные блоки"

Здраствуйте друзья.

Презентую плагин «Дополнительные блоки».
В текущей версии всего два блока
  1. Блок «Рейтинг пользователей»
  2. Блок «Кто на сате?»
Блок «Рейтинг пользователей» выводит N пользователей с вышим рейтингом, с максимальным кол-вом публикаций и коментариев. Переключение вкладок на ajax как в блоке «Блоги».
Блок «Кто на сайте?» — выводит пользователей кто онлайн.

Идея плагина такова: он не должен делегировать ни один модуль, ни один шаблон, работать полностью автономно, чтобы мог сочитаться с любым другим плагином, не вступать с ним в конфликт.

Благодарности:
aVadim за его блок «Who is online», который вошел в плагин под названием «Кто на сайте?»
Lora_GT именно она дала идею сделать вывод пользователей по кол-ву публикаций и комментов.

Друзья, я надеюсь, что этот релиз не последний, жду ваших предложений — какие еще блоки кому нужны пишите. По мере сил постараюсь реализовать. Приглашаю к сотрудничеству всех кто желает помочь проекту.

После модерации будет доступно по «Дополнительные блоки»
Сейчас можно скачать и опробывать с «Дополнительные блоки»

Сортировка топиков по последним действиям. для 0.3.1

Сделано было давно, специально для проекта cgvault.ru, потому могу что-то пропустить или забыть написать. ищем баги и тд. поправлю)

Итак. Сортировка топиков по последним действиям, что это означает? Это значит, что топики сортируются по последним комментариям, а если комментариев нет, то по дате добавления. Итак на нужно будет добавить одно поле в таблицу и поправить несколько файлов

Читать дальше →

Использование Gravatar

Использовать у себя Gravatar.com очень просто. Аватарка выдаётся по url-у с md5-хешем e-mail-а пользователя.
Итого:
в classes\modules\user\entity\User.entity.class.php
находим функцию
public function getProfileAvatarPath($iSize=100) {   
    	if ($this->getProfileAvatar()) { 	
        	return DIR_WEB_ROOT.DIR_UPLOADS_IMAGES.'/'.$this->getId().'/avatar_'.$iSize.'x'.$iSize.'.'.$this->getProfileAvatarType();
    	} else {
    		return DIR_STATIC_SKIN.'/images/avatar_'.$iSize.'x'.$iSize.'.jpg';
    	}
    }

и изменяем всего одну строчку:
public function getProfileAvatarPath($iSize=100) {   
    	if ($this->getProfileAvatar()) { 	
        	return DIR_WEB_ROOT.DIR_UPLOADS_IMAGES.'/'.$this->getId().'/avatar_'.$iSize.'x'.$iSize.'.'.$this->getProfileAvatarType();
    	} else {
		return "http://www.gravatar.com/avatar.php? gravatar_id=".md5( strtolower($this->getMail()) )."&size=".$iSize;
    	}
    }


К сожалению, в комментариях так просто получить аватарку не получится — так как там используется своя функция
getUserProfileAvatarPath($iSize=100)
из TopicComment.entity.class.php

Доработка хака «Выпадающее меню стран и городов»

Переписал код ajax-запросов. Теперь нет ajax-ошибки. И есть кеш запросов. Работать стало немного быстрее вроде как… Но я сравнивал тока по ощущениям, а они могут быть обманчивы.
Сделано 2 варианта. Для 0.3.1 и для последней SVN. Смотрим, устанавливаем, проверяем, комментим.
Читать дальше →

«LiveStreet и 500 000 топиков», часть 1: «Что сделать с тем что имеем»

Садист?
Садист!
Да, черт возьми, я садист! (сенсация? попахивает!) :-D


Вы уже наверно читали мой предыдущий пост, где я тестил LS на 200 000 новостей…

В этот раз я нашпиговал самизнаетечто полумиллоном реальных новостей (500 000)… и решил все это тестануть :)

Читать дальше →

похожие темы через sphinx

Дело, было как обычно вечером :) И лежало на мне уже давно задание — добавить «похожие темы» к проекту, но ввиду приоритетов откладывалось оно на потом постоянно. Полазил по LS, нашел уже готовый бесплатный модуль: livestreet.ru/blog/2053.html
Но незадача :( нужен fulltext для InnoDB… уже хотел похерить задание и отложить опять до лучших времен, но что-то дернуло меня все-таки покопаться чуток. А именно, вспомнил я про уже готовый fulltext поиск реализованный на sphinx'e в дефолтной сборке LS. Там как раз есть тайтл + текст, так что впринципе больше и не надо :)
В общем, пришлось чуток модифицировать имеющийся модуль + добавить ф-цию в Sphinx.class.php
К действиям:
1) берем имеющийся модуль
2) удаляем папку и ее содержимое /classes/modules/similartopics/mapper
3) заменяем полностью содержимое файла(/classes/modules/similartopics/SimilarTopics.class.php) на:
<?php
##### [hack] similar_topics_sphinx #####
class LsSimilarTopics extends Module {
	public function Init() {
	}
	public function GetSimilarTopics($oTopic){
	    $sTitleTags=$oTopic->getTags();
	    $aTopics=array();
	    $data=$this->Sphinx_FindSimilarTopics($sTitleTags,SIMILARTOPICS_COUNT+1);
	    if(is_array($data['matches']) && sizeof($data['matches'])>0){
		foreach($data['matches'] as $k=>$v) if($k!=$oTopic->getId()) $aTopics[]=$this->Topic_GetTopicById($k);
		return $aTopics;
	    }else return false;
	}
}
##### [hack] similar_topics_sphinx #####
?>

4) добавляем в класс(classes/modules/sphinx/Sphinx.class.php):
        ##### [hack] SimilarTopics #####
        public function FindSimilarTopics($sTerms,$iLimit){
                $cacheKey=SEARCH_ENTITY_PREFIX."similartopics_{$sTerms}_{$iLimit}";
                if(false===($data=$this->Cache_Get($cacheKey))){
                        $this->oSphinx->SetMatchMode(SPH_MATCH_ANY);
                        $this->oSphinx->SetLimits(0,$iLimit);

                        if(!is_array($data=$this->oSphinx->Query($sTerms,SEARCH_ENTITY_PREFIX.'topicsIndex'))) return FALSE;

                        # no results = no cache
                        if($data['total']>0) $this->Cache_Set($data,$cacheKey,array(),60*15);
                }
                return $data;
        }
        ##### [hack] SimilarTopics #####

лично я оставил поиск по тэгам, хотя — можете добавить и по тайтлу, как было первоначально в плагине
5) все, радуемся жизни :)

п.с. должен быть настроен уже sphinx и работать поиск через sphinx
п.п.с. делаем на свой страх и риск, так что не забываем о том что надо бэкапить файлы ;)

Дополнительные данные о пользователе под топиком

Добре, господа!

Значит надо мне вывести под топиком дополнительные данные по автору. Аватарку например и плюсик голосования. Для этого надо, чтоб в шаблонах topic.tpl и topic_list.tpl появились данные о нем. С topic.tpl все получилось сразу. В ActionBlog.class.php в функциях вывода топика из коллективного и личного блогов добавил:

$myUser=$this->User_getUserById($oTopic->getUserId());
$this->Viewer_Assign('myUser',$myUser);

И имею в шаблоне юзера, а стало быть и все данные по нему. Например аватару:

<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PROFILE}/{$oTopic->getUserLogin()}/">
<img src="{$myUser->getProfileAvatarPath(24)}" alt="avatar" class="avatar" />
</a>

Со списком топиков же такой финт не проходит. В функции вывода списка топиков все формируется иначе. И как там выделить и правильно передать в шаблон я не соображу. В принципе, в шаблоне доступно $oTopic->getUserLogin() или $oTopic->getUserId() Только куда плясать дальше не совсем понятно.

Можно конечно так:

<img src="http://futurin.ru/uploads/images/{$oTopic->getUserId()}/avatar_24x24.gif"/>

Но костыль явно нерабочий как только расширение у файла станет отличным от gif.

Поможите, люди добрые ;)

Хак. Добавление позиции в рейтинге пользователей


На всеми любимом Хабре есть замечательная возможность просмотра в профиле позиции в рейтинге пользователей сайта.
Сделал подобный хак-модуль, изменения нужно внести только в шаблоне отображения профиля, системные файлы не задеты.
Пример посмотреть можно: ls03.vaktive.ru/profile/admin/
Скачать можно: livestreet.ru/addons/102/
Инструкция в архиве.