Основной курс по Joomla

Записывать действия зарегистрированных пользователей

0 Пользователей и 1 Гость просматривают эту тему.
  • 11 Ответов
  • 780 Просмотров
*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Всем здравствуйте. Подскажите пожалуйста как в Joomla 3.2.1  вести лог действий авторизированных пользователей. Т.е. когда user1 авторизовался на сайте, какие странички он посещал, что скачивал. Модуль для авторизации использую стандартный. Нашел в интернете следующее для записи логов:

jimport('joomla.log.log');
define('ERROR_LOG', 'com_record.'.date('Y_m_d').'.php');
JLog::addLogger(
   array('text_file' => ERROR_LOG),
   JLog::ALL,
   array('com_record')
);
JError::$legacy = false;
JLog::Add("тест!!");

в примере в лог файл выводится сообщение тест!, как вывести нужную информацию?
Спасибо ^-^

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Это Вам придется всю Joomla таким кодом наполонить. Поищите расширение, что-то похожее скорее всего есть. Но учтите, что в Joomla нельзя все контролировать и логировать соответственно.

*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Спасибо попробую поискать.

*

DiabloZet

  • Осваиваюсь на форуме
  • ***
  • 165
  • 4
  • Честь превыше всего!
Для просмотра каких страничек посещал человек вроде liveinternet.ru не плохо помогает...
Счетчик установите, там детальная инфа про пользователей, но уже что люди качают итд... нужно ставить код логов

*

SmokerMan

  • Профи
  • ********
  • 5329
  • 689
вести лог действий авторизированных пользователей.
что значит лог действий?)
нужно контролировать все get и post запросы?
в корне есть index.php, если все проходит через него, а через него типа по стандартам должно все происходить, то вот простой код
Код
$user = JFactory::getUser();
if (!$user->guest) {
$data = date('d.m.Y H:i:s'). ' - ' . $user->name . "\n";
ob_start();
var_dump($_REQUEST);
$data .= ob_end_clean();
file_put_contents(dirname(__FILE__).'/my.log', $data, FILE_APPEND, PHP_EOL);
}
нужно разметить в нем после
Код
$app = JFactory::getApplication('site');

но не факт что все происходить именное через него :)
расширения и ситуации бывают разные


*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Спасибо Вам за ответы. У меня сайт крутиться в локальной сети, где мне надо отследить что авторизованные пользователи посетили страничку, в какой день, тем самым узнать что Иванов Иван Иванович ознакомился со данными на страничке. 

SmokerMan я вставляю Ваш код index файл при авторизации у меня исчезает кириллица и ругается на строку: file_put_contents(dirname(__FILE__).'/my.log', $data, FILE_APPEND, PHP_EOL);

Если можете помочь еще советами подскажите пожалуйста.
Спасибо.

*

voland

  • Профи
  • ********
  • 9383
  • 420
  • Эта строка съедает место на вашем мониторе
Тогда может проще внешние системы статистики интегрировать?
Типа или еще чего нагуглить (on english)

*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Спасибо но у меня компьютеры только в локальной сети работают.

*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
$user = JFactory::getUser();
if (!$user->guest) {
   $data = date('d.m.Y H:i:s'). ' - ' . $user->name . "\n";
   ob_start();
   var_dump($_REQUEST);
   $data .= ob_end_clean();
   file_put_contents(dirname(__FILE__)."/my.log", $data);
Спасибо тебе SmokerMan! Лог авторизации пользователей теперь собирается! В коде убрал то что не могла понять Joomla и я тоже)))), а нажатие ссылок возможно сюда же записать данным пользователем?

*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Ребята проблему решил тема закрыта. В index файл прописал следующее

    $file="base_user";        //имя файла с логами пользователей
    $col_zap=3499;          //записей в логе пользователей
    $bot=htmlspecialchars(substr($xxx,0,80));//обрезаем USER-AGENT до 80 символов
$user = JFactory::getUser();
$datauser = $user->name ;
//записываем логи в файл с блокировкой
$l_cash='';
$fh=fopen($file,"a+");
flock($fh,LOCK_EX);
fseek($fh,0);
while (!feof($fh)) $l_cash.= fread($fh,8192);
$lines=explode("\n",$l_cash);
while(count($lines)>$col_zap) array_shift($lines);
$l_cash=implode("\n",$lines);
$l_cash.=date("H:i:s d.m")."|" .$datauser ."|".$_SERVER['REMOTE_ADDR']."|".
    htmlspecialchars($_SERVER['REQUEST_URI'])."\n";
ftruncate($fh,0);
fwrite($fh,$l_cash);
flock($fh,LOCK_UN);
fclose($fh);


Всем спасибо!

*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Вот код для отображения статистика через браузер, создаете php файл в корне сайта и заходите в него для просмотра.
Код:
<?php
if (isset($_GET["col"])) $col=$_GET["col"]; else $col=50;
$lines_cashe=file_get_contents("base_user", LOCK_EX);
$file=explode("\n",$lines_cashe);
$size_f=count($file)-1;
?>

<html>
<head>
<style type='text/css'>
 td.zz {PADDING-LEFT: 3px; FONT-SIZE: 9pt; PADDING-TOP: 2px; FONT-FAMILY: Arial;}
</style>
</head>

<body>
<center>
<?php
if ($col>$size_f) $col=$size_f;
echo 'Последние <b>'.$col.'</b> посетившие сайт:';
?>

<table width="750" cellspacing="1" cellpadding="1" border="0"
    style="table-layout:fixed">
<tr bgcolor="#eeeeee">
 <td class="zz" width="100"><b>Время, дата</b></td>
 <td class="zz" width="250"><b>Кто посещал</b></td>
 <td class="zz" width="100"><b>IP, прокси</b></td>
 <td class="zz" width="300"><b>Посещенный URL</b></td>
</tr>

<?php
for ($si=$size_f-1; $si>=$size_f-$col; $si--) {
$str=explode("|",$file[$si]);
echo '<tr bgcolor=#eeeeee><td class=zz>'.$str[0].'</td>';
echo '<td class=zz>'.$str[1].'</td>';
echo '<td class=zz>'.$str[2].'</td>';
echo '<td class=zz><a href="http://usefulscript.ru'.$str[3].'">'.$str[3];
echo '</a></td></tr>';
}
echo '</table>';
echo '<br>Просмотреть последние <a href=?col=100>100</a> <a href=?col=500>500</a> ';
echo '<a href=?col=1000>1000</a> посещений.';
echo '<br>Просмотреть <a href=?col='.sizeof($file).'>все посещения</a>.';
echo '</center></body></html>';
?>

*

Ilja93

  • Осваиваюсь на форуме
  • ***
  • 44
  • 0
Товарищи, а может кто подсказать как в этом коде еще добавить выборку по дате?