Счетчик количества просмотров страницы на MODx


Не будет лишним знать общее количество просмотров страниц блога пользователями. Поэтому мной было решено установить такой счетчик на свой сайт.

Можно написать собственный скрипт, но так как для студии KANBY используется CMS MODx, то я воспользуюсь готовым решением. А готовым решением является плагин ViewCountPageHit, который вы можете найти на официальном сайте MODx.

Подготовка

Для начал нам необходимо установить модуль PageHitCounter (прямая ссылка на скачивание здесь). Полный модуль состоит из самого модуля и плагина. Вначале установим плагин.

Установка плагина PageHitCounter

Заходим в панели администрирования MODx в Элементы -> Управление элементами. Далее кликаем Создать плагин. Вводим следующее:

  • Имя плагина PageHitCounter
  • Описание плагина - PageHitCounter
  • Вставляем код плагина:

 

// CountPageHit - plugin for MODx Evolution
// maintains a count of page views
// 08-2006 sottwell@sottwell.com
// Released to Public Domain
// uses onWebPagePrerender system event
// Manager users' visits will not be counted. 
// Documents set to not Log Visits will not be counted.
// requires PageHitCounter module to create the page_hit_counter table
global $table_prefix;
if(!isset($_SESSION['usertype'])) { $_SESSION['usertype'] = ''; }
if($modx->documentObject['donthit'] != 1 && $_SESSION['usertype'] != 'manager') {
  $sql = "INSERT INTO ".$table_prefix."page_hit_counter (page_id, page_count) VALUES ($modx->documentIdentifier, 1)
  ON DUPLICATE KEY UPDATE page_count=page_count+1";
  $modx->db->query($sql);
}
return;

Переключаемся на вкладку Системные события и ставим галочку напротив onWebPagePrerender.

Жмем Сохранить.

Установка модуля PageHitCounter

Заходим в панели администрирования MODx в Модули -> Управление модулями. Далее кликаем Новый модуль. Вводим следующее:

  • Имя модуля PageHitCounter
  • Описание модуля - PageHitCounter
  • Вставляем код модуля:
// PageHitCounter - module for MODx Evolution 1.x
// creates page_hit_counter table if necessary
// displays page requests
// Version 3
// 08-2006 sottwell@sottwell.com
// Updated 04-2011 for Evolution
// released to the Public Domain
// requires the CountPageHit plugin to insert data into the table

global $table_prefix, $manager_theme, $SystemAlertMsgQueque, $_style, $modx_textdir, $_lang, $modx_manager_charset, $modx_lang_attribute;

if(isset($_POST['tables']) && $_POST['tables'] == 'Create Table') {
  $sql = "CREATE TABLE IF NOT EXISTS `".$table_prefix."page_hit_counter` (
  `page_id` int(4) unsigned NOT NULL default '0',
  `page_count` int(10) unsigned NOT NULL default '0',
  UNIQUE KEY `page_id` (`page_id`)
)";
  $modx->db->query($sql);
}
include_once "header.inc.php";

$page = '<h1>Page Hit Counter</h1>
<div class="sectionBody">
';

$sql = "SHOW TABLES LIKE '".$table_prefix."page_hit_counter'";
$rs = $modx->db->query($sql);
$count = $modx->db->getRecordCount($rs);

