Встановлюємо лічильник завантажень - огляд плагінів для Вордпрес. Створюємо лічильник завантажень файлу за допомогою PHP та MySQL Збереження текстових та графічних файлів

На багатьох веб-сайтах можна побачити посилання на завантаження файлів. Наприклад, фірми-виробники на своїх офіційних сторінках розміщують інструкції до того чи іншого товару. Крім того, розробники програмного забезпеченнятеж пропонують безкоштовно завантажити свою програму, даючи користувачеві таким чином ознайомитись з її функціями та роботою.

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

Як на сайті WordPress встановити лічильник завантажень?

Серед інструментів WordPress немає можливості побачити цю статистику. Тому використовуватимемо стороннє рішення - плагін Kama Click Counter.

Плагін Kama Click Counter

Безкоштовний плагін Kama Click Counter надає всі необхідні засоби для точного підрахунку кількості завантажень того чи іншого файлу. Отже, по-перше, його потрібно встановити та активувати. Для прикладу виведемо на сторінці запису посилання на pdf-файл, для якого і будемо рахувати кількість завантажень. Слід зазначити, що файли на сайт завантажуються стандартними способамиМедіабібліотеки WordPress (Медіафайли -> Додати новий). Далі необхідно відкрити для редагування запис або сторінку. У контентній частині потрібно поставити курсор у те місце, де буде розміщено посилання на файл, і натиснути кнопку в панелі інструментів візуального редактора, що з'явилася.

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

У бібліотеці медіафайлів слід вибрати потрібний файл та натиснути кнопку Вибрати файл.

У результаті в контентну частину запису або сторінки буде вставлено спеціальний шорткод, який служить для відображення посилання для завантаження файлу.

Після оновлення матеріалу (кнопка Оновити) можна переходити на сайт для перегляду.

Плагін також здатний показати статистику завантажень і в частині користувача сайту - у віджеті. Зазначимо, що плагін за замовчуванням не показує у віджеті конкретні цифри, що і скільки разів було завантажено. Виводиться лише список файлів, що найчастіше завантажуються. Для цього слід перейти в адмін-розділ Зовнішній вигляд -> Віджети та перетягнути віджет КСС: Топ Завантажень у бажане місце сайдбару.

Видно, що у віджеті є кілька опцій, що дозволяють видозмінити список.

Тут можна задати такі основні параметри:

  • заголовок віджету (поле Заголовок );
  • кількість виведених файлів у списку (скільки посилань показувати?);
  • сортування результатів (як сортувати результат?);
  • налаштування зовнішнього виглядушаблон (блоки шаблон і CSS шаблон ).

Особливістю плагіна є гнучке налаштування шаблону. Тут можна використовувати так звані теги, на місці яких буде відображено ту чи іншу інформацію.

Після того, як усі налаштування віджету були виконані та збережені (кнопка Зберегти), можна дивитися результат на сайті.

