Делаем ленту друзей как в ЖЖ (для LS 0.3)

Увидел сегодня пост про будущую версию 0.4 в которой говорится про возможное добавление ленты друзей к движку и решил поделится своим вариантом.
Буквально вчера начал изучать ЛС и удивился почему в друзья добавлять можно, а возможности просмотра ленты нет. Итак поехали.
config/config.route.php думаю в какое место добавлять разберетесь без труда:
define("ROUTE_PAGE_FRIENDS",'friends');

и
ROUTE_PAGE_FRIENDS => 'ActionFriends', 

Далее редактируем шаблоны. Пример для девелоперской темы оформления:
в menu.blog.tpl после
{if $iCountTopicsNew>0}<li {if $sMenuSubItemSelect=='new'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_NEW}/">{$aLang.blog_menu_all_new}</a> +{$iCountTopicsNew}</li>{/if} 

добавляем:

{if $oUserCurrent}
            <li {if $sMenuSubItemSelect=='friends'}class="active"{/if}>
                <a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_FRIENDS}/">Лента друзей</a> {if $iCountTopicsFriendsNew>0}+{$iCountTopicsFriendsNew}{/if}
            </li>
{/if}

В templates/skin/developer/actions/ActionFriends (создать папку)
добавить index.tpl:
{include file='header.tpl' menu='blog'}
{include file='topic_list.tpl'}
{include file='footer.tpl'}

Далее в classes/modules/sys_viewer/Viewer.class.php ищем:
/**
		 * Константы роутинга страниц
		 */

ниже добавляем:
$this->Assign("ROUTE_PAGE_FRIENDS",ROUTE_PAGE_FRIENDS);  

создаем /classes/actions/ActionFriends.class.php:
<?php
/*-------------------------------------------------------
*
*   LiveStreet Engine Social Networking
*   Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
*   Official site: www.livestreet.ru
*   Contact e-mail: rus.engine@gmail.com
*
*   GNU General Public License, version 2:
*   http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/

/**
 * Обработка новых топиков главной страницы, т.е. УРЛа вида /new/
 *
 */
class ActionFriends extends Action {
	/**
	 * Главное меню
	 *
	 * @var unknown_type
	 */
	protected $sMenuHeadItemSelect='blog';
	/**
	 * Меню
	 *
	 * @var unknown_type
	 */
	protected $sMenuItemSelect='index';
	/**
	 * Субменю
	 *
	 * @var unknown_type
	 */
	protected $sMenuSubItemSelect='friends';
	/**
	 * Число новых топиков
	 *
	 * @var unknown_type
	 */
	protected $iCountTopicsNew=0;
	/**
	 * Число новых топиков в ленте друзей
	 *
	 * @var unknown_type
	 */
	protected $iCountTopicsFriendsNew=0;
	/**
	 * Число новых топиков в коллективных блогах
	 *
	 * @var unknown_type
	 */
	protected $iCountTopicsCollectiveNew=0;
	/**
	 * Число новых топиков в персональных блогах
	 *
	 * @var unknown_type
	 */
	protected $iCountTopicsPersonalNew=0;
	
	/**
	 * Инициализация
	 *
	 */
	public function Init() {			
		$this->Viewer_AddBlocks('right',array('stream','tags','blogs'));
		/**
		 * Подсчитываем новые топики
		 */

		$this->iCountTopicsCollectiveNew=$this->Topic_GetCountTopicsCollectiveNew();
		$this->iCountTopicsPersonalNew=$this->Topic_GetCountTopicsPersonalNew();
        $this->iCountTopicsFriendsNew=$this->Topic_GetCountTopicsFriendsNew($this->User_GetUserCurrent()->getId());
		$this->iCountTopicsNew=$this->iCountTopicsCollectiveNew+$this->iCountTopicsPersonalNew;
	}
	/**
	 * Регистрация евентов
	 *
	 */
	protected function RegisterEvent() {
		$this->AddEventPreg('/^(page(\d+))?$/i','EventFriends');
	}

	
	/**********************************************************************************
	 ************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
	 **********************************************************************************
	 */
	
