
Недавно писал модуль nextgame для платформы Nextgame.ru, который позволяет добавлять на сайт социальные игры. Среди всех возможностей платформы предоставляется и метод отправки сообщений на стену пользователя. Причем, сообщения могут отправлять не только пользователи, но и приложения.
Немного поразмыслив, решил написать отдельный модуль, реализующий стену в профиле пользователя.
Сама стена представляет собой блок, в котором выводятся сообщения и форма для отправки сообщений. При желании, форму можно отключить. Блок стены можно разместить в любом регионе в профиле пользователя, или вывести программно. Основное условие - стена работает только на странице профиля.
Отправка, удаление и загрузка сообщений осуществляется с применением ajax framework, т.е. без перезагрузки страницы.
Возможность отправки сообщений незарегистрированными пользователями даже не рассматривалась.
Редактирование сообщений тоже не поддерживается. Возможно в будущем добавлю, пишите в комментариях. Если будут советы и рекомендации по улучшению, будет и дальнейшее развитие.
Хочу рассказать, как интегрировать сторонние модули. Если у Вас есть модуль, который постит сообщения от имени чего-либо или кого-либо (группы, приложения, игры). То стоит придерживаться следующего порядка действий.
1. Для отправки сообщения используйте функцию ng_wall_savePost($objFile).
Объект $objFile имеет следующие свойства:
$objFile = new stdClass();
$objFile->uid = $uid; // ID пользователя, на стену которого будет отправлено сообщение
$objFile->poster_type = $ngPosterType; //Тип отправителя. По умолчанию определен тип 'user, но у Вас есть возможность добавлять свои типы, например: 'app', 'group'.
$objFile->poster_id = $ngPosterId; //ID отправителя
$objFile->message = $ngMessage; //Текст сообщения
$objFile->time = time(); //Дата публикации
$objFile->status = 1; //Статус сообщения. 1-непрочитано (новое), 0-прочитано
При успешной отправке сообщения, функция возвращает WID - уникальный номер поста.
2. Определите свой тип отправителя. Для этого существует хук: MYMODULE_ng_wall_load_poster($type=NULL,$id=NULL,$msg=NULL)
Ниже приведен пример из модуля nextgame. Он показывает, как реализовано объявление нового типа отправителя - приложения.
function nextgame_wallpost_ng_wall_load_poster($type=NULL,$id=NULL,$msg=NULL){
if($type='app'){
$ngGame=nextgame_game_page_load($id);
$account_def=user_load(0);
$poster=array();
$poster['type']='app';
$poster['id']=$id;
$poster['name']=($ngGame) ? l($ngGame['title'],'nextgame/'.$ngGame['id'],array('query'=>array('post_id'=>$msg->wid,'poster_id'=>$msg->uid))) : t("Undefined");
$poster['picture']=($ngGame) ? l($ngGame['logo_medium'],'nextgame/'.$ngGame['id'],array('html'=>true,'query'=>array('post_id'=>$msg->wid,'poster_id'=>$msg->uid))) : theme('user_picture', array('account' => $account_def));
$poster['post_missing']=($ngGame) ? false : t("Posted by unknown app");
return array($type."_".$id=>$poster);
}
}
Комментарии
Добавить комментарий