Домой / Уроки по Windows / Создаем счетчик загрузок файла с помощью PHP и MySQL. Устанавливаем счетчик скачиваний — обзор плагинов для Вордпресс Счетчик выбранных файлов

Создаем счетчик загрузок файла с помощью PHP и MySQL. Устанавливаем счетчик скачиваний — обзор плагинов для Вордпресс Счетчик выбранных файлов

Давно уже не было уроков про PHP и MySQL. Сегодня мы создадим простой, но эффективный счетчик скачиваний.

У каждого файла будет запись в ряду таблицы базы данных. В этой же таблице будет сохраняться количество скачиваний файла. PHP будет обновлять БД MySQL и перенаправлять пользователя на необходимый файл.

Для отслеживания количества скачиваний любого файла, Вам необходимо его положить в папку files и использовать специальный УРЛ для обращения к нему.

Шаг 1 - XHTML

Первым шаг - это создание разметки нашего скрипта. Она очень простая - у нас есть div file-manager, который содержит неупорядоченный список, в котором каждый элемент списка отвечает за файл.

Файлы, скачивания которых необходимо отследить, помещены в папку files в корневой папке скрипта. PHP потом проходит по всем файлам и добавляет каждый в качестве элемента списка (li) в неупорядоченный список.

demo.php


  • photoShoot-1.0.zip 0 download

Обратите внимание, что атрибут href ссылок передает название файла в качестве параметра для download.php. именно здесь и происходит отслеживание количества скачиваний.

Вам необязательно отображать все таким же образом - Вы просто можете давать ссылки на download.php на Ваших страницах и все скачивания не пройдут мимо.

Шаг 2 - CSS