	/**
	 * Реализация евента
	 *
	 */
	protected function EventFriends() {
		$this->Viewer_SetHtmlRssAlternate(DIR_WEB_ROOT.'/'.ROUTE_PAGE_RSS.'/new/',SITE_NAME);
		/**
		 * Меню
		 */
		$this->sMenuSubItemSelect='friends';
		/**
		 * Передан ли номер страницы
		 */
		$iPage=$this->GetEventMatch(2) ? $this->GetEventMatch(2) : 1;
		/**
		 * Получаем список топиков
		 */					
		$aResult=$this->Topic_GetTopicsFriends($iPage,BLOG_TOPIC_PER_PAGE, $this->User_GetUserCurrent()->getId());
		$aTopics=$aResult['collection'];
		/**
		 * Формируем постраничность
		 */
		$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,BLOG_TOPIC_PER_PAGE,4,DIR_WEB_ROOT.'/'.ROUTE_PAGE_FRIENDS);
		/**
		 * Загружаем переменные в шаблон
		 */
		$this->Viewer_Assign('aTopics',$aTopics);
		$this->Viewer_Assign('aPaging',$aPaging);		
		/**
		 * Устанавливаем шаблон вывода
		 */
		$this->SetTemplateAction('index');
	}	
	/**
	 * При завершении экшена загружаем переменные в шаблон
	 *
	 */
	public function EventShutdown() {
		$this->Viewer_Assign('sMenuHeadItemSelect',$this->sMenuHeadItemSelect);
		$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
		$this->Viewer_Assign('sMenuSubItemSelect',$this->sMenuSubItemSelect);
		$this->Viewer_Assign('iCountTopicsNew',$this->iCountTopicsNew);
        $this->Viewer_Assign('iCountTopicsFriendsNew',$this->iCountTopicsFriendsNew);
		$this->Viewer_Assign('iCountTopicsCollectiveNew',$this->iCountTopicsCollectiveNew);
		$this->Viewer_Assign('iCountTopicsPersonalNew',$this->iCountTopicsPersonalNew);
	}
}
?>