Давно вже не було уроків про 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"); 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.

    // Видаляємо перетворення режиму "магічних лапок" $_POST["content"] = addslashes($_POST["content"]);

    // Перезаписуємо вміст файлу file_put_contents($_POST["filename"], "$_POST");

    4.9. Лічильник завантажень файлів

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

    Будуватимемо наш лічильник таким чином, щоб посилання на завантаження файлу являли собою посилання на поточну сторінку з передачею як параметр імені файлу, наприклад, index.php?down=archive.zip . Скрипт перевірятиме, чи передано параметр down , і якщо це так, то реєструватиме завантаження архіву у файлі filecount.txt. При повторному завантаженні сторінки з файлу вийматимуться значення лічильників для кожного з архівів для виведення у вікно браузера. Передача файлу на завантаження буде здійснюватися відсиланням відвідувачу HTTP-заголовка Location із зазначенням шляху до архіву, що завантажується. Скрипт лічильника завантажень файлів може виглядати так, як це представлено у лістингу 4.31.

    Лістинг 4.31. Лічильник завантажень файлів

    // Виставляємо рівень обробки помилок error_reporting (E_ALL & ~ E_NOTICE);

    // Реєструємо імена файлів у масиві

    $file_name = array("archive1.zip","archive2.zip","archive3.zip");

    // Ім'я файлу, де зберігається статистика $countname = "filecount.txt";

    // Якщо файл існує,

    // зчитуємо поточну статистику масив if(file_exists($countname))

    // Отримуємо вміст лічильника

    $content = file_get_contents($countname);

    // Розпаковуємо масив

    $count = unserialize($content);

    // Якщо такого файлу немає - створюємо його,

    // а статистику обнулюємо

    // Заповнюємо масив $count нульовими значеннями foreach($file_name as $file)

    $count[$file] = 0;

    // Упаковуємо масив і поміщаємо їх у лічильник file_put_contents($countname, serialize($count));

    // Перевіряємо, чи не передано значення параметра down

    // Через метод GET

    if(isset($_GET["down"]))

    // Перевіряємо, чи входить значення параметра $_GET["down"]

    // масив $file_name

    if(in_array($_GET["down"],$file_name))

    // Реєструємо факт завантаження цього файлу

    // Збільшуємо значення лічильника з ключем

    // $_GET["down"] на одиницю

    $count[$_GET["down"]]++;

    // Перезаписуємо файл лічильника file_put_contents ($ countname, serialize ($ count));

    echo "Файл $file був завантажений ".intval($count[$file])."
    ";

    Імена файлів, що завантажуються, зберігаються в масиві $file_name , додавання нового архіву призводить до автоматичного його обліку в системі. Попередня реєстрація в масиві потрібна з кількох причин. По-перше, приймаючи ім'я масиву через параметр down, необхідно перевірити, чи він входить до числа файлів, дозволених до завантаження. По-друге, обробляти імена файлів у масиві набагато зручніше. Так масив $count , у якому зберігається кількість завантажень файлів, автоматично будується виходячи з масиву зареєстрованих у системі файлів,

    масив зручно упаковувати за допомогою функції serialize() у рядок, а потім розпаковувати назад у масив за допомогою функції unserialize().

    ПРИМІТКА

    Важливо пам'ятати, що відправка всіх HTTP-заголовків повинна здійснюватися до відправки основного вмісту, інакше їх відправлення буде неможливим і інтерпретатор PHP видасть попередження "Warning: Cannot

    (Попередження: неможливо модифікувати заголовну інформацію – заголовки вже відправлені). Це диктується протоколом HTTP: спочатку надсилаються заголовки, потім вміст документа, тому будь-який висновок у вікно браузера сприймається як закінчення надсилання заголовків і початок надсилання тіла документа. Якщо виведення у вікно браузера до відправлення заголовків неминуче, необхідно вдаватися до функцій керування виводом, поміщаючи весь вивід у буфер і відправляючи його наприкінці роботи скрипта.

    Як видно з лістингу 4.31, у скрипті обробляється ситуація першого запуску, коли відсутній файл filecount.txt - він автоматично створюється при першому завантаженні сторінки, ініційований нульовими значеннями для кожного файлу з масиву $file_name. Результат роботи скрипта з лістингу 4.31 можна побачити на рис. 4.4.

    Мал. 4.4. Результат роботи лічильника файлів

    4.10. Збереження текстових та графічних файлів

    Перехід за посиланням на текстові файли або файли HTML призводить до відображення їх у вікні браузера, що не завжди зручно, особливо якщо файл призначений для завантаження. Та ж доля чекає графічні файлита взагалі будь-які файли, які браузер може відобразити. Про вміст файлу браузер відвідувача "дізнається" від сервера, тому що кожен файл супроводжується HTTP-заголовками, що повідомляють клієнту про вміст, розмір файлу, що завантажується, необхідності встановити cookie і т. п. Якщо тип файлу не вдалося визначити, він відправляється просто як Двійковий потік.

    Придушити таку поведінку можна, відправивши заголовки HTTP, представлені в лістингу 4.32.

    Лістинг 4.32. Скрипт, який дозволяє зберігати текстові та графічні файли

    $filename = basename($_GET["down"]); header("Content-Disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); header("Content-length: ".filesize($_GET["down"])));

    echo file_get_contents($_GET["down"]); ?>

    Скрипт у лістингу 4.32 приймає як GET-параметр ім'я файлу, наприклад,

    index.php?down=filetext.txt. За допомогою функції basename() вилучається ім'я

    файлу (на той випадок, якщо GET-параметр down містить шлях до файлу). HTTP заголовок Content-Disposition задає ім'я файлу, що зберігається, яке визначається атрибутом filename . У наведеному скрипті параметр filename збігається з ім'ям файлу, що відправляється, однак як параметр filename може бути передано довільне ім'я. HTTP-заголовок Content-type повідомляє про те, що дані, що передаються, є двійковими, і браузеру їх не слід інтерпретувати. HTTP-заголовок Content-length передає клієнту розмір файлу. В останньому рядку виводиться вміст файлу, переданий через параметр $_GET["down"] , який витягується за допомогою file_get_contents() . Результат роботи скрипта з лістингу 4.32 представлено на рис. 4.5.

    ПРИМІТКА

    Важливо, щоб після виведення вмісту файлу більше нічого не виводилося в потік: ні конструкцією echo, ні безпосереднім висновком – інакше все буде прикріплено до кінця файлу. Це стосується і можливих пробілів, і перекладів рядків після завершального тега ?> .

    Мал. 4.5. Діалогове вікно для завантаження файлу

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

    Вступ.

    Отже, стояло завдання - підрахувати кількість завантажень того чи іншого файлу, встановивши лічильник завантажень для вордпрес. При більш уважному розгляді вона розпадалася на кілька підзавдань, а точніше — побажань до плагіна, який її виконував би. Ось їх короткий список:

    • Необхідно, щоб кількість завантажень відображалася десь в адмінці, з можливістю сортування — скільки завантажили за день, за тиждень, місяць, рік, всього
    • Бажано, щоб можна було переглянути графіки/діаграми завантаження файлів відносно один одного
    • Бажано, щоб можна було переглянути графіки/діаграми завантаження файлів у часі
    • Бажано, щоб велася статистика по тому, коли останній раз завантажили файл
    • Можливість виводити інформацію поряд з посиланням про те, скільки разів було завантажено файл, а також його розмір, і дату завантаження для користувача, який тільки збирається його завантажити. Ну чи не виводити - за бажанням адміна
    • Можливість вставки коду, що за це відповідає окремою кнопочкою в панелі написання постів редактора TinyMCE(quicktag-ами користуватися не люблю)
    • Можливість обмежити швидкість завантаження (так, про всяк випадок)
    • Навішування на цей плагін функції аплоада (завантаження файлів на сервер) - навпаки, нафіг не здалася. У мене й фтп непогано працює. Але якщо не особливо заважатиме — то нехай залишається
    • Непогано б мати можливість приліпити красиву кнопочку до посилання на скачування - хоча у мене достатньо прописати.

    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. закладати закачування, тут моя логіка відпрацювала на 100% однаково з автором плагіна.

    Додаємо імена папок, які ми маємо на сервері в каталозі downloads (у налаштуваннях «рубрики та директорії»), щоб простіше було вибирати шлях до файлів. Якщо їх не додати — доведеться завантажувати все в корінь downloads. Зберігаємо, можна додавати завантаження. Ось що у нас приблизно виходить.

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

    ABAP

    < 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)

    < ahref="(url)" title="Скачан (hits,"ни разу","1 раз","% раза"}">{title}!}

    Схиляння не підтримуються, тобто. якщо файл скачали 21 раз, а у вас у шаблоні стоїть "раза" - то звучати це буде дещо не російською мовою.

    А ось варіант із кнопкою:

    ABAP

    - (description), (size), Завантажений (date, "Y-m-d"), Скачан (hits) рази

    < 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); ($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, то просто повертаються дані про кількість завантажень. Решта я думаю зрозуміло з коментарів у коді.

    Лічильник завантажень Joomla

    Вирішив прикрутити подібний лічильник на один із моїх проектів на joomla. За ідеєю потрібно написати або окремий модуль, або інтегрувати код в контролер компонента com content, щоб дані лічильника писалися над файл, а бд і кожної статті окремо. Але на таку розробку немає часу і я вирішив питання простіше. Лічильник мені був потрібний для однієї сторінки. Я взяв файл count.php і переніс його до шаблону джумла, який на даний момент підключений (в корені сайту templates/ваш_шаблон). Не забуваємо вставити вгору count.php код defined("_JEXEC") or die; (Це для джумла). Кнопку закачування вставляємо в сторінку, що створюється, а js код можна так само вбудувати в сторінку, або підключити окремим файлом. У мене, наприклад, окремим файлом (він знаходиться в папці js шаблону). У шаблоні в хедері відбувається підключення через код

    
    Top