Пример работы с сессией - vorst.ru

Вспомнить все


Если читатель хочет вспомнить, что просмотрено и прочитано

Сессия часто используется для сохранения истории просмотров контента на созданном сайте. Например в разрабатываемых сайтах магазинов. Предположим, что посетителю интересна его активность на сайте. Попробуем хранить и показывать оставленный "след".

Вспомнить все

Если читатель хочет вспомнить, что просмотрено и прочитано

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


Просмотр поста начинается с его выбора. То есть с вызова действия view контроллера frontend\controllers\PostController.php.

Код, позволяющий сохранить оставленный "след", может выглядеть так:

public function actionView($id)
{
    $model = $this->loadModel($id);
    // read trace
    $trace = $session->has('trace') ? json_decode($session->get('trace')) : [];
    // add new one
    $trace[] = ['time' => time(), 'id' => $model->id];
    // save trace
    $session->set('trace', json_encode($trace));
    ...

Теперь можно получить заголовки просмотренных статей и вычислить время просмотра - common\models\Post.php.

/*
 * @param array post->id & time of post loading
 * @return array post models & time spended for reading
 */
public function getViewedPosts($trace)
{
    $chain = [];
    $count_trace = count($trace);
    // add border element to right calculation of time spent for post reading
    $trace[] = $trace[$count_trace - 1];
    // from last to first
    for($i = $count_trace; $i > 1; $i--) {
        $a = [];
        // find model
        $a['post'] = Post::find()
            ->where(['id' => $trace[$i - 1]->id])
            ->one();
        // calculate time
        $a['time'] = $trace[$i]->time - $trace[$i - 1]->time;
        // add to chain
        $chain[] = $a;
    }
    return $chain;
}

Остается написать виджет.

Заключение

Сохранение "следа" из заголовков просмотренных статей может помочь тем, кто забыл сохранить закладку в браузере.

Оставьте комментарий

Только авторизованные посетители могут оставлять комментарии. Пожалуйста, войдите или пройдите регистрацию.