Теперь там же правим файлы ActionNew.class.php и ActionIndex.class.php:
в
public function Init() {

каждого файла, после комментария
Подсчитываем новые топики

добавляем

        if ($this->User_GetUserCurrent()) {
            $this->iCountTopicsFriendsNew=$this->Topic_GetCountTopicsFriendsNew($this->User_GetUserCurrent()->getId());
        }

также в каждом из этих файлов после
public function EventShutdown() {

добавляем

        if ($this->User_GetUserCurrent()) {
            $this->Viewer_Assign('iCountTopicsFriendsNew',$this->iCountTopicsFriendsNew);
        }

далее в classes/modules/topic/Topic.class.php куданибудь в серединку между функциями добавляем:

	/**
	 * Получает число новых топиков в ленте друзей
	 *
	 * @return unknown
	 */
	public function GetCountTopicsFriendsNew($sUserId) {
		$sDate=date("Y-m-d H:00:00",time()-BLOG_TOPIC_NEW_TIME);
		$aFilter=array(
            'this_user_id' => $sUserId,
			'topic_publish' => 1,
			'topic_new' => $sDate,
		);

        $s=serialize($aFilter);
		if (false === ($data = $this->Cache_Get("topic_friend_count_{$s}"))) {
			$data = $this->oMapperTopic->GetCountFriendsTopics($aFilter);
			$this->Cache_Set($data, "topic_friend_count_{$s}", array('topic_update','topic_new'), 60*5);
		}
		return 	$data;
	}
	/**
	 * Получает все топики в ленте друзей
	 *
	 * @return unknown
	 */
	public function GetTopicsFriends($iPage,$iPerPage,$sUserId) {
		$aFilter=array(
            'this_user_id' => $sUserId,
			'topic_publish' => 1,
		);
		$s=serialize($aFilter);
		$s2=-1;
		if ($this->oUserCurrent) {
			$s2=$sUserId;
		}
		if (false === ($data = $this->Cache_Get("topic_friend_filter_{$s}_{$s2}_{$iPage}_{$iPerPage}"))) {
			$data = array('collection'=>$this->oMapperTopic->GetFriendsTopics($aFilter,$iCount,$iPage,$iPerPage),'count'=>$iCount);
			$this->Cache_Set($data, "topic_friend_filter_{$s}_{$s2}_{$iPage}_{$iPerPage}", array('comment_new','topic_update','topic_new'), 60*5);
		}
		return $data;
	}

ну и в classes/modules/topic/mapper/Topic.mapper.class.php так же куда-нибудь в серединку:
public function GetCountFriendsTopics($aFilter) {
		$sWhere=$this->buildFilter($aFilter);
		$sql = "SELECT
					count(t.topic_id) as count
				FROM
					".DB_TABLE_TOPIC." as t
                LEFT JOIN
                    ".DB_TABLE_FRIEND." as f ON f.user_frend_id=t.user_id
				WHERE
					1=1

					".$sWhere."

                    AND
                    f.user_id='".$aFilter['this_user_id']."'

				;
					";
		if ($aRow=$this->oDb->selectRow($sql)) {
			return $aRow['count'];
		}
		return false;
	}

	public function GetFriendsTopics($aFilter,&$iCount,$iCurrPage,$iPerPage) {
		$iCurrentUserId=-1;
		if (is_object($this->oUserCurrent)) {
			$iCurrentUserId=$this->oUserCurrent->getId();
		}
		$sWhere=$this->buildFilter($aFilter);

		$sql = "
				SELECT
					t_fast.*,
					tc.*,
					u.user_login as user_login,
					IF(tv.topic_id IS NULL,0,1) as user_is_vote,
					tv.vote_delta as user_vote_delta,
					IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote,
					bu.is_moderator as user_is_blog_moderator,
					bu.is_administrator as user_is_blog_administrator,
					IF(tr.comment_count_last IS NULL,t_fast.topic_count_comment,t_fast.topic_count_comment-tr.comment_count_last) as count_comment_new,
					IF(ft.topic_id IS NULL,0,1) as topic_is_favourite
				FROM (
					SELECT
						t.*,
						b.blog_title as blog_title,
						b.blog_type as blog_type,
						b.blog_url as blog_url,
						b.user_owner_id as blog_owner_id
					FROM
						".DB_TABLE_TOPIC." as t,
						".DB_TABLE_BLOG." as b
					WHERE
						1=1

						".$sWhere."
                        AND b.blog_type in ('personal','open')
						AND
						t.blog_id=b.blog_id
					ORDER by t.topic_date_add desc
					LIMIT ?d, ?d
				) as t_fast
				JOIN ".DB_TABLE_USER." AS u ON t_fast.user_id=u.user_id
				LEFT JOIN (
						SELECT
							topic_id,
							vote_delta
						FROM ".DB_TABLE_TOPIC_VOTE."
						WHERE user_voter_id = ?d
					) AS tv ON t_fast.topic_id=tv.topic_id
				LEFT JOIN (
						SELECT
							topic_id
						FROM ".DB_TABLE_FAVOURITE_TOPIC."
						WHERE user_id = ?d
					) AS ft ON t_fast.topic_id=ft.topic_id
				LEFT JOIN (
						SELECT
							topic_id,
							comment_count_last
						FROM ".DB_TABLE_TOPIC_READ."
						WHERE user_id = ?d
					) AS tr ON t_fast.topic_id=tr.topic_id
				LEFT JOIN (
						SELECT
							topic_id
						FROM ".DB_TABLE_TOPIC_QUESTION_VOTE."
						WHERE user_voter_id = ?d
					) AS tqv ON t_fast.topic_id=tqv.topic_id
				LEFT JOIN (
						SELECT
							is_moderator,
							is_administrator,
							blog_id
						FROM ".DB_TABLE_BLOG_USER."
						WHERE user_id = ?d
					) AS bu ON t_fast.blog_id=bu.blog_id
				JOIN  ".DB_TABLE_TOPIC_CONTENT." AS tc ON t_fast.topic_id=tc.topic_id
                LEFT JOIN
                        ".DB_TABLE_FRIEND." as f ON t_fast.user_id=f.user_frend_id
                        where
                        f.user_id='".$aFilter['this_user_id']."'
				order by t_fast.topic_date_add desc
				;
					";

		$aTopics=array();
		if ($aRows=$this->oDb->select($sql,($iCurrPage-1)*$iPerPage, $iPerPage, $iCurrentUserId,$iCurrentUserId,$iCurrentUserId,$iCurrentUserId,$iCurrentUserId)) {
			foreach ($aRows as $aTopic) {
				$aTopics[]=new TopicEntity_Topic($aTopic);
			}
		}
		$iCount=$this->GetCountFriendsTopics($aFilter);
		return $aTopics;
	}


Ну вроде бы ничего не забыл… Старался не трогать стандартные функции, просто копировал их с новым именем и изменял под нужды.

И еще в процессе создания..., в таблице префикс_friend есть поле user_frend_id..., потрепало нервы я вам скажу :)
UPDATE архив с измененными файлами (народ.Диск).
UPDATE перенес в Tips & Tricks.

51 комментарий

avatar
офигенно.
и сразу тупой вопрос, так как не понимаю как это работает.
это похоже по старинке сделано, а через хуки второй раз пишу это слово второй раз стираю букву «й» тоже самое сделать реально? что было минимум правки оригинального кода
avatar
ну и в модули инструкцию лучше выложить… ^__^
avatar
повторюсь, только вчера скачал и установил LS, до хуков еще не добрался, как освободится время посмотрю как оно там работает)
avatar
Дять! Пожалуйста! Дай измененные файлы, а-то боюсь напортачу где-нить, да и в двигле я особо ничего не правил так, что должно с ходу встать… ))
avatar
добавил в пост ссылку на архив
avatar
Есть пару глюков:

