Как сделать счетчик на ссылку

Как сделать счетчик на ссылку
Как сделать счетчик на ссылку
Как сделать счетчик на ссылку

На ряде сайтов можно увидеть ссылку, а рядом надпись "То-то скачено столько-то раз". Или свою кнопку "Нравится" со счётчиком. Или пару "Нравится/Не нравится". Реализуются они подобным образом:

Число нажатий хранится в базе данных (или отдельном файле). При загрузке браузером HTML-страницы оно подставляется в указанное в шаблоне место. Когда посетитель нажимает на кнопку на HTML-странице, JavaScript передаёт в PHP с какой страницы произошёл клик по кнопке. PHP меняет значение, записанное в базе данных. И передаёт число, увеличенное на единицу, в JavaScript. JavaScript меняет число на счётчике без перезагрузки HTML-страницы.

Ниже представлен упрощённый вариант (без подключения БД).

условия кнопка ссылка не засчитывать повторное нажатие если после нажатия текущая страница закрывается (например, при переходе по ссылке) Файл 1.html <button type="button" id="like">Нравится: <a href="#" id="like">Файл [скачено <output id="statlike">0</output></button> раз]</a> <script> document.getElementById('like').addEventListener('click', function(e){ if (window.XMLHttpRequest && localStorage.getItem('like') != location.pathname) { e.preventDefault(); var http = new XMLHttpRequest(), href = this.href; http.open('POST', 'stat.php'); http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); http.addEventListener('readystatechange', function() { if (this.readyState == 4 && this.status == 200) { document.getElementById('statlike').innerHTML = this.responseText; } }); http.timeout = 10000; http.addEventListener('loadend', function() { location = href }); http.send('url=' + location.pathname); localStorage.setItem('like', location.pathname); } }); </script> Файл stat.php <?php if (isset ($_POST['url'])) { $fn = $_SERVER['DOCUMENT_ROOT'] . $_POST['url']; if (file_exists($fn)) { $f = fopen($fn, "r+"); if (flock($f, LOCK_EX)) { $fr = fread($f, filesize($fn)); $pattern = '/(<output id="statlike">)(\d+)(<\/output>)/i'; $line_ok = preg_match($pattern, $fr, $matches); if($line_ok == 1) { $m = $matches[2] + 1; $fr = preg_replace($pattern, ''.$m.'', $fr, 1); rewind($f); ftruncate($f, 0); fwrite($f, $fr); } echo $m; flock($f, LOCK_UN); } fclose($f); } } ?>

Внимание: пример демонстрирует работу JS. PHP всё же должен менять базу данных, так как при использовании предложенного варианта могут возникнуть сложности при одновременном доступе к файлу (см. про flock).

Как сделать счетчик на ссылку Как сделать счетчик на ссылку Как сделать счетчик на ссылку Как сделать счетчик на ссылку Как сделать счетчик на ссылку Как сделать счетчик на ссылку

Лучшие статьи:



Схема с инвертирующим входом

Каталог женский прически

Как сделать базу для чека

Как сделать хук как в доте 2

Заколки своими руками с фетром