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

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

Не так давно я публиковал плагин для подсчета количества просмотров. Сделал небольшой рефакторинг кода, ибо столкнулся с неприятной ситуацией: дублированием ТВ значений в таблице.  

Итак, первым делам создаем три 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']))
    {	
        $docid=$modx->documentObject['id'];
        $table = $modx->getFullTableName('site_tmplvar_contentvalues');
        $tvCountall = 33; // id TV параметра с общим количеством
        $tvCounttoday = 32; // id TV параметра с количеством сегодняшних просмотров
        $tvLU = 34; // // id TV параметра с последнего апдейта
        
        // Проверяем, существует ли тв-параметр общего количества 
        if ($modx->db->getValue('select count(*) from '.$table.' where `contentid`='.$docid.' and `tmplvarid`='.$tvCountall)) 
        $all = $modx->db->getValue('select `value` from '.$table.' where `contentid`='.$docid.' and `tmplvarid`='.$tvCountall);
        else 
        {
            $all = 0;
            $modx->db->insert( array('contentid'=>$docid,'tmplvarid'=>$tvCountall,'value'=>0), $table); 		
        }
        
        // Проверяем, существует ли тв-параметр сегодняшнего количества
        if ($modx->db->getValue('select count(*) from '.$table.' where `contentid`='.$docid.' and `tmplvarid`='.$tvCounttoday))
        {
            $today = $modx->db->getValue('select `value` from `modx_site_tmplvar_contentvalues` where `contentid`='.$docid.' and `tmplvarid`='.$tvCounttoday);
    
        }
        else 
        {
        $today = 0;
        $modx->db->insert( array('contentid'=>$docid,'tmplvarid'=>$tvCounttoday,'value'=>0), $table); 		
        }
        
        // Проверяем, существует ли тв-параметр последнего апдейта	
        if ($modx->db->getValue('select count(*) from '.$table.' where `contentid`='.$docid.' and `tmplvarid`='.$tvLU)) $lu = $modx->db->getValue('select `value` from `modx_site_tmplvar_contentvalues` where `contentid`='.$docid.' and `tmplvarid`='.$tvLU);
        else 
        {
        $today = 0;
        $modx->db->insert( array('contentid'=>$docid,'tmplvarid'=>$tvLU,'value'=>''), $table); 		
        }
        
        
        $all++;
        
        $modx->db->update( array('value'=>$all), $table, '`tmplvarid` = '.$tvCountall.' and `contentid`='.$docid);  
        
        
        if (($lu+86400)<strtotime(date("Y-m-d")))
        {
        $modx->db->update( array('value'=>1), $table, '`tmplvarid` = '.$tvCounttoday.' and `contentid`='.$docid);  
            $tu = strtotime(date("Y-m-d"))-7200;
            $modx->db->update( array('value'=>$tu), $table, '`tmplvarid` = '.$tvLU.' and `contentid`='.$docid); 
            
            }
            else 
            {
            $today++;
            $modx->db->update( array('value'=>$today), $table, '`tmplvarid` = '.$tvCounttoday.' and `contentid`='.$docid);  
            
            }	
            return;
        }	

Сохраняем и наслаждаемся результатом. 

comments powered by HyperComments