[РЕШЕНО]Ссылка на скачивание файла в собственном модуле

Главные вкладки

Аватар пользователя bifrost bifrost 2 декабря 2011 в 15:22

Здравствуйте. Появилась необходимость на своей форме (формируется программно) добавить ссылку на файл для закачки (доступ к файлам публичным). Правильно ли я думаю, что для того что бы у пользователя открылся диалог на закачку, нужно написать своё, нечто похожее на file_download(), используя file_transfer, кто-то уже писал такое? Спасибо.

Комментарии

Аватар пользователя bifrost bifrost 7 декабря 2011 в 19:57

Это решение подойдёт только тем, кто не хочет ставить дополнительные модули и ссылку на скачивание нужно разместить один раз. Вот пример кусочка кода:

<?php
/**
 * Implementation of hook_menu().
 */
function mymodule_menu() {
  
$items = array();
  
$items['mymodule/download'] = array(
                                    
'title'            => t('Url mymodule download'),
                                    
'page callback'    => 'mymodule_download',
                                    
'access arguments' => array('access mymodule download'),
                                    
'type'             => MENU_CALLBACK,
                                   );

  return 

$items;
}

function 

mymodule_download(){
    
    
$mymodule_download_url file_create_path(MYMODULE_URL);

    

$headers = array();

    if (

file_exists($mymodule_download_url)) {

    

$headers   = array(
                         
'Content-Type: force-download',
                         
'Content-Disposition: attachment; filename="' MYFILE_NAME '"',
                         
'Content-Length: ' filesize($mymodule_download_url),
                         
'Content-Transfer-Encoding: binary',
                         
'Pragma: no-cache',
                         
'Cache-Control: must-revalidate, post-check=0, pre-check=0',
                         
'Expires: 0',
                         
'Accept-Ranges: bytes'
                       
);

      

file_transfer($mymodule_download_url$headers);

    }
    else{
      return 

drupal_not_found();
    }
}
?>

Код позаимствован из модуля download_file