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

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

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

Шаг 1 – XHTML

Для начала нам понадобится XHTML-разметка. Она очень простая – это общий блок file-manager , содержащий маркированный список, в котором ссылка на каждый файл будет находится внутри элемента li .

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

demo.php

  • photoShoot-1.0.zip 0 download

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

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

Шаг 2 – CSS

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

style.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{ /* When a list is hovered over, show the download green text inside it: */ 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 Rounded Corners */ -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; }

Обратите внимание, что здесь подпись “download” скрыта по умолчанию, с помощью свойства display: none . Она отображается через display:block , только при наведении мыши на ссылку, без использования JavaScript. Немного CSS3 используется для закругления уголков у подписи.

Шаг 3 – PHP

Как мы уже говорили выше, PHP проходит циклом по всей папке files , и выводит каждый файл в виде элемента li маркированного списка. Давайте рассмотрим подробнее, как это происходит.

demo.php — Верхняя часть

// Error reporting: error_reporting(E_ALL^E_NOTICE); // Including the DB connection file: require "connect.php"; $extension=""; $files_array = array(); /* Opening the thumbnail directory and looping through all the thumbs: */ $dir_handle = @opendir($directory) or die("There is an error with your file directory!"); while ($file = readdir($dir_handle)) { /* Skipping the system files: */ if($file{0}==".") continue; /* end() returns the last element of the array generated by the explode() function: */ $extension = strtolower(end(explode(".",$file))); /* Skipping the php files: */ if($extension == "php") continue; $files_array=$file; } /* Sorting the files alphabetically */ 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)) { /* The key of the $file_downloads array will be the name of the file, and will contain the number of downloads: */ $file_downloads[$row["filename"]]=$row["downloads"]; }

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

Ниже представлен код, который используется для генерации элементов li маркированного списка.

demo.php – Центральная часть

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

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

    Все очень просто – проходим циклом foreach по массиву $files_array , и выводим на страницу нужные данные в соответствующей разметке.

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

    download.php

    // Error reporting: error_reporting(E_ALL^E_NOTICE); // Including the connection file: require("connect.php"); if(!$_GET["file"]) error("Missing parameter!"); if($_GET["file"]{0}==".") error("Wrong file!"); if(file_exists($directory."/".$_GET["file"])) { /* If the visitor is not a search engine, count the downoad: */ 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!"); /* Helper functions: */ function error($str) { die($str); } function is_bot() { /* This function will check whether the visitor is a search engine robot */ $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, базы данных MySQL. Сначала, позвольте объяснить как работает эта часть запроса:

    download.php

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

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

    Именно в этом случае, вступает в силу вторая часть запроса — ON DUPLICATE KEY UPDATE , которая увеличивает значение поля downloads на единицу, если этот файл уже записан в базе данных.

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

    Шаг 5 – jQuery

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

    Это можно исправить небольшим фрагментом кода:

    script.js

    $(document).ready(function(){ /* This code is executed after the DOM has been completely loaded */ $("ul.manager a").click(function(){ var countSpan = $(".download-count",this); countSpan.text(parseInt(countSpan.text())+1); }); });

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

    Шаг 6 – htaccess

    Нам осталось сделать еще одну вещь, прежде чем можно будет назвать работу законченной. Возможно, вы уже заметили, что некоторые типы файлов, браузер по умолчанию пытается сразу же открывать. Вместо этого, нам нужно запускать загрузку файла. Это довольно легко сделать, добавив несколько строчек внутри файла .htaccess , расположенного в папке files :

    ForceType application/octet-stream

    Вот и все, наш счетчик загрузок готов.

    Заключение

    Чтобы запустить этот пример на своем собственном сервере, вам понадобится создать таблицу download_manager в базе данных MySQL, к которой у вас разумеется есть доступ. В архиве с примером, есть файл table.sql , который содержит необходимый 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 шаблона). В самом шаблоне в хедере происходит подключение через код