1. Не пашет!))

Fatal error: Uncaught exception 'Exception' with message 'Не найден шаблон: actions/ActionFriends/index.tpl' in C:\xampp\htdocs\classes\modules\sys_viewer\Viewer.class.php:174 Stack trace: #0 C:\xampp\htdocs\classes\engine\Engine.class.php(187) : eval()'d code(1): LsViewer->Display('actions/ActionF...') #1 C:\xampp\htdocs\classes\engine\Engine.class.php(187): eval() #2 C:\xampp\htdocs\classes\engine\Router.class.php(319): Engine->_CallModule('Viewer_Display', Array) #3 [internal function]: Router->__call('Viewer_Display', Array) #4 C:\xampp\htdocs\classes\engine\Router.class.php(108): Router->Viewer_Display('actions/ActionF...') #5 C:\xampp\htdocs\index.php(31): Router->Exec() #6 {main} thrown in C:\xampp\htdocs\classes\modules\sys_viewer\Viewer.class.php on line 174


Начал разбираться — не хватает шаблона для отображения друзей
***/developer/actions/ActionFriends/index.tpl — Скопировал index.tpl из ***/developer/actions/ActionBlog

2 [САМОЕ ВАЖНОЕ!]. Гости не могут зайти на сайт, ибо вылетает по ошибке «что-то там getid» в ActionIndex.class.php — посмотрел, действительно у гостей-же нет id — решил проблему «чётко» («по пацански») —
if ($this->User_GetUserCurrent() <>'' ) {
		$this->iCountTopicsFriendsNew=$this->Topic_GetCountTopicsFriendsNew($this->User_GetUserCurrent()->getId());
		} 


в двух местах в подсчитывании новых топиков и в завершении

if ($this->User_GetUserCurrent() <>'' ) {
        $this->Viewer_Assign('iCountTopicsFriendsNew',$this->iCountTopicsFriendsNew);
}


и все запахало

?.. На странице лента друзей, если записей нет — пишит «Сюда еще никто не успел написать» -> где можно сменить надпись на «Друзья еще ничего не написали» )))

Счастья, ₪е₪и.ру
avatar
насчет второго пункта, если бы делали по мануалу то все бы работало, если воспользовались прилагаемыми файлами то да гости увидят ошибку, в моей ЛС просто по другому сделано)
avatar
плиз хелп! прописывал все вручную и в итоге получит ошибку
Fatal error: Cannot redeclare LsTopic::GetCountTopicsFriendsNew() in /home/webmaster/www/,,,,,,,,,,/classes/modules/topic/Topic.class.php on line 538
с чем это может быть связанно?
Заранее спасибо!
avatar
В дополнение ко 2 пункту мне пришлось еще добавить исключение:
после
if ($this->User_GetUserCurrent() <>'' )

добавить пришлось
if ($this->User_GetUserCurrent() =='' ) {
                                $aResult=$this->Topic_GetTopicsFriends($iPage,BLOG_TOPIC_PER_PAGE, $this->User_GetUserCurrent());;}

