Кнопка «Подписаться» [Решено]
11
Сейчас неудобно подписываться на активность пользователей. Для того чтобы начать следить за кем-либо нужно запомнить его логин, перейти на страницу «Активность» и начать его вводить в соответствующем поле и после этого выбрать нужного пользователя в появившемся списке.
Гораздо лучше реализовать все как в популярных социальных сетях (twitter, dribbbler, vkontakte): добавить кнопку подписаться прямо в профиль пользователя.
Как это сделать сказал пользователь Chiffa, за что ему большая благодарность =))
Добавить после:
Добавить после:
Гораздо лучше реализовать все как в популярных социальных сетях (twitter, dribbbler, vkontakte): добавить кнопку подписаться прямо в профиль пользователя.
Как это сделать сказал пользователь Chiffa, за что ему большая благодарность =))
classes\actions\ActionProfile.class.php:
Функция EventShutdown, добавить можно в самый конец:
$this->oUserCurrent=$this->User_GetUserCurrent();
if ($this->oUserCurrent && $aUserSubscribes=$this->Userfeed_getUserSubscribes($this->oUserCurrent->getId())) {
$this->Viewer_Assign('isSubscribe',isset($aUserSubscribes['users'][$this->oUserProfile->getId()]) ? 1 : 0);
$this->Lang_AddLangJs(array('stream_subscribe','stream_unsubscribe'));
}templates\language\russian.php
Добавить:'stream_unsubscribe' => 'Отписаться',
'stream_subscribe' => 'Подписаться',
templates\skin\new-query\actions\ActionProfile\sidebar.tpl
Найти:<li><a href="{router page='talk'}add/?talk_users={$oUserProfile->getLogin()}">{$aLang.user_write_prvmsg}</a></li> Добавить после:
{if $isSubscribe}
<li><a id="subscribe-button" href="#" onclick="return ls.user.unsubscribe(this)" rel="{$oUserProfile->getId()}">{$aLang.stream_unsubscribe}</a></li>
{else}
<li><a id="subscribe-button" href="#" onclick="return ls.user.subscribe(this)" rel="{$oUserProfile->getId()}">{$aLang.stream_subscribe}</a></li>
{/if}templates\skin\new-query\js\friends.js
Найти:ls.user = (function ($) {Добавить после:
this.subscribe = function(obj) {
obj=$(obj);
var idUser=obj.attr('rel');
ls.ajax(aRouter['feed']+'subscribe/', {'type':'users', 'id':idUser}, function(data) {
if (data.bStateError) {
ls.msg.error(data.sMsgTitle,data.sMsg);
} else {
ls.msg.notice(data.sMsgTitle,data.sMsg);
obj.replaceWith('<a id="subscribe-button" href="#" onclick="return ls.user.unsubscribe(this)" rel="'+idUser+'">'+ls.lang.get('stream_unsubscribe')+'</a>');
}
});
return false;
};
this.unsubscribe = function(obj) {
obj=$(obj);
var idUser=obj.attr('rel');
ls.ajax(aRouter['feed']+'unsubscribe', {'type':'users', 'id':idUser}, function(data) {
if (data.bStateError) {
ls.msg.error(data.sMsgTitle,data.sMsg);
} else {
ls.msg.notice(data.sMsgTitle,data.sMsg);
obj.replaceWith('<a id="subscribe-button" href="#" onclick="return ls.user.subscribe(this)" rel="'+idUser+'">'+ls.lang.get('stream_subscribe')+'</a>');
}
});
return false;
};
- +2
- 27 января 2012, 14:53
- Newman
Хороший вопрос, меня тоже заинтересовало, попробую что-то придумать.

- Frankenstein
- 27 января 2012, 18:38
- ↓
Сюда livestreet.ru/stream/ или сюда livestreet.ru/feed/ подписка нужна?
Только после вашего вопроса заметил, что подписываться в «Ленте» и «Активности» нужно отдельно на одного и того же пользователя.
Подписка нужна сюда livestreet.ru/feed/.
Это будет логичнее. Если я нажал кнопку «Подписаться» (или ее можно назвать «Читать»), то это значит я хочу читать топики этого пользователя на сайте. А вот если я добавил его в друзья, то это означает что я хочу получать уведомления об активности этого пользователя на сайте (т.е. как это сейчас уже работает с добавлением в друзья).
Подписка нужна сюда livestreet.ru/feed/.
Это будет логичнее. Если я нажал кнопку «Подписаться» (или ее можно назвать «Читать»), то это значит я хочу читать топики этого пользователя на сайте. А вот если я добавил его в друзья, то это означает что я хочу получать уведомления об активности этого пользователя на сайте (т.е. как это сейчас уже работает с добавлением в друзья).
classes\actions\ActionProfile.class.php:
Функция EventShutdown, добавить можно в самый конец:if ($this->oUserCurrent && $aUserSubscribes=$this->Userfeed_getUserSubscribes($this->oUserCurrent->getId())) {
$this->Viewer_Assign('isSubscribe',(bool)isset($aUserSubscribes[$this->oUserProfile->getId()]));
$this->Lang_AddLangJs(array('stream_subscribe','stream_unsubscribe'));
}templates\language\russian.php
Добавить:'stream_unsubscribe' => 'Отписаться',
'stream_subscribe' => 'Подписаться',
templates\skin\new-query\actions\ActionProfile\sidebar.tpl
Найти:<li><a href="{router page='talk'}add/?talk_users={$oUserProfile->getLogin()}">{$aLang.user_write_prvmsg}</a></li> Добавить после:
{if $isSubscribe}
<li><a id="subscribe-button" href="#" onclick="return ls.user.unsubscribe(this)" rel="{$oUserProfile->getId()}">{$aLang.stream_unsubscribe}</a></li>
{else}
<li><a id="subscribe-button" href="#" onclick="return ls.user.subscribe(this)" rel="{$oUserProfile->getId()}">{$aLang.stream_subscribe}</a></li>
{/if}templates\skin\new-query\js\friends.js
Найти:ls.user = (function ($) {Добавить после:
this.subscribe = function(obj) {
obj=$(obj);
var idUser=obj.attr('rel');
ls.ajax(aRouter['feed']+'subscribe/', {'type':'users', 'id':idUser}, function(data) {
if (data.bStateError) {
ls.msg.error(data.sMsgTitle,data.sMsg);
} else {
ls.msg.notice(data.sMsgTitle,data.sMsg);
obj.replaceWith('<a id="subscribe-button" href="#" onclick="return ls.user.unsubscribe(this)" rel="'+idUser+'">'+ls.lang.get('stream_unsubscribe')+'</a>');
}
});
return false;
};
this.unsubscribe = function(obj) {
obj=$(obj);
var idUser=obj.attr('rel');
ls.ajax(aRouter['feed']+'unsubscribe', {'type':'users', 'id':idUser}, function(data) {
if (data.bStateError) {
ls.msg.error(data.sMsgTitle,data.sMsg);
} else {
ls.msg.notice(data.sMsgTitle,data.sMsg);
obj.replaceWith('<a id="subscribe-button" href="#" onclick="return ls.user.subscribe(this)" rel="'+idUser+'">'+ls.lang.get('stream_subscribe')+'</a>');
}
});
return false;
};
Не работает…
При заходе на страницу профиля выдает ошибку:
В чем может быть ошибка? Может я неправильно код в ActionProfile.class.php добавил?
У меня сейчас выглядит все так:
При заходе на страницу профиля выдает ошибку:
Notice: Undefined property: ActionProfile::$oUserCurrent in Z:\home\site.ru\www\classes\actions\ActionProfile.class.php on line 716В чем может быть ошибка? Может я неправильно код в ActionProfile.class.php добавил?
У меня сейчас выглядит все так:
/**
* Выполняется при завершении работы экшена
*/
public function EventShutdown() {
if (!$this->oUserProfile) {
return ;
}
/**
* Загружаем в шаблон необходимые переменные
*/
$iCountTopicFavourite=$this->Topic_GetCountTopicsFavouriteByUserId($this->oUserProfile->getId());
$iCountTopicUser=$this->Topic_GetCountTopicsPersonalByUser($this->oUserProfile->getId(),1);
$iCountCommentUser=$this->Comment_GetCountCommentsByUserId($this->oUserProfile->getId(),'topic');
$iCountCommentFavourite=$this->Comment_GetCountCommentsFavouriteByUserId($this->oUserProfile->getId());
$this->Viewer_Assign('oUserProfile',$this->oUserProfile);
$this->Viewer_Assign('iCountTopicUser',$iCountTopicUser);
$this->Viewer_Assign('iCountCommentUser',$iCountCommentUser);
$this->Viewer_Assign('iCountTopicFavourite',$iCountTopicFavourite);
$this->Viewer_Assign('iCountCommentFavourite',$iCountCommentFavourite);
$this->Viewer_Assign('USER_FRIEND_NULL',ModuleUser::USER_FRIEND_NULL);
$this->Viewer_Assign('USER_FRIEND_OFFER',ModuleUser::USER_FRIEND_OFFER);
$this->Viewer_Assign('USER_FRIEND_ACCEPT',ModuleUser::USER_FRIEND_ACCEPT);
$this->Viewer_Assign('USER_FRIEND_REJECT',ModuleUser::USER_FRIEND_REJECT);
$this->Viewer_Assign('USER_FRIEND_DELETE',ModuleUser::USER_FRIEND_DELETE);
if ($this->oUserCurrent && $aUserSubscribes=$this->Userfeed_getUserSubscribes($this->oUserCurrent->getId())) {
$this->Viewer_Assign('isSubscribe',(bool)isset($aUserSubscribes[$this->oUserProfile->getId()]));
$this->Lang_AddLangJs(array('stream_subscribe','stream_unsubscribe'));
}
}
Комментарии (17)
RSS свернуть / развернуть