Drupal7音频播放器下载
时间:2020-03-05 15:25:32 来源:igfitidea点击:
在这篇文章中,我想解释如何有一个下载按钮的音频文件连同一个音频播放器。
我的目标是允许用户使用媒体播放器播放音频文件,也允许他们使用按钮下载文件。
为此,我创建了一个名为"Media"的内容类型,其中"field_audio"作为音频文件字段。
我选择了Mediafront模块作为音频播放器。
我希望设置音频播放器不会那么困难,所以让我们进入编码部分。
我使用hook_menu()注册drupal路径来定义如何处理音频下载链接。
function kf_menu() { $items['download/media/%file'] = array( 'page callback' => 'kf_download_file', 'page arguments' => array(2), 'access arguments' => array('view media'), 'type' => MENU_CALLBACK, ); return $items; }
代码的重要部分在菜单回调中,因为这部分代码使用HTTP将文件传输到客户机。
function kf_download_file($file) { if($file) { file_transfer($file->uri, array('Content-Type' => 'audio/mpeg', 'Content-Disposition' => 'attachment; filename="' . $file->filename . '"', 'Content-Length' => $file->filesize)); } }
因为我们告诉drupal如何处理"download/media/%file"路径,所以我们需要为节点生成一个下载链接。
我使用hook_node_view()创建并显示下载链接。
function kf_node_view($node, $view_mode, $langcode) { if ($node->type == 'media' && $view_mode == 'full') { if (isset($node->field_audio[LANGUAGE_NONE][0]) && !empty($node->field_audio[LANGUAGE_NONE][0])) { $file = $node->field_audio[LANGUAGE_NONE][0]; $file_fid = $file['fid']; $audio_download = l(t('Download this file'), 'download/media/' . $file_fid, array('attributes' => array('class' => array('audio-download')))); $node->content['download_link'] = array( "#markup" => $audio_download, "#weight" => 10 ); } } return $node; }
最后,我们需要在node\ view函数中返回$node。