DLE — монетизируем загруженные в новостях файлы через отдельный домен

Как много у вас загруженных файлов (приложений к постам) не считая картинок? У меня много и придумал способ их монетизировать! Решил ничего не выдумывать и при помощи простейшего JS подменять ссылку на скачивание файла с сайта на специальную ссылку.

При нажатии кнопки скачать будет подставляться промежуточная страница партнерской программы (а-ля укоротители ссылок) с рекламой. За переходы на такие страницы партнерка платит.

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

https://ссылка_партнерки/https://моя_ссылка

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

Найти ссылку на скачивание

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

https://devarts.pro/engine/download.php?id=84

Получить число

var link = $('.attachment_box a').attr('href'),
        number = Number(link.replace(/\\D+/g,""));

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

var mode = true;

if(mode){
    var link = $('.attachment_box a').attr('href'),
        number = Number(link.replace(/\\D+/g,"")),
        out = 'https://q32.ru/39595/http://d.devarts.pro/?id=' + number,
        out = out + '&href=' + location.href,
        out = out + '&title=' + $('h1').text(),
        out = out + '&name=' + $('.attachment_box a b').text(); 

    $('.attachment_box a').attr('target', '_blank').attr('href', out);
}
<div class=\\"attachment_box\\">
	<a href=\\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\\" >Скачать <b>{$row['name']}</b></a>
	Размер: <span>{$size} </span> Скачиваний: <span>{$row['dcount']} </span>
</div>

Последняя строка OUT может отличаться. Название файла у меня хранится в ссылке и обернуто тегом B, пример выше (не attachment.tpl, a engine/modules/functions.php). Последней строкой мы меняем текущую ссылку на нашу. Дополнительно обернул код небольшим условием.

Переменная mode по умолчанию включена и скрипт выполняется сразу при загрузке страницы, но, если заменить true на false, то скрипт выше работать не будет. Эдакой хак дабы не комментировать весь код.

Готовая ссылка получится огромной длины, все кирилические символы будут перекодированы в сетевой адрес (% с буквой) и будет иметь следующий вид.

https://q32.ru/39595/http://d.devarts.pro/?id=84&href= ссылка_на_пост_на_сайте&title= название_поста_на_сайте&name=название_файла

Обработчик на стороннем домене

Теперь нам нужно принимать данные на стороннем домене и формировать текст. Создаем файл index.php, а .htaccess который будет подхватывать все 404 страницы вложу в архив.

<?php if($_GET['id'] && $_GET['name'] && $_GET['title'] && $_GET['href']){ ?>

	<p>Имя файла: <?= $_GET['name']; ?></p>
	<p>Источник: <a href="<?= $_GET['href']; ?>"><?= iconv("cp1251", "UTF-8", $_GET['title']); ?></a></p>
	<p>Скачать: <a href="https://devarts.pro/engine/download.php?id=<?= $_GET['id']; ?>">download</a></p>

<?php }else{ ?>

	<p>Возникла ошибка, параметры запроса неизвестны</p>
	<p>Попробуйте вернуться на <a href="https://devarts.pro">https://devarts.pro</a> и попробовать заново</p>

<?php } ?>

Проверяем наличие четырех GET параметров и выдаем код. Небольшой нюанс в строке с источником. Я уже давно перешел на юникод и кодировку UTF-8, а данный сайт использует кодировку windows-1251. Функция iconv преобразует cp1251 в utf-8. Если этого не делать, кирилические символы выводятся в виде ромбиков.

Если у вас и там, и там кодировка одинаковая, используйте вместо первой строки вторую в примере ниже.

<?= $_GET['href']; ?>"><?= iconv("cp1251", "UTF-8", $_GET['title']); ?>
<?= $_GET['href']; ?>"><?= $_GET['title']; ?>

Собственно и все. Протестировать, как это работает можно скачав готовый набор файлов ниже.

Похожие записи

Полный гайд по миграции с CMS DLE на WordPress
Данный сайт в апреле 2019 года полностью переехал на CMS WordPress и в июне, после завершения всех правок (а их...
DLE – быстрый переезд на хостинг не используя инсталятор
Установка движка DLE на хостинг происходит через специальный файл — инсталятор, в котором необходимо заполнить все поля (имя базы данных,...
DLE – мой первый модуль, как написать свой модуль Datalife Engine
Как ни пытался уйти с DLE из-за того, что он платный, а на рынке существует куча бесплатных аналогов, не получается...
DLE на HTTPS – основные проблемы и их решение
Столкнулся с рядом проблем, когда наконец-то решился перебраться на https. Не появлялись некоторые картинки, видео, а в адресной строке писалось,...
DLE – Модуль форума SimpleBB 1.1
Полноценный форум с единой регистрацией и авторизацией, единым акаунтом и ссылками на профиль от dle \”user/username/\” на движке SimpleBB 1.1...

Добавить комментарий