Пару дней назад решил найти для одного проекта модуль или хак отдельная страница скачивания для dle, чтобы при клике в полной новости человека перекидывало на другую страницу, а на ней будет расположена все информация о файла, авторе, размере и собственно ссылка на скачивание. Не буду называть основную цель для чего я его искал, я думаю если вы сейчас это читаете, то вы явно уже знаете для чего нужен вам этот модуль Downpage Ultimate.
Самая распространенная методика использования этого модуля, это конечно же реклама на этой странице, но это не единственное её предназначения, однако давайте её возьмем за основу и посмотрим как его используют другие. Так как все страницы с файлами в DLE имеют такой адрес:
http://w9y.ru/engine/download.php?id=*
А с модулем он меняется, на вот такой:
http://w9y.ru/getfile-*
Где используется *, это ID файла, обычно он выглядит как /download.php?id=
12, а с модулем так /getfile-
12То, мы сможем составить
Дорк и посмотреть на сайты в поисковых системах, для этого достаточно вписать такой запрос в поисковую строку:
inurl:getfile-12
Или перейти по этой ссылке
http://yandex.ua/yandsearch?text=inurl%3Agetfile-12После этого в запросе, можете поиграться с цифрой ID или поискать ещё в Google точно по такому же запросу. Но, мне хватило и этого примера:
Думаю рекламу видно без проблем, правда? Это же любимый
AdvMaker, которые несколько дней назад проводил хорошую акцию по увеличению доходов.
А тут вообще шикарная картинка, ссылку на скачивание почти не видно, одна реклама, даже очень агрессивная реклама и я знаю что по ней кликают и владельцы зарабатывают на этом дополнительную копейку, которую вы до этого момента просто не монетизировали. Так же
плавающий блок сможет поднять немного ваши доходы, так что не забудьте его тоже поставить. Так что теперь даже если не хотели ставить модуль downpage для dle, то наверное поменяли свое мнение ;)
Что умеет модуль Downpage Ultimate?!- Отдельная страница для вашего шаблона с возможностью установки рекламных кодов;
-
Таймер обратного отсчета перед скачиванием. Для каждой группы можно указать свой период задержки времени в секундах перед скачиванием файла. (Данная установка делается через настройку групп по ссылке
http://www.site.ru/admin.php?mod=usergroup)
Обратите внимание! Если у вас не работает таймер обратного отсчета, значит вы не установили группе Гости или Посетители таймер (30-60 секунд), сначала сделайте это в НАСТРОЙКАХ ГРУППЫ. Я сам долго не мог понять почему не работает таймер, но как выяснялось все работает, если настроить все правильно!
- Все настройки можно сделать через удобную админ панель.
- Нет конфликтов с интеграцией от Kaliostro для связки DLE + IPB
Как установить Downpage Ultimate?!1. Нужно сначала его скачать, скажу сразу что тестил downpage на 9.7, 10 и 10.1 версиях DLE. Как обстоят дела на более ранних версиях не знаю, так как протестить на таких "диназарах" у меня нет где.
2. В архив вложил инструкцию, мало ли будите тестировать на локалке, но сразу предупреждаю без разметки и нормальных комментариев ставить её сложно, по этому лучше напишу нормальную инструкцию для вас дорогие читатели, на нормальном языке. И так начнем.
3. Разархивируем архив и заходим в папку "
templates", в ней лежит папка "
avaload", её нужно
переименовать на имя вашего АКТИВНОГО шаблона.
4. Теперь заливаем все файлы (кроме папки
init.php_97) на ваш сайт, через FTP или файловый менеджер:
Содержимое папки "
init.php_97" заливаем в ручную, только в том случаи если у вас DLE 9.7 и файл init.php закодированный.
5. Переходим в адресной строке браузера по адресу:
http://ваш_домен.ru/dp_ultimate_install.php
После установки, можете зайти и сразу удалить этот файл dp_ultimate_install.php.
6. Открываем файл
engine/modules/functions.php и ищем строку:
$db->query( "SELECT id, name, onserver, dcount FROM " . PREFIX . "_static_files WHERE $where" );
Заменяем на:
$db->query( "SELECT id, name, onserver, dcount, size FROM " . PREFIX . "_static_files WHERE $where" );
7.
Ищем код примерно с таким содержанием (по началу строки и концу кода, так как в мануале код для апдейта версии с 1 на 2):
$db->query( "SELECT id, name, onserver, dcount FROM " . PREFIX . "_files WHERE $where" );
$area = "";
}
while ( $row = $db->get_row() ) {
$size = formatsize( @filesize( ROOT_DIR . '/uploads/files/' . $row['onserver'] ) );
$row['name'] = explode( "/", $row['name'] );
$row['name'] = end( $row['name'] );
$find_1[] = '[attachment=' . $row['id'] . ']';
$find_2[] = "#\[attachment={$row['id']}:(.+?)\]#i";
if ( ! $user_group[$member_id['user_group']]['allow_files'] ) {
$replace_1[] = "<span class=\"attachment\">{$lang['att_denied']}</span>";
$replace_2[] = "<span class=\"attachment\">{$lang['att_denied']}</span>";
} elseif( $config['files_count'] == 'yes' ) {
$replace_1[] = "<div class=\"DownLoadWindow\">
ТУТ БЫЛ КУСОК КОДА СО СТАРОЙ ВЕРСИИ DOWNPAGE. Ищите по началу строке код и по окончанию кода!
} else {
$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$row['name']}</a> [{$size}]</span>";
$replace_2[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >\\1</a> [{$size}]</span>";
}
}
$db->free();
В чистой версии DLE 10.1 это строки
от 784 до 818. Заменяем его на код: $db->query("SELECT id, name, onserver, dcount, size FROM " . PREFIX . "_files WHERE $where");
$area = "";
}
while ($row = $db->get_row()) {
$size = formatsize(@filesize(ROOT_DIR . '/uploads/files/' . $row['onserver']));
$row['name'] = explode("/", $row['name']);
$row['name'] = end($row['name']);
$find_1[] = '[attachment=' . $row['id'] . ']';
$find_2[] = "#\[attachment={$row['id']}:(.+?)\]#i";
require ENGINE_DIR . '/modules/functions.dp.php';
}
$db->free();
8. Открываем файл
engine/inc/include/functions.inc.php и ищем строку:
if (!defined('DATALIFEENGINE')) {
die("Hacking attempt!");
}
Заменяем её на:
if (!defined('DATALIFEENGINE')) {
die("Hacking attempt!");
}
function size_http($url, $host) {
$fp = @fsockopen($host, 80, $errno, $errstr, 20);
if (!$fp) {
$ret = 0;
} else {
fputs($fp, "HEAD " . $url . " HTTP/1.1\r\n");
fputs($fp, "HOST: " . $host . "\r\n");
fputs($fp, "Connection: close\r\n\r\n");
$headers = "";
while (!feof($fp)) {
$headers .= fgets($fp, 128);
}
fclose($fp);
$headers = strtolower($headers);
$array = preg_split("|[\s,]+|", $headers);
$key = array_search('content-length:', $array);
$ret = $array[$key + 1];
}
if ($array[1] == 200)
return $ret;
else
return -1 * $array[1];
}
function size_ftp($url, $user, $pass, $dir, $file) {
$fp = @fsockopen($url, 21, $errno, $errstr, 30);
fputs($fp, "USER $user\r\n");
$s = fgets($fp);
fputs($fp, "PASS $pass\r\n");
$s = fgets($fp);
fputs($fp, "PWD\r\n");
$s = fgets($fp);
fputs($fp, "CWD $dir\r\n");
$s = fgets($fp);
fputs($fp, "SIZE $file\r\n");
$s = fgets($fp);
fputs($fp, "PWD\r\n");
$result = fgets($fp);
fclose($fp);
preg_match("#(\d*)\s(\d*)#", $result, $out);
$file_size = $out[2];
return $file_size;
}
9. Переходим в файл
engine/download.php и ищем:
require_once ENGINE_DIR . '/classes/download.class.php';
Заменяем на код:
require_once ENGINE_DIR . '/classes/download.class.php';
require_once ENGINE_DIR . '/data/dp_conf.php';
Продолжаем дальше искать в этом файле, теперь ищем код:
if ($_REQUEST['area'] == "static")
$row = $db->super_query ( "SELECT name, onserver FROM " . PREFIX . "_static_files WHERE id ='$id'" );
else
$row = $db->super_query ( "SELECT name, onserver FROM " . PREFIX . "_files WHERE id ='$id'" );
Заменяем его на:
if ($_REQUEST['area'] == "static")
$row = $db->super_query("SELECT name, onserver,size FROM " . PREFIX . "_static_files WHERE id ='$id'");
else
$row = $db->super_query("SELECT name, onserver,size FROM " . PREFIX . "_files WHERE id ='$id'");
Далее ищем:
$file = new download ( FILE_DIR . $row['onserver'], $row['name'], $config['files_force'], intval($user_group[$member_id['user_group']]['files_max_speed']) );
Меняем на:
if ($row['size'] and $row['size'] != 0) {
$file = "";
header("Location: {$row['onserver']}");
} else {
$file = new download ( FILE_DIR . $row['onserver'], $row['name'], $config['files_force'], intval($user_group[$member_id['user_group']]['files_max_speed']) );
}
10. На этом dle страница скачивания почти готова, вы уже большой молодец и скоро будет конец этого тяжкого труда, продолжаем дальше, осталось немного
Открываем
/engine/inc/usergroup.php и ищем:
$max_pm_value = $user_group[$id]['max_pm'];
Меняем на код:
$max_pm_value = $user_group[$id]['max_pm'];
$dp_timer = $user_group[$id]['dp_timer'];
Снова ищем в этом файле:
$max_files = intval( $_REQUEST['max_files'] );
Изменяем:
$max_files = intval( $_REQUEST['max_files'] );
$dp_timer = intval($_REQUEST['dp_timer']);
Снова ищем (ещё немного осталось):
$db->query( "UPDATE " . USERPREFIX . "_usergroups SET group_name='$group_name',
Изменяем на:
$db->query("UPDATE " . USERPREFIX . "_usergroups SET group_name='$group_name', dp_timer='$dp_timer',
И последнее изменение в этом файле, ищем:
<tr>
<td style="padding:4px;" class="option"><b>{$lang['group_mpm']}</b><br /><span class="small">{$lang['hint_gmpm']}</span></td>
<td style="padding-top:2px;padding-bottom:2px;"><input class="edit bk" type="text" size="10" name="max_pm" value="{$max_pm_value}"></td>
</tr>
Меняем на:
<tr>
<td style="padding:4px;" class="option"><b>Ожидание перед скачивание файла</b><br />
<span class="small">Вы можете указать количичество секунд которые необходимо ждать пользователю перед тем как начнётся скачивание файла.
Если установить значение в "0" - Выводится сразу ссылка на загрузку файла. Если оставить пустым будет выведенно сообщение мол "Вы не можите скачивать файлы"</span></td>
<td style="padding-top:2px;padding-bottom:2px;"><input class="edit" type="text" size="10" name="dp_timer" value="{$dp_timer}"></td></tr>
<tr><td background="engine/skins/images/mline.gif" height=1 colspan=2></td></tr>
<tr><td style="padding:4px;" class="option"><b>{$lang['group_mpm']}</b><br /><span class="small">{$lang['hint_gmpm']}</span></td>
<td style="padding-top:2px;padding-bottom:2px;"><input class="edit bk" type="text" size="10" name="max_pm" value="{$max_pm_value}"></td>
</tr>
11. В файле
engine\inc\include\init.php найти строку:
require_once (ENGINE_DIR . '/data/dbconfig.php');
Ниже неё вставить (!!!) :
extract( $_REQUEST,EXTR_SKIP );
Если у вас версия DLE 9.7 и файл закодирован, то достаем файл из 4-го пункта инструкции, смотрите на скрине.
12. И последний штрих, заходим в главную директорию (там где лежит файл admin.php) и заходим в файл
/.htaccessИщем строку:
RewriteEngine On
Заменяем на код:
RewriteEngine On
# ЧПУ для DownPage
RewriteRule ^getfile-([0-9]+)+$ /engine/downpage.php?get=$1 [L]
RewriteRule ^getstfile-([0-9]+)+$ /engine/downpage.php?get=$1&area=static [L]
Все!!! Вы настоящий молодец и вы все таки поставили этот модуль!!!! Поздравляю вас!
Теперь заходите в папку
/templates/НАЗВАНИЕ-ВАШЕГО-ШАБЛОНА/downpage.tpl подстраивайте шаблон под себя, ставьте свою рекламу и пусть она приносит вам хороший доход, ведь вы это заслужили