Как вывести записи персонального блога в профиль пользователя?

Как сделать некий аналог стены, показывающий в профиле N последних записей пользователя в персональном блоге?

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

avatar
Это нетривиальная задача. Для реализации нужно иметь денежку или потратить время для того чтоб разобраться.
avatar
вряд ли я первый, кому пришла в голову эта идея
avatar
Плагин. В плагине sql запрос:
SELECT blog_id FROM _blog WHERE user_owner_id = ? AND blog_type = 'personal' LIMIT 1
? = $oUser->getId();

Это мы получили id личного блога юзера. Дальше:
SELECT * FROM _topic WHERE blog_id = ? LIMIT 1, 10
? = $iBlogId;

Получаем топики из личного блога.

Если вам действительно нужен такой плагин, то я с радостью его сделаю. Естественно что, бесплатно.
avatar
Естественно что, бесплатно.

Конечно, мы все хотим :)
avatar
Если вариант, который предложил товарищ ниже вас не устроит, то обязательно сделаю.
avatar
Хы… На самом деле вполне себе тривиальная задача. Можно и прямо в шаблоне это сделать (просто не очень кошерно будет. В шаблоне профиля, примерно так надо сделать. Пример навскидку.
{assign var="aTopics" value=$LS->Topic_GetTopicsOnlyPersonalByUser($oUserProfile->getId(),1,1,30)}
{if count($aTopics)>0}
<!-->Топики из персонального блога<--!>
{foreach from=$aTopics item=oTopic}
  <!-->А тут вывод топика<--!>
{/foreach }
 {/if}
  • vdenu
  • +1
avatar
Секундочку, я наврал. )) Сейчас поправлю.
avatar
Коллекцию топиков скорее вот так можно получить, т.т. функции GetTopicsOnlyPersonalByUser нет в природе… Опять же навскидку это всё, не проверял, но вроде правильно.
{assign var="aTopics" value=$LS->Topic_GetTopicsByFilter(['topic_publish'=>1,'user_id'=>$oUserProfile->getId(),'blog_type'=>['personal']],1,10)}}
avatar
Спасибо — код действительно выводит топики пользователя. А не подскажете пожалуйста, как вывести их аккуратно в профиле? без пагинации, просто 5 последних топиков. я не особо еще разобрался в движке.
avatar
Я предполагаю, что нужно смотреть файл whois.tpl тут /Вашсайт/templates/skin/ВашШаблон/actions/ActionProfile Что касается количества, то оно указывается в функции GetTopicsByFilter(фильтр, НомерСтраницы, КоличествоЭлементов) Т.е. в вашем случае так.
{assign var="aTopics" value=$LS->Topic_GetTopicsByFilter(['topic_publish'=>1,'user_id'=>$oUserProfile->getId(),'blog_type'=>['personal']],1,5)}}

Вообще описание этого и других методов можно увидеть тут
avatar
Да, да, про кол-во я понял. Меня интересует функция вывода топиков. я написал вручную, но там нет ни числа комментариев, ни даты (не нашел таких полей). Может есть системная функция вывода?

<ul>
		{assign var="aTopics" value=$aTopics.collection}
		{foreach from=$aTopics item=oTopic}
			<li>
				<h4 style="font-size: 16px;"><a href="{$oTopic->getUrl()}">{$oTopic->getTitle()|escape:'html'}</a></h4>
				<p>{$oTopic->getText()}</p>
			</li>
		{/foreach}
		</ul>
avatar
{$oTopic->getDate()}
{$oTopic->getCountComment()}
avatar
Спасибо. {$oTopic->getDate()} не сработало…
avatar
getDateAdd
avatar
спасибо, есть! А форматирование, чтобы оставить только дату без времени не подскажете?
avatar
{date_format date=$oTopic->getDateAdd() hours_back="12" minutes_back="60" now="60" day="day H:i" format="j F Y"}
avatar
Спасибо! у меня правда вышло «5 часов назад» — но это наверное даже лучше)
avatar
Это форматирование тоже можно убрать если нужна точная дата.

А так — всегда пожалуйста.
avatar
Спасибооо! :)
avatar
Это всё можно поосмотреть в в части вывода топиков в файлах типа topic_topic.tpl и topic_List.tpl вашего шаблона, а можно сразу после получения коллекции сделать инклюд topic_list.tpl )
avatar
спасибо! действительно вместо всего этого огорода достаточно было написать
{assign var="aTopics" value=$aTopics.collection}
		{include file='topic_list.tpl'}
avatar
реализацию увидеть можно?
avatar
Вам скриншот показать?
avatar
Было бы наглядно и понятно увидеть что из этого получилось.
avatar
Если использовать такой код:
{assign var="aTopics" value=$LS->Topic_GetTopicsByFilter(['topic_publish'=>1,'user_id'=>$oUserProfile->getId(),'blog_type'=>['personal']],1,5)}

{assign var="aTopics" value=$aTopics.collection}
{include file='topic_list.tpl'}

То выглядит вот так:
Справа - последние записи из личного блога
Однако можно выводить только заголовок с превью/только текст до ката/etc. То есть вывод топиков легко кастомизируется.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.