После разметки давайте займемся оформлением. CSS правила ниже обращаются к div file-manager с помощью id (символ #), так как он встречается только 1 раз на странице, и к остальным элементам по названиям классов.

styles.css

#file-manager{ background-color:#EEE; border:1px solid #DDD; margin:50px auto; padding:10px; width:400px; }
ul.manager li{ background:url("img/bg_gradient.gif") repeat-x center bottom #F5F5F5; border:1px solid #DDD; border-top-color:#FFF; list-style:none; position:relative; } ul.manager li a{ display:block; padding:8px; } ul.manager li a:hover .download-label{ /* При наведении на мпимок, показать зеленый текст скачать: */ display:block; } span.download-label{ background-color:#64B126; border:1px solid #4E9416; color:white; display:none; font-size:10px; padding:2px 4px; position:absolute; right:8px; text-decoration:none; text-shadow:0 0 1px #315D0D; top:6px; /* CSS3 Закругленные углы */
-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; } span.download-count{ color:#999; font-size:10px; padding:3px 5px; position:absolute; text-decoration:none; }

Шаг 3 - PHP

Как я говорил раньше, PHP ищет файлы в папке files и выводит каждый файл в качестве элемента списка в неупорядоченном списке. Давайте взглянем на то, как это происходит

demo.php - верхняя часть

// Соо бщение об ошибках : error_reporting(E_ALL^E_NOTICE); // : require "connect.php"; $extension=""; $files_array = array(); /* Открываем папку и проходим по всем файлам : */ $dir_handle = @opendir($directory) or die("There is an error with your file directory!"); while ($file = readdir($dir_handle)) { /* Пропускаем системные файлы : */ if($file{0}==".") continue; /* end() выводит последний элемент массива сгенерированного функцией explode(): */ $extension = strtolower(end(explode(".",$file))); /* Пропускаем php файлы : */ if($extension == "php") continue; $files_array=$file; } /* Сортируем файлы в алфавитном порядке */ sort($files_array,SORT_STRING); $file_downloads=array(); $result = mysql_query("SELECT * FROM download_manager"); if(mysql_num_rows($result)) while($row=mysql_fetch_assoc($result)) { /* Ключ массива $file_downloads будет названием файла , и будет содержать кол-во скачиваний : */ $file_downloads[$row["filename"]]=$row["downloads"]; }

Обратите внимание как мы выбираем все ряды с таблицы download_manager с помощью mysql_query(), и позже добавляем их к массиву $file_downloads с названием файла в качестве ключа к количеству скачиваний. Таким образом, далее в коде, мы можем писать $file_downloads["archive.zip"] и выводить количество скачиваний.

Ниже Вы видите код, который генерирует элементы списка:

demo.php - средняя часть

Foreach($files_array as $key=>$val) { echo "

  • ".$val." ".(int)$file_downloads[$val]." download
  • "; }

    Все делается просто с помощью цикла foreach массива $files_array. После этого все выводится с помощью echo.

    Теперь давайте более детально взглянем на то, как происходит отслеживание файлов.

    download.php

    // Проверка ошибок : error_reporting(E_ALL^E_NOTICE); // Включаем файл подключения к ДБ : require("connect.php"); if(!$_GET["file"]) error("Missing parameter!"); if($_GET["file"]{0}==".") error("Wrong file!"); if(file_exists($directory."/".$_GET["file"])) { /* Есл и посетитель не поисковой бот , засчитываем скачивание : */ if(!is_bot()) mysql_query(" INSERT INTO download_manager SET filename="".mysql_real_escape_string($_GET["file"])."" ON DUPLICATE KEY UPDATE downloads=downloads+1"); header("Location: ".$directory."/".$_GET["file"]); exit; } else error("This file does not exist!"); /* функции помощники : */ function error($str) { die($str); } function is_bot() { /* Эта функция проверки на робота */ $botlist = array("Teoma", "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot", "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp", "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz", "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot", "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot", "Butterfly","Twitturls","Me.dium","Twiceler"); foreach($botlist as $bot) { if(strpos($_SERVER["HTTP_USER_AGENT"],$bot)!==false) return true; // Is a bot } return false; // Not a bot }

    Важно проверить является ли Ваш посетитель человек или роботом поисковиков. Роботы это конечно хорошо, но не позволим им искажать нашу статистику. Именно поэтому ряд в базе данных обновляется только после проверки is_bot().

    Шаг 4 - MySQL

    Как мы заметили в прошлом шаге, количество скачиваний сохраняется в качестве ряда в таблице download_manager. Для начала давайте объясним как работает этот запрос:

    download.php

    INSERT INTO download_manager SET filename="filename.doc" ON DUPLICATE KEY UPDATE downloads=downloads+1

    Он говорит MySQL вставить новый ряд в таблицу download_manager, и установить поле ряда filename на значение вызванного к скачиванию файла. Однако, поле filename обозначенного как уникальный индекс в таблице. Это означает, что каждый ряд можно вставлять только раз, иначе возникнет ошибка duplicate key error.

    Именно здесь и будет работать вторая часть запроса - ON DUPLICATE KEY UPDATE сообщит MySQL добавить единицу к колонке скачиваний, если файл уже существует в базе.

    Таким образом новые файлы будут автоматически добавляться в БД при первом скачивании.

    Шаг 5 - jQuery

    Для того, чтобы сделать отслеживание в виде реального времени, было бы хорошо обновлять счетчик возле названия файла после каждой загрузки.

    Мы это сделаем с помощью jQuery:

    script.js

    $(document).ready(function(){ /* Код выполняется после загрузки страницы */ $("ul.manager a").click(function(){ var countSpan = $(".download-count",this); countSpan.text(parseInt(countSpan.text())+1); }); });

    Мы просто присваиваем обработчик кликов к ссылкам, который ведут к файлам, и при каждом нажатии мы добавляем значение.

    Шаг 6 - htaccess

    Есть еще одна вещь, которую необходимо сделать. Download.php редиректит пользователя к запрашиваемому файлу, который был передан в качестве параметра. Однако, Вы могли заметить, что некоторые типы файлов браузеры пытаются открыть напрямую. Нам же необходимо инициировать их загрузку. Это можно сделать с помощью нескольких строк внутри файла.htacess, который находится в папке files.

    ForceType application/octet-stream

    Вот теперь наш счетчик полностью готов!

    Заключение

    Для того, чтобы демо заработало у Вас необходимо воссоздать таблицу download_manager в базе данных MySQL. Вы можете найти необходимый SQL код в исходниках.

    После этого, добавьте Ваши данные для соединения с БД в файле configuration.php.

    Очередным вопросом, которым я недавно заинтересовался при настройке своего незатейливого авторского проекта, встал вопрос о том, как же считать количество скачиваний того или иного файла, выложенного здесь. Логичнее всего было предположить, что для этого требуется очередной плагин, какой-нибудь download manager, или что попроще — download counter. Порыскав в интернете, оказалось, что как обычно, этих плагинов вагон и маленькая тележка. А вот обзоров их — опять-таки нет. Что выбрать — абсолютно не понятно, и как обычно, пришлось все тестировать на себе. А по результатам тестирования и получился данный обзорчик. Писался он весьма долго, при этом целью не было досканальное тестирование всех приведенных плагинов с полным рассмотрением их настроек, поэтому детальных скриншотов каждого — вы не найдете, но вот ключевые настройки будут. О некоторых вообще говорить не хотелось — настолько бестолковые, но коль уж посмотрел, то совсем ничего не написать — было жалко.

    Введение.

    Итак, стояла задача — подсчитать количество загрузок того или иного файла, установив счетчик скачиваний для вордпресс. При более внимательном рассмотрении она распадалась на несколько подзадач, а вернее — пожеланий к плагину, который бы ее выполнял. Вот их краткий список:

    • Необходимо, чтобы количество скачиваний отображалось где-нибудь в админке, с возможностью сортировки — сколько скачали за день, за неделю, месяц, год, всего
    • Желательно, чтобы можно было посмотреть графики/диаграммы скачивания файлов относительно друг друга
    • Желательно, чтобы можно было посмотреть графики/диаграммы скачивания файлов во времени
    • Желательно, чтобы велась статистика по тому, когда был последний раз скачан файл
    • Возможность выводить информацию рядом со ссылкой о том, сколько раз был скачен файл, а также его размер, и дату закачки для пользователя, который только собирается его скачать. Ну или не выводить — по желанию админа
    • Возможность вставки кода, за это отвечающего, отдельной кнопочкой в панели написания постов редактора TinyMCE (quicktag-ами пользоваться не люблю)
    • Возможность ограничить скорость скачивания (так, на всякий случай)
    • Навешивание на данный плагин функции аплоада (загрузки файлов на сервер) — наоборот, нафиг не сдалась. У меня и фтп неплохо работает. Но если не будет особо мешать — то пусть остается
    • Неплохо бы иметь возможность прилепить красивую кнопочку к ссылке на скачивание — хотя у меня достаточно прописать class=»button»

    ABAP

    Скачать файл!

    • Хорошо, если будет считать количество скачиваний не только со своего сайта, а просто по ссылке
    • Возможность запретить прямое скачивание файла, не показывая, где же он лежит на сервере.

    Такой вот небольшой списочек.

    Обзор

    После того, как мы определились с ТЗ, приступим к рассмотрению того, что непосредственно нам предлагается.

    1. Плагин Download Counter 1.2, скачанный вот .

    Изначально страница плагина находилась , но автор уже более 4 лет его не поддерживает. Создаем в директории плагинов для него еще одну папку у меня — download-counter, забрасываем туда оба файла. В результате — где бы вы думали? — в записях появляются для него настройки. Очень оригинально, но ладно.

    Заходим внутрь, прописываем путь к файлу download-manager.php (я очень не люблю всякую ерунду прямо в корень бросать). И смотрим, что у нас получилось. Загружаем файл, проверяем, скачивается ли в ручном режиме, если прямую ссылку в браузере ввести, вводим путь в плагине, чтобы создать счетчик. В теории должен создаться ID, который потом необходимо будет везде вставлять. А не получилось ничего — выдает ошибку «Ошибка — Невозможно сохранить запись». Ну ок, уговорили, перебрасываем в корень download-manager.php — опять ничего, таже ошибка. Ну и черт с тобою, золотая рыбка, не хватало, чтобы я еще разбирался в плагинах, которые автору-то нафиг не сдались. Тем более функциональности — практически ноль.

    2. Плагин Download Counter Advanced 1.1, скачанный же.

    Скажу сразу, он у меня тоже толком не заработал, поэтому читать о его установке и настройке можно лишь из академического интереса. По сути, это тот же плагин, только слегка видоизмененный. Слава богу, хоть инструкция не переведена — можно нормально прочитать, а не пытаться понять, что же имел ввиду переводчик. Кстати, в админке — представляется совсем другим плагином, предлагая обновиться (да фиг ему). Аналогично предыдущему плагину, его страница находилась , и точно также автор уже более 4 лет его не поддерживает. По аналогии создаем в директории плагинов для него еще одну папку, у меня — download-counter, забрасываем туда все файлы. Настройки выглядят, конечно, побогаче, хотя скорость скачивания ограничивается сразу для всех файлов, а не устанавливается для каждого своя. Где лежит файл download-manager..php (не забыть в конце название файла, а вот где все загрузки лежат — угадал с первого раза, чем поверг меня в жуткое изумление. Как потом оказалось, это я угадал с названием директории, в которую надо закладывать закачки, здесь моя логика отработала на 100% одинаково с автором плагина.

    Добавляем имена папок, которые у нас есть на сервере в каталоге downloads (в настройках «рубрики и директории»), чтобы проще было выбирать путь к файлам. Если их не добавить — то придется загружать все в корень downloads. Сохраняем, можно добавлять загрузки. Вот что у нас примерно получается.

    Теперь пробуем вставить в пост. Добавляем ссылку, в ней меняем нашу ссылку на код, который выдается прямо в настройках плагина. И тут… А фиг вам! Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация. Ну вот, а я только собирался рассказать, как добавлять счетчик прямо в пост, что если к ссылке внутри , чтобы получилось

    ABAP

    & lt ; ahref= "http://chewriter..jpg" />

    то можно выводить кнопку скачивания — криво, правда. Вот вам и плагин, зря время потратил. Статистику он особо не ведет, потому где глюк — разбираться не будем.

    Это как раз тот плагин, на который предлагался обновится вышеуказанный Download Counter Advanced. Ну предлагает — и ладно, скачаем, посмотрим. Плагин тоже не обновлялся уже более 3 лет, и некоторые пользователи даже сами вносили исправления в его код. Устанавливается вполне успешно, аскетизм настроек оптимизма не вселяет. Кстати, тоже молодцы, догадались, куда настройки разместить — не хуже, чем в предыдущем случае. Добавляем счетчики на странице настройки, все вроде высвечивается, как и должно.

    Смотрим, что у нас с добавлением в пост. Ага, никаких кнопок нет. А, ну конечно, я забыл тут же все интуитивно понятно. Лезем в инструкцию. Необходимо городить сложную конструкцию, состоящую из шорткодов типа , скачан , и при этом (вероятно из-за чпу) толком он ничего и не считает.

    Поэтому дальнейшее его рассмотрение, вместе с идущим к нему плагином Download Counter Chart , выводящим информацию в графическом виде, проводить не будем.

    Написан нашим соотечественником, но к сожалению все, что он умеет — это выводить число скачавших файл рядом с его названием — ни статистики, ни каких-либо других плюшек не предусмотрено. Впрочем, если вы любитель минимализма — это то, что надо. Только не забудьте, кнопочек никаких нет, шорткод типа


    счетчик скачиваний для WordPress своими руками

    придется вводить ручками. Весьма хорошо, что автор подробно все расписал, не пришлось тестировать на себе.

    Ну если уж речь зашла о плагинах, написанных нашими людьми, то нельзя не упомянуть еще один. Его огромный плюс состоит в том, что он позволяет считать не только количество скачиваний файлов, но также и просто клики на ссылки — не важно, ведут ли они к какому-либо файлу, или просто на другую страницу. Или на файл на чужой странице 🙂 Это он тоже посчитает, ну вернее — теоретически должен посчитать. Со статистикой у него тоже все не ахти как, кнопочек на панели редактирования нет, ограничений по закачкам — тоже. Но посмотреть все же любопытно. Поэтому скачиваем, и устанавливаем. В принципе, достаточно подробное описание есть на сайте автора, поэтому особо распространятся не буду. Необходимо постоянно держать в голове, что если требуется установить счетчик на файл или на ссылку, то следует использовать либо шорткод типа, либо в ссылке вставить класс class=»count». Это, конечно, напрягает, с кнопочкой было бы гораздо удобнее. Но самое обидное, что после всех телодвижений я так и не смог добиться его адекватной работы — в случае, если использовался шорткод, то не выводилась сама ссылка на закачку, а в случае, если использовался класс — не появлялась в админке статистика по ссылкам. Скриншоты можно посмотреть у автора — если сама идея вам понравилась — пробуйте, может у вас получится.

    Действительно, очень простой. Не требуется никаких шорткодов, и т.п. Однако, этот плагин предоставляет статистику только для автора, для посетителей же, рядом с ссылкой на файл, она не выводится.

    Впрочем, необходимо отметить, что ведется подробная статистика, кто и когда скачал какой файл. Впрочем, пользоваться ей не сильно удобно.

    Среди настроек присутствуют следующие:

    • Можно указать директорию, из которой разрешено скачивать файлы
    • Можно указать типы файлов, которые разрешено скачивать
    • Запретить считать скачивание файла автором
    • Выставить в секундах интервал, в течение которого повторные нажатия на ссылку с одного и того же IP будут посчитаны только один раз
    • Ограничить число файлов, которые можно скачать с одного IP в день
    • Использовать какую-либо промежуточную страницу с информацией о том, что скачивание сейчас начнется

    Однако, все это работает, только если у вас либо (как бы это попроще-то сказать…) разрешено редактирование файла.htaccess, либо если вы указываете ссылку в прямом виде, вставляя в

    Впрочем, поскольку возможность выводить статистику для пользователей у него отсутствовала, а запоминать вид ссылки не хотелось, на этом я его рассмотрение и прекратил, решив вернуться, только если остальные плагины в очереди не смогут решить поставленной задачи.

    В смысле отображения информации, этот плагин весьма схож с рассмотренным в предыдущем пункте. Отличается тем, что позволяет посмотреть статистику отдельно понедельно, помесячно, за любой период и просто топ-10. По своим возможностям — он гораздо более убог, нет ни статистики по последнему скачиванию, ни по конкретному файлу, не говоря уже о возможности ввести ограничения на скачивание файлов. Внятная документация вообще отсутствует. У меня возникло впечатление, что это просто недоразумение какое-то, а не плагин. Скриншоты даже и приводить не хочется, но чтобы быть объективным — все-таки приведу, авторские.

    Ну вот мы и добрались до чего-то более-менее достойного. Почти пол-миллиона скачиваний — это о чем-то говорит. Официальная страница плагина находится . Для того, чтобы вставить файл в запись, необходимо воспользоваться стрелочкой над визуальным редактором (в нем самом иконки не появляется)

    И в появившемся окне выбрать необходимый файл (это пример, если он уже закачан по фтп)

    Затем, нажать на кнопку «Save new download»

    и, перейдя на следующий экран, выбрать формат скачивания, и нажать на Insert into post. Не исключено, что ничего не произойдет. Плагин слегка проглючивает с последними версиями вордпресс. Поэтому надо дополнительно нажать на ссылку View Downloads

    И уже тогда, выбрав сначала формат скачивания , нажать на ссылку Insert напротив именно того файла, который надо вставить.

    После чего в записи возникнет соответствующий шорткод типа

    ABAP

    [ downloadid = "7592" format="1"]

    Плагин требует тонкой ручной настройки, но никаких WYSIWYG-ов не предусмотрено. Хорошо, что нужно только один раз настраивать. Подробная документация находится на автора.

    Вот пример настройки:

    ABAP

    {title}

    & lt ; ahref= "{url}" title="Скачан {hits,"ни разу","1 раз","% раза"}">{title}

    Необходимо отметить, что склонения не поддерживаются, т.е. если файл скачали 21 раз, а у вас в шаблоне стоит «раза» — то звучать это будет несколько не по-русски.

    А вот вариант с кнопкой:

    ABAP

    - {description}, {size}, Загружен {date,"Y-m-d"}, Скачан {hits} раза

    & lt ; ahref= "{url}" title="Скачан {hits,"ни разу","1 раз","% раза"}"> - {description}, {size}, Загружен {date,"Y-m-d"}, Скачан {hits} раза

    Выглядит так:

    Ну а у меня после некоторой доработки стал выглядеть так (пока еще без кнопочек):

    Код строки:

    ABAP

    {filetype_icon} {title} (Размер файла: {size}, Загружен: {date,"d.m.Y"}, Скачан {hits} раза)
    {description}

    Список возможностей достаточно широк:

    • Можно закачивать файлы как с его помощью (при нажатии на стрелочку), так и указывать место, где они лежат, если были закачаны ранее по фтп, можно просто указать URL
    • Скрывает истинное местонахождение файла, можно подставить любую необходимую комбинацию URL
    • Можно использовать кнопку для скачивания, в том числе и свою
    • Не считаются скачивания админом, и всех ненужных IP, включенных в лист исключения счетчика
    • Считать ли повторные скачивания в течение определенного времени с одного и того же IP
    • Можно задать несколько форматов — с картинкой, со счетчиком, без счетчика, и т.д., и использовать каждый из них в соответствующей ситуации
    • Есть выгрузка лога скачиваний в виде csv файла

    В случае, если выкладывается какой-либо mp3 или видео файл — надо для них указать, force download, или нет. Если force — то по клику на него, он будет скачиваться, если галочку не ставить — воспроизводиться, тогда сохранение — правой кнопкой мыши. Хочу отметить то, что файлы, закаченные с его помощью кладутся не туда, где создана ваша спец-директория для файлов, а в создаваемую им wp-content/uploads/downloads/ — необходимо помнить об этом, как и о том, что при удалении их из статистики — удаляются и физически файлы с сервера. С теми, что закачаны по фтп — все ОК. Плюс, если вставить ссылку в разных постах на один и тот же файл — то я не разбирался, будет ли он их суммировать. К сожалению, не поддерживает никаких ограничений по скачиванию, кроме того, что можно запретить скачивание всем, кроме зарегистрированных пользователей. Когда хочется отображать в нижней строке браузера название файла, или необходимо поменять на его ID — необходимо не забыть зайти в параметры->постоянные ссылки, и сохранить там конфигурацию, чтобы все правильно прописалось в.htaccess — без этого файлы скачиваться не будут !

    Статистика выводится в сразу в трех местах — в консоли, в информации о файлах, и в логах скачивания. Это создает определенные неудобства, например, когда необходимо посмотреть, когда какой-либо файл был скачен последний раз, но можно выгружать статистику в виде csv файла, и потом разгребать уже в экселе. С учетом того, что эксель имеет дьявольские возможности по построению необходимых таблиц и диаграмм — то может, это и неплохо. Впрочем, думаю скриншоты скажут больше:

    Ну и скриншот непосредственно лога:

    При этом огромный плюс — в консоли появляется виджет со статистикой вот такого вот вида:

    В целом — можно сказать, что после небольшой настройки, плагин свое дело делает просто отлично.

    Этот плагин был написан тем же автором, что и плагин WP-Polls, который я, к примеру, использую на этом сайте. Хотя и пользуется, по сравнению с ним, на порядок меньшей популярностью. Но давайте смотреть, заслуженно ли. Всю документацию можно найти на сайте автора. По своей сути плагин абсолютно идентичен предыдущему — точно также прописывается темплэйт, отсутствуют ограничения на скачку, кроме зарегистрированных-незарегистрированных пользователей,точно также требуется использовать шорткод вида

    ABAP

    [ downloadid = "7592"]

    ну и по остальным пунктам:

    • Можно закачивать файлы как с его помощью (до двух Мб, ну или сколько там у вас указано в php.ini), так и указывать место, где они лежат, если были закачаны ранее по фтп, можно просто указать URL
    • Скрывает истинное местонахождение файла, но подставить любую необходимую комбинацию URL не представляется возможным, есть только несколько фиксированных вариантов, основной из которых у меня не заработал
    • Можно сконфигурировать таким образом, чтобы для посетителей выводилась информация о том, какой размер файла, сколько раз был скачан, когда загружен
    • Можно выводить иконку для соответствющих типов файлов
    • Можно сбрасывать счетчик, или задавать необходимое значение

    Однако, есть и некоторые отличия. Во-первых, отсутствует кнопка в визуальном редакторе, с помощью которой можно вставить шорткод. Вернее, кнопка-то есть, но для того, чтобы ей воспользоваться, необходимо сначала в настройках плагина добавить счетчик для файла, а потом уже этой кнопкой будет добавлен ID счетчика непосредственно в пост. Во-вторых, темплэйт только один, и выводить для разных файлов разную информацию не получится. Из плюсов статистики — показывает, когда последний раз был скачан файл, в остальном — только минусы — ни выгрузки в csv файл, ни просмотра того, кто скачал (отсутствуют IP), ни распределения по датам.

    Но вот иконки — посимпатичнее (я их потом приделал к предыдущему плагину). Результат его работы выглядит следующим образом:

    Также при удалении записи из базы данных, спрашивает — а необходимо ли еще и сам файл удалить, или оставить. Но по совокупности свойств он мне понравился меньше, чем предыдущий — хотя бы тем, что вставлять файл надо отдельно вне поста, однако и особых минусов не имеет — выбор между ними — дело вкуса, у первого — побольше опций, более подробная статистика, у второго — немного более удобная (хотя и более бедная) статистика, и меньше возможностей.

    В дело пошла тяжелая артиллерия. Плагин большей частью руссифицирован, и представляет из себя именно менеджер закачек, а не счетчик. Имеется возможность ограничить скорость скачивания, и количество загрузок на человека в день.

    Но я бы сказал, что некоторые возможности данного плагина излишни, а нужных по статистике — не хватает. Очень много настроек, виджеты закачки, сложная система синхронизации, система вывода mp3 тегов, отображение flv файлов, организация мини-файлохранилища, вывод всех указанных на странице файлов в начале или конце поста, и т.д., и т.п.

    Скриншоты всех настроек даже и приводить не хочется.

    Однако при всем этом — чтобы красиво вывел шаблон в записи — пришлось редактировать в нем файл стиля, уменьшая ширину. Плюс для того, чтобы вывел дефолтный темплейт — приходится после вставления шорткода кнопочкой

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

    Считает — через пень-колоду (ну или больше одного скачивания с IP не считает, не знаю уж). Статистика убога чуть менее, чем полностью, весьма схожа с только что рассматривающимся выше плагином.

    В общем, у меня оставил впечатление — здоровый, да бестолковый. Годится под какое-нибудь файл-хранилище, да и то — если в совокупности с каким-либо другим плагином. Посмотрел я на него — да и снес.

    Откровенно говоря, когда я прочитал его описание, то подумал — что вот оно, то что мне надо!

    Счетчик, защита паролем, шорткод вставляемый кнопкой, редактируемая кнопка, и т.д.

    А выглядит вот так (привел сразу два используемых три шаблона):

    Однако, для того, чтобы добавить файл — во-первых необходимо добавить для него счетчик в плагинах. Во-вторых — статистика вообще практически отсутствует.

    В третьих — нельзя задать вывод отображения размера файла для пользователя. В четвертых — нет ограничения на скорость скачивания, есть только защита файла паролем. Редактировать шаблоны — нельзя. И большая надпись с предложением купить премиум-версию за 45 баксов. Ну, в общем, вы поняли. Всё вкусное — за бабки. Деактивировал, да снес. А красивые рамочки, кнопочки, и т.д. — я и сам в стилях пропишу, когда захочется.

    Резюме

    Установить стандартным образом (путем копирования в директорию wp-content/plugins/download-monitor/ , дать обновиться, заменить все иконки на иконки из архива в директории wp-content/plugins/download-monitor/img/filetype_icons/ и активировать.

    В дальнейшем, если руки дойдут, я думаю оформить ссылки в симпатичные рамочки с помощью css3, о чем скорее всего тоже напишу. Оставайтесь с нами 🙂

    Upd. Сейчас автор переработал плагин WordPress Download Monitor, и создал абсолютно отличающуюся от исходной версию. Я проверил ее, но мне она понравилась гораздо меньше по причине того, что темплэйт формы того, как будет выглядеть ссылка на скачивание, теперь так просто не редактируется. Автор решил, что достаточно будет готовых предустановленных видов. К примеру, если в меню downloads, дальше — settings выбираете нужный вид из шести предустановленных, нажимаете сохранить

    То при выборе второго варианта получаете что-то типа такого:

    Т.е. на новой версии воспользоваться приведенной мною в описании строкой не выйдет, а необходимо будет писать специальный php файл, который этот темплейт вывода описывал бы. Но самое печальное даже не это — а то, что этот php файл, если его положить в директорию с плагином — будет затираться каждый раз при обновлении плагина. А если положить его в каталог с темой — то при смене темы (хотя это, конечно, случается гораздо реже). Но в любом случае — написание его — задача довольно трудоемкая, и пока у меня этим желания заниматься нет. Так что единственный плюс обновленного плагина

    Решил посмотреть сколько раз скачивают один из моих скриптов с сайта. Для этого решил написать счётчик скачиваний файлов для сайта. В интернете много реализаций данной задачи, но тем неменее ознакомтесь с моим решением.

    Логика работы счётчика скачивания довольна проста. Для его реализации будем использовать мой любимый ajax. Вешаем на кнопку при возникновении событи clik обращение через ajax к php файлу счётчика. В php происходит обработка ajax запроса и запись в текстовый файл цифры суммарного количества скачек. После удачной записи возвращается ответ с суммарным счётчиком скачиваний и происходит редирект пользователя на ссылку для скачки файла (файл скачивается). Вот такая вот простая логика Теперь начнём её реализовать. Заранее создадим скачиваемый файл test.zip . Сделаем код кнопки и покажем счётчик скачек.

    Скачать файл Количество скачек:

    Мы создали кнопку с id="btnSend" , выводить счётчик будем в span с id="countView" , в атрибуте data-download будем хранить ссылку на скачиваемый файл

    Теперь давайте прикрутим к кнопке обработчик клика. Здесь уже будем использовать js и jquery. Про то как реализовать clik силами jquery можно почитать . Но перед установкой обработчика клика мы будем ajax обращаться к файлу count.php, в котором будет заключена вся работа счётчика. Подробнее о передаче данных ajax можно почитать . Это нужно что бы вывести из файла куда пишет счётчик, количество уже сделанных закачек и вывести их в span с id="countView"

    /*получаем текущее кол-во закачек*/ $(document).ready(function(){ //запрещаем кещировать ajax запрос //иначе счётчик будет брехать $.ajaxSetup({cache: false}); var html; $.ajax({ //как будем передавать данные type: "GET", //куда передаём url: "count.php", //какие данные передаём data: {flag: 2}, //событие после получения ответа от count.php success: function(data){ html=data; //выводим текущее кол-во закачек $("#countView").html(html); } }); /*вешаем событие на кнопку скачать файл*/ var clickevent=false;//флаг проверки нажатия //обработчик клика $("#btnSend").click(function(){ if(!clickevent){ $.ajax({ //как будем передавать данные type: "GET", //куда передаём url: "count.php", //какие данные передаём data: {flag: 1}, //событие перед отправкой ajax beforeSend: function(){ //если кнопка была нажата то труе clickevent=true; }, //событие после получения ответа, //получаем данные в data success: function(data){ //после выполнения действий разрешаем опять //обрабатывать клик по кнопке clickevent=false; html=data; //выводим новый счётчик $("#countView").html(html); //получаем ссылку из data-download //редиректит по ссылке скачки, качаем файл window.location.href = $("#btnSend").data("download"); } }); } return false;//запрещаем обрабатывать событие при клике }); });

    Для предотвращения повторного ошибочного нажатия кнопки отправки я ввёл в скрипт флаг clickevent . Пока не вернётся ответ от count.php с обновившимися данными счётчика клик по кнопке будет запрещён. Я так думаю работа кода после клика по кнопке более менее ясна. После клика по кнопке скачать в файл count.php передаются данные, там они обрабатываются и возвращается обновлённые данные счётчика, происходит редирект на ссылку скачивания и соответственно сама закачка файла.

    Давайте теперь разберём сердце нашего скрипта, а именно файл count.php.

    Function clearInt ($date){ //приводим date к числу, не отрицательному return abs((int)$date); } if($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest") { //проверяем какой флаг пришёл if(clearInt($_GET["flag"]==1)) { //открываем файл для чтения $f=fopen("mycount.txt","a+"); //закрывает доступ к файлу из других программ flock($f,LOCK_EX); //получаем из файла значение счётчика $count=fread($f,100); //плюсуем счётчик @$count++; //затираем файл ftruncate($f,0); //пищем новое покакзание счётчика fwrite($f,$count); //закрываем файл fclose($f); //возвращаем значение echo $count; } if(clearInt($_GET["flag"]==2)) { $c=fopen("mycount.txt","a+"); flock($c,LOCK_EX); $festc=fread($c,100); fclose($c); //возвращаем значение echo $festc; } }

    Здесь я то же думаю всё просто. Если приходит флаг 1 то делаем перезапись счётчика. Если приходит флаг 2 то просто возвращаются данные о количестве закачек. Всё остальное я думаю понятно из комментариев в коде.

    Cчетчик скачиваний Joomla

    Решил прикрутить подобный счётчик на один из моих проектов на joomla. По идее нужно конечно написать либо отдельный модуль, либо интегрировать код в контроллер компонента com content, что бы данные счётчика писались не в файл, а в бд и для каждой статьи отдельно. Но на на такую разработку нет времени и я решил вопрос более просто. Счётчик мне был нужен для одной страницы. Я взял файл count.php и перенёс его в шаблон джумла, который на данный момент подключён (в корне сайта templates/ваш_шаблон). Не забываем вставить в самый верх count.php код defined("_JEXEC") or die; (это для джумла). Кнопку закачки вставляем в создаваемую нами страницу, а js код можно так же встроить в страницу, либо подключить отдельным файлом. У меня например отдельным файлом (он находится в папке js шаблона). В самом шаблоне в хедере происходит подключение через код