Количество просмотров страницы

Количество просмотров страницы
Дата: 13 Декабря 2013, в 17:31
Рубрика: MODx Evolution
Просмотры: 1566

В данной статье рассмотрен сниппет счетчик просмотров страницы. Каждый посетитель сайта сможет увидеть количество показов страницы, а Вы сможете отследить посещаемость того или иного ресурса.

Значение заходов на страницу поможет выявить ее рейтинг, а также это потенциальный показатель для сортировки статей "самые популярные".

Итак разбираем

1. Создайте новый TV-параметр

  • Имя параметра: countViews
  • Заголовок: Количество просмотров
  • Тип ввода: Text

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

2. Создайте новый чанк

  • Название чанка: countViews
  • Описание: Количество просмотров

Код чанка:

[[CountViews? &type=`output` &id=`[+id+]` &tvid=`4`]]

Данный чанк выводит показатель счетчика посещений. В моем случае счетчик используется в шаблонах вывода статей через ditto, поэтому в вызове сниппета Вы видите плейсхолдер, а сам сниппет CountViews кешированный.

3. Создайте новый сниппет

  • Название сниппета: CountViews
  • Описание: Счетчик просмотров

Код сниппета:

<?php
$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;
}
?>

4. В том месте, где нужно вывести показатель посещаемости страницы вызовите чанк

{{countViews}}

На самой странице, счет посещений которой нужно вести, вызовите сниппет:

[!CountViews? &type=`counter` &id=`[*id*]` &tvid=`4` &lock`1`!]

Теперь параметры сниппета CountViews:

  • type - Тип вызова сниппета, output - вывести счет посещений, counter - пересчитать счет посещений (прибавляет 1 после вызова с данным значением параметра type)
  • id - ID страницы, счет которой нужно вывести или пересчитать
  • tvid - ID TV-параметра countViews
  • lock - Блокировать повторный просмотр, 0 - не блокировать (можно накручивать просмотры обновлением страницы), 1 - блокировать, (по-умолчанию 0).

ВНИМАНИЕ: просмотр страницы авторизованным менеджером не учитывается.