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。