Главная страница / DataLife Engine / Скрипты и другая информация / Счетчик кликов/переходов по ссылке

Счетчик кликов/переходов по ссылке

28 марта 2025, Пятница
20
0

Все релизы DLE я выкладываю папкой в облаке на mail.ru, но что то решил переделать обычный вид ссылки, которую я выводил в цитате, решил оформить в в виде всех остальных прикрепленных файлов через attachment. Погуглив я нашёл решение от Sander ещё от 2013 года, но в 2020 он обновил скрипт, для сохранения всех данных в БД. В общем всё работает в его коде отлично, но мне нужно было вынести сам счетчик за пределы самой ссылки, т.е. чтобы ссылка - ссылкой, а в другом месте - количество переходов. Но поскольку я не кодер, какие то небольшие правки могу сделать сам, но не всегда получается - я обратился к ИИ. В общем вот что получилось.

PHP код engine/mods/click_counter.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('DATALIFEENGINE', true);
define('ROOT_DIR', dirname(__DIR__));
define('ENGINE_DIR', ROOT_DIR . '/engine');

@include (ENGINE_DIR . '/data/config.php');
date_default_timezone_set($config['date_adjust']);
mb_internal_encoding($config['charset']);

require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';
include_once ROOT_DIR . '/language/Russian/website.lng';

$href = trim((string)$_GET['href']);
if ($href == '') die('Undefinded href');
$hash = md5($href);

$row = $db->super_query("SELECT id, clicks FROM click_counter WHERE hash = '$hash'");
if ($_GET['type'] == 'set') {
	if ($row['id']) {
		$row['clicks']++;
		$db->query("UPDATE click_counter SET clicks = clicks + 1 WHERE id = {$row['id']}");
	} else {
		$row['clicks'] = 1;
		$db->query("INSERT INTO click_counter (hash) VALUES ('$hash')");
	}
}
echo (int)$row['clicks'];

Или скачайте плагин:

Код JS, вставить перед </body>:

        < script >
        	// Mini Counter for DLE (click_counter.php)
        	document.addEventListener('DOMContentLoaded', () => {
        		const root = window.dle_root || '/';
        		document.querySelectorAll('.attach').forEach(block => {
        			const link = block.querySelector('.download-link'),
        				counter = block.querySelector('.click_counter1');
        			if (!link || !counter || !link.href || link.href === '#') return;
        			const updateCounter = async (type) => {
        				try {
        					const url = `${root}engine/mods/click_counter.php?type=${type}&href=${encodeURIComponent(link.href)}`,
        						response = await fetch(url),
        						count = await response.text();
        					counter.textContent = /^\d+$/.test(count) ? `${count}` : '(Ошибка)';
        				} catch (e) {
        					counter.textContent = '(Ошибка)';
        				}
        			};
        			updateCounter('get'); // Загружаем текущее значение
        			link.addEventListener('click', (e) => {
        				e.preventDefault();
        				updateCounter('set');
        				setTimeout(() => window.open(link.href, '_blank'), 200);
        			});
        		});
        	}); < /script>

В шаблоне используем так: на саму ссылку добавляем класс

class="download-link"

Счетчик переходов по ссылке выводится:

<span class='click_counter1' title='Количество кликов'>0</span>

И всё это должно быть обёрнуто в класс "attach", пример кода, как выводится у меня:

	<div class="attach clr clearfix ignore-select">
		<a href="[xfvalue_links]" class="download-link" target="_blank" rel="noopener noreferrer">
			<i class="fa fa-download"></i> Скачать {title}
		</a> 
		<span class="attach-info"> <i class="fa fa-download"></i> Скачиваний: <span class='click_counter1' title='Количество кликов'>0</span> / <span class="fa fa-eye"></span> Просмотров: {views}</span>
	</div>

Наглядный пример как это выглядит в итоге - в материале "DataLife Engine v.18.0 Final Release". Учитываются только уникальные нажатия по ссылке.

По материалам Sander

Комментарии:
{login}

Твой комментарий..

Модули для создания киносайта и не только на базе DataLife Engine, и многое другое...
Просто блог Евгения Попова, он же - byroot © 2015-2025 | Карта сайта