2013-09-12 2 views
0

У меня есть простая система отслеживания страниц в приложении Yii. Когда пользователь просматривает отдельный элемент, я обновляю БД с помощью page_id, session_id, time. У меня также есть столбец time_ended, хотя я не уверен, что самый простой способ обновить это поле?Как показать время, когда пользователь покинул страницу

В настоящее время это очень просто, как так:

public function actionView($id) { // View a single item 

// Load item 
$model = Item::model()->loadItem($id); 

// load viewed item model 
$viewedPage = new ViewedItem; 
// set attributes 
$viewedPage->page_id = $model->id; 
$viewedPage->session_id = Yii::app()->session->sessionId; 
$viewedPage->time_started = new CDbExpression('NOW()'); 
$viewedPage->save(); 

$this->render('view', array(
     'model' => $this->loadModel($id, 'Item'), 
} 

Любое руководство будет полезно.

Благодаря

Jonny

+0

Вам необходимо опубликовать код для всего контроллера, если вы можете мне помочь. Мне нужно посмотреть, как вы вызываете модель. –

+0

@ s.d Обновлен мой код – Jonnny

ответ

3

Поскольку HTTP является протоколом без мы не можем убедиться, когда пользователь покинуть страницу. Но есть два способа сделать это.

  1. метод Javascript: Событие «onbeforeunload» срабатывает, когда пользователь покидает страницу. вы можете посмотреть это событие, а затем использовать $ .post() или $ .ajax() для выполнения действия, которое будет обновлять $time_ended для текущего session_id.

  2. Yii Метод (код): На стороне сервера может быть скрипт, который будет проверять каждый сеанс. он будет проверять, что если последний запрос от session_id является x_second старым, то мы можем установить последний раз записанный в $time_ended

Я думаю, что все это будет полезно.

+0

Спасибо, я посмотрю на это больше – Jonnny

Смежные вопросы