PHP

Счетчик скачиваний для WordPress

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

Для того, чтобы было понято, что мы будем делать, давайте определимся с тем, что должно получиться:

Допустим, у нас есть ссылка вида:
<a href="/upload/count_download.zip" title="Счетчик скачиваний">Cчетчик скачиваний для WordPress своими руками </a>

Нам надо в результате установки плагина, преобразовать эту ссылку и вывести счетчик скачиваний, рядом с ней. В итоге получим вот такую ссылку со счетчиком:
<noindex><a rel='nofollow' href='/download_count.php?url=upload/catalog.zip' title='Счетчик скачиваний'>Счетчик скачиваний для WordPress своими руками</a></noindex> <strong>(Файл скачали: 5 человек)</strong>

Cуть работы плагина:

Исходную ссылку мы оформляем в соответствии с требованием плагина т.е. если у нас было:
<a href="/upload/countdownload.zip" title="Счетчик скачиваний">Cчетчик скачиваний для WordPress своими руками</a>

то с помощью панели администратора, в форме редактирования страниц, вводим шорткод следующего вида:
[download_file url="upload/countdownload.zip" title="Счетчик скачиваний"]
счетчик скачиваний для WordPress своими руками
[/download_file]

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

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

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

Все ясно? Правильно не все! Что за скрипт такой download_count.php и откуда он в корневой дирректории сайта?

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

Заметьте, что если download_count.php был создан один раз, и не удалялся до следующего обращения к нему, то плагин не будет его создавать каждый раз.

С теорией разобрались, перейдем к написанию кода:

При активации плагина счетчика в админке WordPress, сразу создаем таблицу в базе в которую будем сохранять данные.
function install_download_file() { //при активации плагина создаем необходимую таблицу
    global $wpdb;
        $wpdb->query('CREATE TABLE IF NOT EXISTS `download_file` (
          `url` varchar(254) NOT NULL,
          `count` int(9) NOT NULL
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8;');
} 
register_activation_hook(__FILE__,'install_download_file');

Далее пишем функцию, которая будет заменять шорткод на нужную ссылку
function count_download_file ($atts, $content = null) //Выводим счетчик скачиваний, рядом с ссылкой
{
// считываем данные из таблицы плагина о количестве скачиваний  данного файла
global $wpdb;
        $result = $wpdb->get_results("SELECT * FROM  `download_file` WHERE  `url` LIKE  '".$atts["url"]."'", ARRAY_A);
        
        if(!isset($atts["title"]))$atts["title"]=$content;
        
        if($result[0]['url']) //если в таблицы существует информация о количестве нажатий, то выводим ее
                return "<p><noindex> <a rel='nofollow' title='".$atts["title"]."' href='/download_count.php?url=".$atts["url"]."'>".$content."</a></noindex> <span style='font-style: italic; font-size:7pt;'>( Скачали: ".$result[0]['count']." чел. )</span> </p>";
        else{ // если ссылка только появилась, то заносим ее в базу, и присваиваем количество нажатий = 0
            $wpdb->query("INSERT INTO download_file VALUES ('".$atts["url"]."', '0')");
            return "<p><noindex> <a rel='nofollow' title='".$atts["title"]."' href='/download_count.php?url=".$atts["url"]."'>".$content."</a></noindex> <span style='font-style: italic; font-size:7pt;'>( Скачали: 0 чел. )</span> </p>";      
            } 
}

И вешаем ее в качестве обрабатывающей функции на шорткод download_file.
add_shortcode('download_file', 'count_download_file');

Вот и написали плагин счетчика скачиваний для WordPress…

Стоп, а где в коде происходит генерация файла download_count.php? Чуть не забыл важный момент.

Добавим следующий код в начало функции function count_download_file
if (!file_exists("download_count.php")){
        $text='<? 
        if($_SERVER["HTTP_REFERER"]){
            define("DB_NAME", "'.DB_NAME.'");
            define("DB_USER", "'.DB_USER.'");
            define("DB_PASSWORD", "'.DB_PASSWORD.'");
            define("DB_HOST", "'.DB_HOST.'");
            $connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
            mysql_select_db(DB_NAME, $connect);
            if(mysql_query("UPDATE download_file SET count=(count + 1) WHERE url=\'{$_GET["url"]}\'")){     
                    header("Content-Length: " . filesize($_GET["url"]));            
                    header("Content-type: application/octed-stream");
                    header("Content-Disposition: attachment; filename=".basename($_GET["url"]));
                    readfile($_GET["url"]);
               }
            else echo "К сожалению файл удален. Вернуться <a href=".$_SERVER["HTTP_REFERER"].">назад</a>.";
        }
        else echo "Пожалуйста не открывайте этот фаил напрямую, у него другие функции.";
    
        ?>';
            $fp = fopen ("download_count.php", "w"); 
            fwrite($fp,$text); 
            fclose($fp);    
        }

После активации плагина, и обновлении в браузере страницы с шорткодом, в корне сайта появится скрипт download_count.php.

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

В общем и целом получился легковесный плагин: Cчетчик скачиваний для WordPress, для использования которого нужно лишь активировать его, и правильно составить шорткод. Инструкция по составлению шорткода находится прям в описании плагина.

Спасибо за внимание, пишите комменты.
Теги:
Счетчик, WordPress
Добавлено: 29 Сентября 2013 07:50:46 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...