Плагин для подсчета количества просмотров за все время и за день

Плагин для подсчета количества просмотров за все время и за день - Liber.pro - личный сайт Алексея Либера Картинка  1

Достаточно частая задача - иметь представление о количестве просмотров страницы. Конечно, с этой задачей с лихвой справляется Яндекс.Метрика, но что делать, если если нам нужно эти данные выводить на странице в кастомном виде (хранить в tv-параметрах)? В этом нам на помощь придут плагины для Modx Evolution (будет время - перепишу под Revo и сделаю небольшой рефакторинг кода).

Итак, первым делам создаем три tv-параметра: count_view_all,count_view_today,dateUpdate
Для красоты можем прописать правило для ManagerManager (как правило чанк mm_rules) - mm_ddReadonly('count_view_all,count_view_today,dateUpdate');

Далее создаем плагин (название любое), ставим галочку в системных событиях на  OnAfterLoadDocumentObject и OnLoadWebPageCache и вставляем сам код:

global $modx;
if (($modx->documentObject['id']!=1) and (is_numeric($modx->documentObject['id'])) and ($modx->documentObject['id']))
    {	
    $id=$modx->documentObject['id'];
    
    require_once('assets/libs/resourse.php');
    $resourse=resourse::Instance($modx);
    
    $all = $modx->runSnippet('DocInfo',array('docid'=>$id, 'field'=>'count_view_all'));
    $today = $modx->runSnippet('DocInfo',array('docid'=>$id, 'field'=>'count_view_today'));
    $lu = $modx->runSnippet('DocInfo',array('docid'=>$id, 'field'=>'dateUpdate'));
    $all = $all+1;
    
 
    $resourse->edit($id)->set('tvcount_view_all',$all)->save(null,false);
    if (($lu+86400)<strtotime(date("Y-m-d")))
    {
        $resourse->edit($id)->set('tvcount_view_today',1)->save(null,false);
        $tu = strtotime(date("Y-m-d"))-7200;
        $resourse->edit($id)->set('tvdateUpdate',$tu)->save(null,false);
    }
    else 
    {
        $today = $today+1;
        $resourse->edit($id)->set('count_view_today',$today)->save(null,false);		
    }	
    return;
    }	

Сохраняем и наслаждаемся результатом. Внимание: для корректной работы, предполагается что у Вас стоит последняя версия сборки Dmi3yy, Если у вас стоит версия ниже - крайне рекомендую до нее обновиться.

Следующая работа

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