Задавайте вопросы про Drupal

big boy
На сайте с 18.11.2006
Offline
332
#941

Хочу реализовать функционал http://sourceforge.net

А именно функция загрузки, чтобы при клике на приложенном файле был переход на отдельную страницу (заглушку), отсчет 5-10 секунд и автоматический запуск загрузки + появление прямой ссылки на файл. А лучше не прямой, а кодированной.

Пошукал по модулям, не нашел готового решения.

✔ Как я генерирую статьи через ИИ, которые приносят трафик - https://webmasta.ru/blog/16-vkalyvayut-roboty-ne-chelovek-stati-s-pomoschyu-ii-kotorye-prinosyat-trafik
A4
На сайте с 05.01.2012
Offline
55
#942
big boy:
Хочу реализовать функционал http://sourceforge.net
А именно функция загрузки, чтобы при клике на приложенном файле был переход на отдельную страницу (заглушку), отсчет 5-10 секунд и автоматический запуск загрузки + появление прямой ссылки на файл. А лучше не прямой, а кодированной.

В общем создается модуль.

В хуке

hook_init подключаем ко всем страницам сайта новый js файл, короче как-то так:


function loadfile_init(){
$path = drupal_get_path('module', 'loadfile');
drupal_add_js($path . '/js/lsystem.js');
}

Предположим все файлы у вас на страницах находятся по прямым ссылкам(что скорее всего так и есть) У этих ссылок есть свой классовый атрибут, пусть это будет class=someclass

тогда в файле lsystem.js пишем примерно! так


$(document).ready(function(){
$("body").delegate('.someclass',"click",function(e){
href = $(this).attr('href');//собсна ссылка
/*
Обычно все файлы, которые закачиваются находятся в 1 директории и отличаются друг от друга только по имени, то есть имя - единственный параметр который изменяется, мы его и получаем
Пусть ссылка выглядит так:
href = "/sites/default/files/blabla/arhivename.zip";
*/
name = href.split("/");
//name[4] - эо имя файла, во всяком случае либо [4] либо [3], да сами вкурите....
window.location = "/loadfile/"+name;//ГЛАВНОЕ, редиректим его, то есть юзера, на левую страницу, на котрой запилим ожидание.
return false;//обязательно!!
});
});

Теперь надо через хук hook_menu запилить страницу, на которой юзер будет ждать пока ему отдадут файл собсна.

Делается это следующим образом:


function loadfile_menu(){
$items['/loadfile/%'] = array(//редирект на загрузку файла по его идентификатору
'title' => t('Load File'),
'type' => MENU_CALLBACK,
'page callback' => 'func_loadFile',
'access arguments' => array('access content'),
);
return $items;
}

И собсна сама функция закачки будет как-то так выглядеть:


function func_loadFile(){
$filename = arg(1);//вроде 1, если урл такого рода: /loadfile/filename.zip, то нам надо filename.zip

$file_url= "/sites/default/files/blabla/".$filename;//про это выше я писал. 1 часть выражения - собсна каталог в который все файлы вы кидаете

$result = "<div>".$file_url."</div>";//прямая ссылка на файл как и заказывали. Есче сюда можно запилить нечто вроде вывода рекламы и прочего, на что хватит фантазии

//Дальше все просто:
sleep(3);//скока надо ждать там по вашему? Вот сюда это вписать надо.
$fpOrigin=fopen($file_url, 'rb'); //отдаем юзеру файл по чанкам...
header('Content-type: application/octet-stream');
$position = 0;
$size = 51200;

while(!feof($fpOrigin)){
//sleep(1); - это ЕСЛИ мы ограничиваем скорость скачки до 4кб/сек, соответственно для больше скорости 4096 надо заменить на большее число
$buffer=fread($fpOrigin, 4096); //we read chunks of 4096 bytes
fpassthru($buffer); //And we send them back to the current user
flush(); //we try to flush the output buffer, in case there is a deflated or gzipped transfert betweenm the web server and the client
}
fclose($fpOrigin);
return $result;
}

Надуюсь помог хД Возможно я где-то что-то упустил, хз. Я бы сделал так) Или чуть по другому, но похоже.

big boy:
появление прямой ссылки на файл. А лучше не прямой, а кодированной.

Если вариант вывода прямой ссылки не очень устраивает, то hook_page вам в помощ)

HM
На сайте с 14.01.2012
Offline
248
#943

drupal 6 с модулем advagg

в настройках модуля включены "Gzip CSS/JS files" и "Generate .htaccess files in the advagg_* dirs".

генерит-упаковывает модуль нормально, но сжатие gzip не работает:

google pagespeed говорит

Сжатие следующих ресурсов посредством gzip позволит уменьшить их размер для переноса на 267,8Кб (на 76 %).
Сжатие http://domain.com/.../js_d8e779f3aceabd504ab14a47c57fe446_3.js позволит уменьшить размер на 222,5Кб (на 75 %).
Сжатие http://domain.com/.../css_f6232fe334274d14d9919c688a1c3a12_... позволит уменьшить размер на 39,1Кб (на 81 %).

смотрю запрос:

GET /sites/default/files/advagg_js/js_d8e779f3aceabd504ab14a47c57fe446_3.js HTTP/1.1
Host: domain.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
If-Modified-Since: Thu, 28 Mar 2013 11:52:18 GMT
Cache-Control: max-age=0

HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Thu, 28 Mar 2013 12:07:36 GMT
Content-Type: application/x-javascript
Content-Length: 301821
Last-Modified: Thu, 28 Mar 2013 12:07:28 GMT
Connection: keep-alive
Accept-Ranges: bytes

nginx фронтендом, внутри апач (стандартная инсталляция debian+ispmanager)

mod_deflate и mod_headers включены.

что я упустил? куда копать? или может использовать другое решение? очень уж хочется это реализовать

upd: решил вопрос, поручив nginx жать весь контент

gzip on;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
[Удален]
#944

А кто какие симпатишные слайдеры в шапку сайта ставит?

Типа ::: спешл фор Друпал... ))

Garin33
На сайте с 31.08.2009
Offline
169
#945

http://drupal.org/project/views_slideshow, чего тут думать. Темизируется отлично.

Потому что Drupal - это круто.
big boy
На сайте с 18.11.2006
Offline
332
#946
aftamat4ik:
В общем создается модуль.
В хуке
hook_init подключаем ко всем страницам сайта новый js файл, короче как-то так:

function loadfile_init(){
$path = drupal_get_path('module', 'loadfile');
drupal_add_js($path . '/js/lsystem.js');
}

Предположим все файлы у вас на страницах находятся по прямым ссылкам(что скорее всего так и есть) У этих ссылок есть свой классовый атрибут, пусть это будет class=someclass
тогда в файле lsystem.js пишем примерно! так

$(document).ready(function(){
$("body").delegate('.someclass',"click",function(e){
href = $(this).attr('href');//собсна ссылка
/*
Обычно все файлы, которые закачиваются находятся в 1 директории и отличаются друг от друга только по имени, то есть имя - единственный параметр который изменяется, мы его и получаем
Пусть ссылка выглядит так:
href = "/sites/default/files/blabla/arhivename.zip";
*/
name = href.split("/");
//name[4] - эо имя файла, во всяком случае либо [4] либо [3], да сами вкурите....
window.location = "/loadfile/"+name;//ГЛАВНОЕ, редиректим его, то есть юзера, на левую страницу, на котрой запилим ожидание.
return false;//обязательно!!
});
});

Теперь надо через хук hook_menu запилить страницу, на которой юзер будет ждать пока ему отдадут файл собсна.

Делается это следующим образом:

function loadfile_menu(){
$items['/loadfile/%'] = array(//редирект на загрузку файла по его идентификатору
'title' => t('Load File'),
'type' => MENU_CALLBACK,
'page callback' => 'func_loadFile',
'access arguments' => array('access content'),
);
return $items;
}

И собсна сама функция закачки будет как-то так выглядеть:

function func_loadFile(){
$filename = arg(1);//вроде 1, если урл такого рода: /loadfile/filename.zip, то нам надо filename.zip

$file_url= "/sites/default/files/blabla/".$filename;//про это выше я писал. 1 часть выражения - собсна каталог в который все файлы вы кидаете

$result = "<div>".$file_url."</div>";//прямая ссылка на файл как и заказывали. Есче сюда можно запилить нечто вроде вывода рекламы и прочего, на что хватит фантазии

//Дальше все просто:
sleep(3);//скока надо ждать там по вашему? Вот сюда это вписать надо.
$fpOrigin=fopen($file_url, 'rb'); //отдаем юзеру файл по чанкам...
header('Content-type: application/octet-stream');
$position = 0;
$size = 51200;

while(!feof($fpOrigin)){
//sleep(1); - это ЕСЛИ мы ограничиваем скорость скачки до 4кб/сек, соответственно для больше скорости 4096 надо заменить на большее число
$buffer=fread($fpOrigin, 4096); //we read chunks of 4096 bytes
fpassthru($buffer); //And we send them back to the current user
flush(); //we try to flush the output buffer, in case there is a deflated or gzipped transfert betweenm the web server and the client
}
fclose($fpOrigin);
return $result;
}

Надуюсь помог хД Возможно я где-то что-то упустил, хз. Я бы сделал так) Или чуть по другому, но похоже.



Если вариант вывода прямой ссылки не очень устраивает, то hook_page вам в помощ)

Спасибо! Я правда мало что понял, но главное, что реализуемо

[Удален]
#947

С друпалом можно научится работать без знания пшп и небольшим знанием ксс и штмл?

big boy
На сайте с 18.11.2006
Offline
332
#948
vertuhay:
С друпалом можно научится работать без знания пшп и небольшим знанием ксс и штмл?

Смотря, что вам нужно. В принципе можно.

[Удален]
#949

я хз толи я тупой, с дле разобрался, друпал 7 открыл посотрел, закрыл :) мб 6 версию нада было попробывать, мне б простенький сайтик хоть склепать.

Garin33
На сайте с 31.08.2009
Offline
169
#950
vertuhay:
я хз толи я тупой, с дле разобрался, друпал 7 открыл посотрел, закрыл :) мб 6 версию нада было попробывать, мне б простенький сайтик хоть склепать.

Что тут сказать - плохо значит смотрели. 7-ка, по сравнению с 6 очень вперед ушла, и по удобству и по возможностям.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий