Предположим, что у нас есть две кнопки на странице — одна красная, вторая зеленая.
<a href="/download/" class="btn green">Скачать инструкцию</a> ... <a href="/download/" class="btn red">Присоединиться к программе</a>Настроим подсчет нажатий на эти кнопки.
Перво-наперво создадим два ТВ-параметра: redButton и greenButton. В эти ТВ-параметры мы и будем сохранять количество нажатий на соответствующие кнопки.
Теперь для кнопок на странице установим счетчик. Добавляем в конец страницы следующий код (используем JQuery, так что не забудьте его подключить):
<script type="text/javascript">
$(document).on('click', '.btn', function() {
$.ajax({
type: 'POST',
url: '[[*uri]]',
data: 'url='+$(this).attr('href')
+'&action=countButton&but='
+$(this).attr('data-btntype'),
success: function(msg){
msg = JSON.parse(msg);
window.location.href = msg.url;
}
});
return false;
});
</script>А кнопкам добавим новый атрибут, по которым скрипт будет понимать, что именно засчитывать:<a href="/download/" class="btn green" data-btntype="greenButton">Скачать инструкцию</a> ... <a href="/download/" class="btn red" data-btntype="redButton">Присоединиться к программе</a>
Теперь при каждом клике на ту или иную кнопку, сначала будет отправляться AJAX-запрос, в котором будут переданы параметры нажатой кнопки. Нам осталось написать сниппет, который будет обрабатывать эти параметры и сохранять количество нажатий. Используем совет Василия Наумкина по работе с AJAX в MODX Revolution — создаем сниппет AJAX и размещаем его в начале страницы:
<?php
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
$action = $_POST['action'];
if (empty($action)) {return;}
$res = '';
switch ($action) {
case 'countButton':
$resource = $modx->getObject('modResource', $modx->resource->id);
// Получаем предыдущее значение счетчика
$count = $resource->getTVValue($_POST['but']) + 1;
// Устанавливаем новое значение
$resource->setTVValue($_POST['but'],$count);
$resource->save();
// Очищаем кеш ресурса, чтобы изменения отобразились сразу
$resource->_contextKey = $resource->get('context_key');
$cache = $modx->cacheManager->getCacheProvider(
$modx->getOption('cache_resource_key', null, 'resource'));
$key = $resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
// Возвращаем URL, по которому нужно отправить пользователя
$res = $modx->toJSON(array('url' => $_POST['url']));
}
if (!empty($res)) {
die($res);
}Теперь каждый клик по кнопкам будет записан в соответствующий ТВ-параметр ресурса. Эту информацию можно вывести для админов прямо рядом с самой кнопкой:
<a href="/download/" class="btn green" data-btntype="greenButton">Скачать инструкцию [[!+modx.user.id:memberof=`Administrator`:then=`([[*greenButton]])`:else=``]] </a> ... <a href="/download/" class="btn red" data-btntype="redButton">Присоединиться к программе [[!+modx.user.id:memberof=`Administrator`:then=`([[*redButton]])`:else=``]] </a>
Таким же образом я считаю количество загрузок дистрибутива MODX в разделе Скачать MODX
Объектная
А реальное число можно посмотреть и в метрике:
Просто иногда хочется иметь какой-то счетчик, который можно показать посетителям.
Я третий день пытаюсь сделать счетчик нажатий.
Третий день мой мозг медленно плавится.
Помогите прошу дайте самый простой макет в файлах. Рабочий который не обноляется при обновлении страницы. Молю вас. Help! i need somebody Help!