без этого работать нормально не хотело :(
avatar
интересно есть проекты на LS с таким потоком сообщений для которых это актуально?
avatar
Кто может сделать модуль кроспостинг из ЛС в ЖЖ?
avatar
тоже думал об этом, если себе все таки такое сделаю, то выложу сюда…
avatar
а как наоборот сделать? чтобы посты из РСС поадали в ЖЖ??
avatar
так про это и разговор, ручками дописывайте функционал в LS, если не ошибаюсь проще всего через XMLRPC, если это вам о чем-то говорит…
avatar
я не умею, я только по мануалу могу повторять.
avatar
если себе все таки такое сделаю, то выложу сюда…
avatar
было бы здорово, а я воспользуюсь и скажу вам спасибо!
avatar
Fatal error: Uncaught exception 'Exception' with message 'Не найден шаблон: actions/ActionFriends/index.tpl' in /home/parthers/public_html/classes/modules/sys_viewer/Viewer.class.php:174 Stack trace: #0 /home/parthers/public_html/classes/engine/Engine.class.php(187): eval()'d code(1): LsViewer->Display('actions/ActionF...') #1 /home/parthers/public_html/classes/engine/Engine.class.php(187): eval() #2 /home/parthers/public_html/classes/engine/Router.class.php(319): Engine->_CallModule('Viewer_Display', Array) #3 [internal function]: Router->__call('Viewer_Display', Array) #4 /home/parthers/public_html/classes/engine/Router.class.php(108): Router->Viewer_Display('actions/ActionF...') #5 /home/parthers/public_html/index.php(31): Router->Exec() #6 {main} thrown in /home/parthers/public_html/classes/modules/sys_viewer/Viewer.class.php on line 174
avatar

Fatal error: Uncaught exception 'Exception' with message 'Не найден шаблон: actions/ActionFriends/index.tpl' in /home/parthers/public_html/classes/modules/sys_viewer/Viewer.class.php:174 Stack trace: #0 /home/parthers/public_html/classes/engine/Engine.class.php(187) : eval()'d code(1): LsViewer->Display('actions/ActionF...') #1 /home/parthers/public_html/classes/engine/Engine.class.php(187): eval() #2 /home/parthers/public_html/classes/engine/Router.class.php(319): Engine->_CallModule('Viewer_Display', Array) #3 [internal function]: Router->__call('Viewer_Display', Array) #4 /home/parthers/public_html/classes/engine/Router.class.php(108): Router->Viewer_Display('actions/ActionF...') #5 /home/parthers/public_html/index.php(31): Router->Exec() #6 {main} thrown in /home/parthers/public_html/classes/modules/sys_viewer/Viewer.class.php on line 174

что делать? :(
avatar
не хватает шаблона для отображения друзей
***/developer/actions/ActionFriends/index.tpl — Скопировать index.tpl из ***/developer/actions/ActionBlog
avatar
огромнейшее спасибо:)
avatar
несочтите за флуд, но забыл выразить благодарность автору, крутой мэн!
avatar
Обновил архив с файлами
avatar
Спасибо, супер, давно ждал!

Как считаете, стоит обеспечить вывод информации о том, к каким блогам подключились ваши друзья? Т.е. в принципе можно и в профиле посмотреть подключенные блоги, но не будешь же каждый раз вспоминать, в каких сам уже побывал, а какие новые.

И еще вопрос: выводяться только топики, или имеется также вывод комментариев друзей?
avatar
+ идея, которая давно не дает мне покоя:

почему бы не сделать вывод обновлений (топики, комменты) только из тех блогов, к которых пользователь подключен?
avatar
Есть предложение — сделать хронологию постов друзей, т.е. посты за сегодня, за неделю, месяц и т.д.
avatar
предлагаю разместить в каталоге
avatar
А с дефольтным шаблоном работает?
avatar
думаю работает, сам не пробовал, с виду разметка одинаковая…
avatar
Идея — супер
мне очень этого не хватало

но с реализацией как-то не получается
установил новый релиз 0.3
переписал поверх скачанные файлы, создал трех юзеров, зафрендил, написал несколько сообщений в блоги.

Кнопка «лента друзей» так и не появилась =(
avatar
да, тему поменял на девелоперскую
avatar
а в шаблонах девелоперской темы тоже надо изменения вносить же.
avatar
эм, заработало, какой-то странный был глюк. На сколько я понял все необходимые изменения внесены. Я просто открыл menu.blog.tpl для редактирования и заново записал его — все заработало…

Поковырявшись в сайте я заметил вот что:
Как я понял в ленту друзей попадают все сообщения друзей, как из коллективных, так и из персональных блогов, но при этом не попадают сообщения «не друзей» из коллективных блогов, куда пользователь подключен как читатель

В ЖЖ же схема френд ленты несколько отличается — там в ленту друзей попадают сообщения друзей и сообщения всех (не важно, друзей или нет) из коллективных блогов, куда подключен пользователь…

Можно ли реализовать именно такую схему работы френд ленты?
avatar
то что вы описали это уже своя общая лента, лента друзей несет немножко другой смысл в принципе нет ничего невозможного), нужно только подправить запрос в базу данных, к сожалению пока помочь не могу, со смартфона комментирую…
avatar
именно это и нужно, чтобы мониторить топики только из тех блогов, к которым пользователь подключен.
avatar
Попытался поставить на шаблон new, и ничего не получается( help плиз
avatar
Что значит «ничего»? Что конкретно не получается?
у самого стоит на переделанном new шаблоне — все отлично(единственное несколько ошибок в программном плане я нашел, когда ставил — но это впрочем почти не влияет на работоспособность модуля)
avatar
Внёс изменения перезаписав исходные файлы, однако лента не отображается
avatar
Че насчет ридми? читали? Там не только залить файлы надо, но еще и в конфигах кое что ручками подправить…
Если вам настолько лень в ридми слазить — слазаю я :)
Подробное описание установки модуля смотрите тут www.livestreet.ru/blog/tips_and_tricks/1527.html
По той же ссылке в комментариях можете получить техническую поддержку)
Внимание Если вы используйте не девелоперскую тему или изменяли ее то рекомендую проделать все манипуляции с темой в ручную!!