if($count < 1) { 
  $page .= '
<div class="searchbar">
<form id="phcCreateTableForm" action="" enctype="multipart/form-data" method="post" style="margin:0;padding:0;" >
<fieldset style="border:none;margin:0 0 0 20px;padding:0;">
<label for="tables">Table does not exist. Please create the table: 
<input type="submit" id="tables" name="tables" value="Create Table" />
</label>
</fieldset>
</form>
</div>  
    ';
} else {
    $page .= '
<div id="placeholder"></div>
    ';
    $sql = "SELECT * FROM ".$table_prefix."page_hit_counter";
    $rs = $modx->db->query($sql);
    $count = $modx->db->getRecordCount($rs);
    if($count < 1) {
        $page .= $_lang["no_records_found"];
    } else {
        $resources = array_flip($modx->documentListing);
        $page .= '<table class="countTable" cellpadding="0" cellspacing="0" border="0"><tr><th>Page</th><th>Count</th></tr>';
    while($row = $modx->db->getRow($rs)) {
        $page .= '<tr><td style="width:80%;text-align:center;">'.$resources[$row['page_id']].'</td><td style="text-align:center;">'.$row['page_count'].'</td></tr>';
    }
    $page .= '</table>';
    }
}
$page .= '</div> <!-- end section body -->';
echo $page;
include_once "footer.inc.php";

 

Жмем Сохранить.

Теперь необходимо запустить модуль (см. иллюстрацию)

Запуск модуля в MODx

После этого модуль попросит вас создать новую таблицу для учета количества просмотров страниц. Мы конечно же соглашаемся и жмем Create table.

Page Hit Counter создание таблицы

После этого у вас должно появиться сообщение о том, что записей не найдено. Это говорит о том, что ни одного посетителя не зафиксированно на страницах сайта.

Стоит отметить: посещения администратораа сайта не регистрируются. Поэтому не старайтесь обновлять страницы когда вы авторизованны, вас в посетители не добавят.

Page Hit Counter создание таблицы

Модуль Page Hit Counter будет хранить информацию о количествах просмотров всех страниц сайта. Данную информацию вы можете увидеть в окне модуля в разделе Модули.

На этом подготовка закончена, и мы можем перейти к добавлению счетчика на страницы сайта.

Реализация

Необходимо создать новый плагин. Для этого выбираем Элементы -> Управление элементами. В открывшемся окне выбираем в области вкладок Сниппеты и кликаем Новый сниппет.

Создание нового сниппета в MODx

Заполняем поля:

  • Название сниппета - ViewCountPageHit
  • Описание сниппета - Количество просмотров страницы

И вставляем следующий код:

<?php
// ViewCountPageHit - plugin for MODx 0.9.x
// maintains a count of page views
// 05-2008
// Documents set to not Log Visits will not be counted.
// requires PageHitCounter module

global $table_prefix;
global $modx;

// is the parameter ID set ?
$id = !is_null($id) ? $id : $modx->documentIdentifier;
// Get the Setting of 'donthit' for the Page with the ID: $id
$doc_donthit = $modx->getDocument( $id , 'donthit');

// Correct false counter
$add = 0;
if ($modx->documentIdentifier == $id) { $add = 1; }

// is the Page set 'donthit' ?
if($doc_donthit['donthit'] != 1 ) {
    $output = $pre;
    
    $rs = $modx->db->select(" * ", $table_prefix."page_hit_counter", '`page_id` = '.$id);
    if($modx->db->getRecordCount($rs) == 1) {
        while($row = $modx->db->getRow($rs)) {
            $output .= $row['page_count']+$add;
        }
    }
    else { $output .= $add; }
    
    $output .= $past;
}
return $output;
?>

Жмем Сохранить.

Теперь необходимо встроить созданный сниппет в шаблон одиночной страницы. Для этого переходим в редактор шаблона Элементы -> Управление элементами. Выбираем вкладку Шаблоны и кликаем необходимый шаблон из списка.

После этого в необходимую область вставляем код вызова сниппета внутри двойных квадратных скобок:

ViewCountPageHit? &pre=`Эту страницу просмотрели за все время ` &past=` раз(а)`

После чего у вас должна появиться такая строчка:

Page Hit Counter количество просмотров

Подзравляю!

На этом установка счетчика просмотров на страницы нашего сайта закончена. Если у вас возникли проблемы или вопросы, то расскажите о них в комментариях и постараюсь вам помочь.

12.01.2013 Эту страницу просмотрели за все время 14524 раз(а)


Twitter


Облако тегов