Не будет лишним знать общее количество просмотров страниц блога пользователями. Поэтому мной было решено установить такой счетчик на свой сайт.
Можно написать собственный скрипт, но так как для студии KANBY используется CMS MODx, то я воспользуюсь готовым решением. А готовым решением является плагин ViewCountPageHit, который вы можете найти на официальном сайте MODx.
Для начал нам необходимо установить модуль PageHitCounter (прямая ссылка на скачивание здесь). Полный модуль состоит из самого модуля и плагина. Вначале установим плагин.
Заходим в панели администрирования MODx в Элементы -> Управление элементами. Далее кликаем Создать плагин. Вводим следующее:
// 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.
Жмем Сохранить.
Заходим в панели администрирования MODx в Модули -> Управление модулями. Далее кликаем Новый модуль. Вводим следующее:
// 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";
Жмем Сохранить.
Теперь необходимо запустить модуль (см. иллюстрацию)
После этого модуль попросит вас создать новую таблицу для учета количества просмотров страниц. Мы конечно же соглашаемся и жмем Create table.
После этого у вас должно появиться сообщение о том, что записей не найдено. Это говорит о том, что ни одного посетителя не зафиксированно на страницах сайта.
Стоит отметить: посещения администратораа сайта не регистрируются. Поэтому не старайтесь обновлять страницы когда вы авторизованны, вас в посетители не добавят.
Модуль Page Hit Counter будет хранить информацию о количествах просмотров всех страниц сайта. Данную информацию вы можете увидеть в окне модуля в разделе Модули.
На этом подготовка закончена, и мы можем перейти к добавлению счетчика на страницы сайта.
Необходимо создать новый плагин. Для этого выбираем Элементы -> Управление элементами. В открывшемся окне выбираем в области вкладок Сниппеты и кликаем Новый сниппет.
Заполняем поля:
И вставляем следующий код:
<?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=` раз(а)`
После чего у вас должна появиться такая строчка:
На этом установка счетчика просмотров на страницы нашего сайта закончена. Если у вас возникли проблемы или вопросы, то расскажите о них в комментариях и постараюсь вам помочь.