|
|
24.04.2011, 12:40
|
|
dimidroll
Егоровых Дмитрий

Зарегистрирован: 2007-10-05
Сообщений: 81
|
Ребята, подскажите каким образом реализовать ленту активности пользоватлей на сайте?
Например вести таблицу с событиями -
Вася Пупкин отправил сообщение Иванову
Иванов прочитал сообщение от Вася Пупкин
Иванов оставил комментарий на Доске объевлений
Вася Пупкин изменил статус на он-лайн
и тому подобное.
Спасибо за советы! В действиях после добавления, изменения в нужных компонентах написать добавление событий в базу, но как описать событие для конкертного поля, допустим
при нажатии на чекбокс, фиксировал событие "Вася Пупкин прочел сообщение от Иванов"...
Может как то можно использовать модуль логирования в системе? или писать свой?
В документации по модулю сказано что можно добавлять свои события, очень сжато о них описано...
ася - 97336016
|
|
|
25.04.2011, 03:44
|
|
Asiat
Аниматика

Зарегистрирован: 2005-12-12
Сообщений: 576
|
В документации разработчика, по-моему, про события. Там попробуйте почитайте. По идее это должно быть самое оно, только я лично еще не юзал.
|
|
|
25.04.2011, 11:37
|
|
dimidroll
Егоровых Дмитрий

Зарегистрирован: 2007-10-05
Сообщений: 81
|
Читал, но мало чего понял, наглядный бы пример рассмотреть...
ася - 97336016
|
|
|
25.04.2011, 22:53
|
|
dimidroll
Егоровых Дмитрий

Зарегистрирован: 2007-10-05
Сообщений: 81
|
Нашел в инете InstantCMS - разобрал по "косточкам" - посмотрел как там реализована лента активности... суть в следующем, к каждому компоненту прикреплен обработчик события, передающий параметры к функции в класс. В базе существует 2 таблички - собственно сам лог событий и таблица с типами событий с шаблонами вывода сообщения... по аналогии создал 2 компонента в Netcat с похожей структурой -
Тип событий (Таблица Message131)
(NameEvent Имя события
TitleEvent Заголовок события
MessageEvent Сообщение события
isTracked Регистрация события
isVisible Трансляция события
ComponentID),
Лента активности (Таблица Message132)
(
EventID Код события
Date Дата регистрации
ObjectID Код объекта
ObjectName Название объекта
ObjectUrl Ссылка объекта
TargetObjectName Название места объекта
TargetObjectUrl Ссылка на место объекта
TargetObjectID Код места
Description Описание события
isFriendsOnly Просмотр только друзья
isUsersOnly Просмотр только пользователи
)
затем вставил функцию в файл /netcat/modules/default/function.inc.php
модифицированный и урезанный код для добавления записи в таблицу ленты
Код:
/**
* Добавляет действие в ленту активности
* @param str $action_name
* @param array $params (object, object_url, target, target_url, description)
* @return bool
*/
function logEvent($action_name, $params){
global $db,$AUTH_USER_ID;
if (!$AUTH_USER_ID && $action_name != 'add_user'){ return false; }
$action = $db->query("SELECT * FROM Message131 WHERE NameEvent='".$action_name."' AND isTracked=1 ORDER BY Message_ID ASC LIMIT 1");
if (!$action) { return false; }
$params['object'] = mysql_real_escape_string(stripslashes(str_replace(array('\r', '\n'), ' ', $params['object'])));
$params['target'] = mysql_real_escape_string(stripslashes(str_replace(array('\r', '\n'), ' ', $params['target'])));
$params['description'] = mysql_real_escape_string(stripslashes(str_replace(array('\r', '\n'), ' ', $params['description'])));
$params['description'] = preg_replace('/\[hide\](.*?)\[\/hide\]/i', '', $params['description']);
$params['description'] = preg_replace('/\[hide\](.*?)$/i', '', $params['description']);
$params['user_id'] = $current_user['User_ID'];
$sql = "INSERT INTO Message132 (EventID, Date, User_ID, ObjectName, ObjectUrl, ObjectID,
TargetName, TargetUrl, TargetID, Description, isFriendsOnly, isUsersOnly)
VALUES (".$action['Message_ID'].", NOW(), ".$params['user_id'].",
'".$params['object']."', '".$params['object_url']."', '".$params['object_id']."',
'".$params['target']."', '".$params['target_url']."', '".$params['target_id']."',
'".$params['description']."', ".$params['is_friends_only'].", ".$params['is_users_only'].")";
$db->query($sql);
return true;
}
в компоненте в действиях после добавления добавляю
Код:
logEvent('add_catalog', array(
'object' => $f_Name,
'object_url' => 'url товара',
'object_id'=> $message,
'target' => $current_sub['Subdivision_Name'],
'target_url' => 'url каталога',
'target_id' => $current_sub['Subdivision_ID'],
'description' => 'бебебе'
));
Запись в базу не производит почему то...
ася - 97336016
|
|
|
26.04.2011, 03:28
|
|
Asiat
Аниматика

Зарегистрирован: 2005-12-12
Сообщений: 576
|
Цитата:в компоненте в действиях после добавления добавляю
А в каком компоненте? Вы не привели пример, что-где добавляется... А вообще, функцию-то отладить, думаю, не проблема. Тут фокус в другом - таким макаром вы сможете отслеживать только события добавления/изменения/удаления/включения объектов в компонентах. А вот, допустим, добавление нового раздела? Или авторизация пользователя?
Все ж попробуйте с системой событий поразбираться, потом нам отпишете, чего получилось
|
|
|
26.04.2011, 21:59
|
|
dimidroll
Егоровых Дмитрий

Зарегистрирован: 2007-10-05
Сообщений: 81
|
Цитата:
А в каком компоненте? Вы не привели пример, что-где добавляется... А вообще, функцию-то отладить, думаю, не проблема.
Привел пример компонента Товара в каталоге не суть важно в каком, лишь бы писал, то что нужно
Цитата:
Тут фокус в другом - таким макаром вы сможете отслеживать только события добавления/изменения/удаления/включения объектов в компонентах. А вот, допустим, добавление нового раздела? Или авторизация пользователя?
это регистрируется в системе и так, зачем дублировать?
Лента активности для того и нужна чтоб ввести в курс дел вышестоящего руководства, что происходит на сайте, представлять картину, что происходит вообще в компании, народ чем то занят и т.п.
Цитата:
Все ж попробуйте с системой событий поразбираться, потом нам отпишете, чего получилось 
Пытаюсь, пока тщетно... примеров нет
ася - 97336016
|