Короче если не справитесь, то пишите в аську.
avatar
Наблюдаю интересное поведение:
— есть один пост во френдленте и под ним — страницы с постами, которые уже нельзя считать новыми (архив ленты)
— нет постов в ленте — и нет страниц с архивом

Предлагаю во втором случае вернкть архив а вместо сообщения «сюда никто не успел написать» указать что-то вроде «ваши друзья не написали новых постов»
avatar
все работает! Афтару спасибо!
Почти как дле =)
Главное мануал правильно и ясно написан…
avatar
Причем здесь дле?
avatar
Хз не причем, я имел в веду что с дле справился и с этим разрулю.
avatar
Большое спасибо автору! Модуль полезный!
avatar
Работает на 3.1 Спасибо автору.
  • Sky
  • 0
avatar
Паггинация включается даже если дальше пусто, и ещё а можно не включать паггинацию «по друзья», а просто всё скопом + паггинация?
  • Sky
  • 0
avatar
Если кто сталкивался, тут такая беда:
Notice: Use of undefined constant ROUTE_PAGE_FRIENDS - assumed 'ROUTE_PAGE_FRIENDS' in /home/beleberd/domains/beleberda.net/public_html/classes/modules/sys_viewer/Viewer.class.php on line 132

Тема стоит NEW, есть соображения?
avatar
Спасибо — встало без проблем
avatar
Поставил, все нормально, только с шаблоном проблемы были
avatar
Лента друзей — это круто!
Как бы еще блоги в друзья добавлять, чтобы было совсем как жж? Тут можно присоединяться к блогам, но хочется дополнительную опцию именно «добавить в друзья» или «стать читателем». Предположим, что есть закрытые блоги, которые можно только читать — так вот их тоже добавить в ленту и читать как в жж все подряд…

Тоже с livestreet первый день разбираюсь, хорошо, что догадался сначала посмотреть что уже есть, прежде чем свое городить.
avatar
Установил, всё работает! Спасибо за такую удобную вещь!!!
Хотелось бы вернуться к коментарию
onthefly
Наблюдаю интересное поведение:
— есть один пост во френдленте и под ним — страницы с постами, которые уже нельзя считать новыми (архив ленты)
— нет постов в ленте — и нет страниц с архивом

Предлагаю во втором случае вернкть архив а вместо сообщения «сюда никто не успел написать» указать что-то вроде «ваши друзья не написали новых постов»


У меня отображается по 2 топика на страницу, а если их было к примеру 3 то получается, что на второй страницы показывается ещё и 4-й который не является «новым» если нажать на следующую страницу пишет «Сюда еще никто не успел написать» как сделать, чтоб отображалась вся лента друзей, и не по 2 топика, а по такому-же количеству сколько и на страницах «все», «коллективные» и «персональные» блоги?
  • Repa
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.