• SanDev.pro
  • Datalife Engine
  • Счетчик кликов на кнопку или количество скачиваний
Счетчик кликов на кнопку или количество скачиваний для DLE

Счетчик кликов на кнопку или количество скачиваний

Счетчик кликов на кнопку или количество скачиваний

Довольно таки часто мне встречаются вопросы о том, как сделать счетчик кликов на кнопку или же количество скачиваний.
Вот решил наконец реализовать данную задачу на благо людям :)
Не хочется мне писать отдельную инструкцию, упаковывать его в архив, поэтому придется вам поработать самостоятельно, ручками :)
В корне сайта создать папку с названием click_counter задать ей права на запись 777.
В ней создать PHP файл index.php с содержимым:
<?PHP
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
define ( 'ROOT_DIR', dirname ( __FILE__ ) );

if(!$_GET['href']) die('Undefinded href');
$href = md5($_GET['href']);
$stat = unserialize(file_get_contents(ROOT_DIR."/stats.txt"));
if(!$stat[$href]) $stat[$href] = 0;
if($_GET['type']=='set'){
	$stat[$href]++;
	file_put_contents(ROOT_DIR. "/stats.txt", serialize($stat), LOCK_EX);
}
echo $stat[$href];
?>

Специально для VIP группы реализовал вариант с учетом только уникальных кликов.

Что ж, поздравляю. Основная часть сделана :)
Теперь перейдем к шаблону и JS обработчику.
В качестве триггера, для желаемой кнопки добавляем имя класса click_count. Пример, есть:
<a href="[xfields_download]">скачать</a>

Надо сделать так:
<a href="[xfields_download]" class="click_count">скачать</a>


Осталось подключить js, для этого в принципе в любой подключенный к шаблону JS файл можно вставить такой код:
$(function(){
	function get_counter(a,b){
		$.get(dle_root+'click_counter/index.php',{type:b,href:a.attr('href')},function(d){
			a.find('.click_counter').html(d);
		});
	}
	var click_trigger = ".click_count";
	$(click_trigger).each(function(){
		$(this).append(" <span class='click_counter' title='Количество кликов'><img src='/click_counter/loading.gif' alt=''/></span>");
		get_counter($(this),'');
	});
	$('body').on("click",click_trigger,function(){
		get_counter($(this),'set');
	});
})

Отдельно стоит отметить - где и как будет отображаться само число счетчика. На примере того же html кода, что я приводил выше, мы получим:
<a href="[xfields_download]" class="click_count">скачать<span class='click_counter' title='Количество кликов'>0</span></a>

Вам останется только настроить стиль для самого числа счетчика.
Ну и еще, как видно в коде, пока скрипт не обработался в качестве заглушки я использую изображение /click_counter/loading.gif, вы можете либо залить свою картинку загрузки либо вообще убрать картинку из кода, на ваше усмотрение.
Вот собственно и все :)

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (11)
  1. foto
    Посетитель 24 ноября 2013 11:10 #
    Спасибо за хак!

    Как можно реализовать:
    если вместо текста-ссылки, ссылка-картинка в дополнительном поле, чтобы текст (кол-во скачиваний) был на одной строке и не съезжал в сторону.

    А так все работает, но смотрится не красиво.
    0
  2. foto
    Клиент 26 ноября 2013 16:11 #
    Специально для VIP группы реализовал вариант с учетом только уникальных кликов.
    так там же добавить ip в массив всего-то о_О
    Цитата: welip
    если вместо текста-ссылки, ссылка-картинка в дополнительном поле, чтобы текст (кол-во скачиваний) был на одной строке и не съезжал в сторону.

    Вам останется только настроить стиль для самого числа счетчика.
    0
  3. foto
    Посетитель 30 мая 2014 11:49 #
    Вот код кнопки где должно выводиться значение:
    <a href="#" class="click_count">ПРОДАНО: <span class='click_counter' title='Количество кликов'>0</span></a>
    Код кнопки на которую кликают:
    <a href="#menu-buy" class="click_count">ПОЛУЧИТЬ ПАКЕТ!<img src="img/btn-down-icon.png" alt="icon"> </a>
    Файл в корне сайта /stats.txt с правами 777 выложил
    Папку click_counter с файлом php и правами 777 сделал
    Скрипт изменил первую строчку
    вместо: $(function(){
    поставил: (function ($){
    Но ничего не работает.... что не так???, подскажите пожалуйста.
    0
  4. foto
    Посетитель 6 августа 2014 12:30 #
    он работает через раз, то есть я жму на кнопку а он может сохранить, а может и не сохранить

    особенно когда на странице есть две и более кнопок со счетчиком, жму на одну - сохранило, жму на вторую и опять на первую - ни у одной не сохранило
    0
  5. foto
    Посетитель 18 апреля 2015 12:32 #
    а как вывести количество нажатий на шорт стори или в кастом?
    0
  6. foto
    Посетитель 25 сентября 2015 21:00 #
    не работает :(
    0
  7. foto
    Посетитель 25 февраля 2016 09:59 #
    У меня тоже не сработал с первого раза, пока не изменил код на такой:

    function get_counter(a,b){
    		$.get("ПОЛНЫЙ-АДРЕС-К-ФАЙЛУ-index.php",{type:b,href:a.attr('
    href')},function(d){ a.find('.click_counter').html(d); }); }
    0
  8. foto
    VIP 28 августа 2016 21:14 #
    Подскажите, будет правильно работать если несколько кнопок на странице, в shortstory хочу поставить.
    0
    1. foto
      Администратор 28 августа 2016 22:45 #
      Да, будет.
      0
  9. foto
    Посетитель 7 октября 2016 15:57 #
    Такая проблема, у меня есть три кнопки, к каждой кнопке уже привязан свой класс. Как сделать так, чтобы скрипт считал нажатия на все три кнопки?
    0
  10. foto
    Посетитель 7 октября 2016 16:04 #
    Так, с этим разобрался. Вопрос теперь в другом - как вывести суммарное количество нажатий в одну строку?
    0
Добавить комментарий
  • Логин
  • E-mail
Повторите рисунок:
antibot
© Sander-Development. 2009-2018.
При копировании, ссылка на источник обязательна.