countViews

Количество просмотров страниц для MODX Evolution

Количество просмотров страниц для MODX Evolution.

Устанавливаем счетчик количества просмотров. Для этого нам нужно будет создать дополнительное поле в таблице modx_site_content базы данных. Вот параметры нового поля – count int(20) default = 0.

Теперь создадим сниппет inc, который будет считать количество посещений. Вызов сниппета inc нужно установить в самом верху шаблона материалов. Код сниппета:

$table = $modx->getFullTableName("site_content");
$id = $modx->documentObject['id'];
$result = $modx->db->update("count=count+1", $table, "id=$id");

И наконец, создаем сниипет hits, отвечающий за вывод количества просмотров:

$id = isset($id) ? $id : $modx->documentIdentifier;
return $modx->db->getValue($modx->db->select('count',$modx->getFullTableName('site_content'),'id='.$id));

Давайте рассмотрим еще один способ подсчета количества просмотров. Данный способ имеет одно преимущество перед предыдущим – его можно использовать в шаблоне Ditto (исходные материалы).

Итак, создадим TV-параметр countViews с типом ввода Text.

Далее создаем сниппет countViews с таким содержанием:

$type = isset($type) ? $type : 'output'; 
$table = $modx->getFullTableName('site_tmplvar_contentvalues'); 
$insert = false; 
$lock = ($lock == '1') ? true : false; 
$_SESSION['countViews'] = is_array($_SESSION['countViews']) ? $_SESSION['countViews'] : array(); 
$countViews = (isset($_SESSION['countViews'][$id]) && $_SESSION['countViews'][$id] === true) ? true : false; 
$usertype = isset($_SESSION['usertype']) ? $_SESSION['usertype'] : 'user'; 
switch($type) { 
    case 'output': 
        $count = $modx->getTemplateVar('countViews', '*', $id); 
        echo ($count['value'] == '' ? '0' : $count['value']); 
    break; 
    case 'counter': 
        if($usertype == 'manager' || ($lock && $countViews)) {
            break;
        } 
        else {
            $tvar = $modx->db->select('value', $table, 'tmplvarid ="'.$tvid.'" and contentid="'.$id.'"'); 
            if($modx->db->getRecordCount($tvar) == 0) {
                $insert = true; $count = 0;
            } 
            else {
                $row = $modx->db->getRow($tvar); 
                $count = $row['value'];
            } 
            $count++; 
            $_SESSION['countViews'][$id] = true; 
            $fields = array('value' => $count, 'tmplvarid' => $tvid, 'contentid' => $id); 
        if($insert) {
            $modx->db->insert($fields, $table);
        } 
        else {
            $modx->db->update($fields, $table, 'tmplvarid = "'.$tvid.'" and contentid = "'.$id.'"');
        }
    } 
break;

}

На страницах, где будет происходить подсчет посещений, вставляем этот код:

[!countViews? &type=`counter` &id=`[*id*]` &tvid=`id TV-параметра countViews`!]

И, наконец, в том месте, где Вы ходите видеть количество просмотров, вставляем такой код:

[[countViews? &type=`output` &id=`[*id*]` &tvid=`id TV-параметра countViews`]] - в документе MODX
[[countViews? &type=`output` &id=`[+id+]` &tvid=`id TV-параметра countViews`]] - в шаблоне Ditto

Обратите внимание: просмотр страницы авторизованным пользователем в системе MODX не учитывается.

Mem: 3.5 mb, MySQL: 0.0025 s, 2 req., PHP: 0.0393 s, all: 0.0418 s, cache.