Кількість переглядів сторінок для 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=`3128` &tvid=`id TV-параметра countViews`!]
І, нарешті, в тому місці, де Ви хочете бачити кількість переглядів, вставляємо такий код:
- в документі MODX - в шаблоні Ditto
Зверніть увагу: перегляд сторінки авторизованим користувачем в системі MODX не враховується.