用 Drupal 创建音乐网站

在《 你想要什么样的网站 》这个有点扯淡的短文里,有朋友想要一个音乐网站,我们可以通过 Drupal 来做出类似的网站,下面闲散地说一下。

内容

  • 艺术家
  • 专辑
  • 曲目

专辑页面

注意上图里面的专辑时长,还有专辑曲目,并不是手工输入的静态文字,而是使用视图模块计算出来,创建视图找出与当前专辑相关的曲目,根据这些相关的曲目的长度计算出曲目的数量还有总共的时长。

内容类型
艺术家,专辑。创建这两种内容类型,并且添加需要的字段。创建内容类型不需要安装第三方模块,直接使用 Drupal 自带的模块就行,字段也一样。不过我们可以安装一个 date 模块,为专辑类型的内容添加一个日期字段,好处是可以利用这个字段去做一些事,比如使用日历的形式来展示专辑的发布情况,在专辑列表里使用日期字段排序等等。

需要的第三方模块:date
视图配置
文件
曲目。曲目就是一些音频文件,文件对于 Drupal 来说也是一种实体,所以我们并不需要创建一个叫曲目的内容类型,再为这个内容类型添加可以上传音频文件的字段。我们可以直接安装 media 模块来管理上传的文件,再安装 file_entity 模块,让文件成为一种实体,不同的文字类型就相当于是一种内容类型,比如音频,视频,图像等等。

文件的无数据就是一些跟文件相关的信息,比如对于图像来说,图像的大小,宽度,高度等等,这些就是图像文件的元数据。默认上传文件 Drupal 会为我们保存这些信息。曲目是音频文件,我们需要获得音频文件的相关信息,比如音频的码率,时长等等,想要得到这些信息我们需要安装 getid3 模块。

需要的第三方模块:media,file_entity,getid3

内容关系

曲目组合成专辑,专辑属于艺术家。艺术家,专辑,曲目,这三种类型的内容之间需要有一定的关系,这样我们才能在专辑的页面添加相关的曲目,在艺术家内容的页面上显示相关的专辑。

创建内容之间的关系, Drupal 提供了一些方法,你可以使用 entityreference ( 实体引用 )模块,它可以创建实体之间的关系,内容与内容,文件与内容,用户与文件 (你能想到的任何的关系组合)... 另外,你可以安装一个 inline_entity_form 模块,这样在为实体添加实体引用字段以后,选择 inline_entity_form 作为选择引用实体的控件,你可以在实体上直接创建与编辑想要与它相关的其它的实体。比如在专辑内容的编辑界面上,直接创建曲目内容并与之相关(经测试,我猜还不支持直接创建文件类型的实体)。

或者你也可以使用我们在 《 Drupal 7 字段,视图,关系 》课程里面介绍的 relation 模块。这个模块可以替代 entityreference 模块来管理内容之间的关系。relation 模块更活动一些,你可以创建不同类型的关系,为关系添加字段。

如果使用 relation 模块来管理内容关系,你可能需要创建的关系类型有:

曲目 - 专辑( 文件与节点之间的关系 )
专辑 - 艺术家( 节点与节点之间的关系 )

使用 relation 模块创建内容关系,可以用 relation_select 模块,它可以让我们自己设计一个视图,然后在内容编辑界面上,直接搜索想要相关的内容。

关系选择

曲目的播放

播放曲目要有好的体验,并不简单,思路是这样的,去安装一个播放器,比如 mediaelement ,jwplayer 之类的 HTML5 播放器,然后你可以为曲目这种音频文件类型选择使用播放器来播放他们。你要解决的问题是,可以让用户随意添加曲目到一个列表里,统一播放,我想这部分功能,可以使用 views ,views_bulk_operations,flag,rules 模块,不过还需要加上你的工作。

flag 可以创建标示,来标示实体(内容,文件,用户),我们可以为用户创建一个标示来标示文件,使用 views 创建的曲目列表,再加上 views_bulk_operations 的批量操作功能,用户选中一些曲目以后,点击批量操作的动作(可以使用 rules 模块来创建需要执行的动作)会触发标示所有选中的曲目,然后把用户带到一个播放器页面,这个页面是用 views 视图创建的列表,列表的内容就是当前使用所有标示的曲目。你可以在这个页面上加上一个音频播放器。

标签: 
Drupal

评论

哈!不错不错!
nice...希望多出点drupal的项目!期待!
百度说Drupal是给经验丰富的程序员用的~所以如果是什么都不懂的新手想建一个音乐网站或者类似豆瓣的网站 适合用Drupal么?
百度说的对,但是它没说完整, Drupal 同时也适用于什么都不懂的新手。学嘛。
来多点drupal 的干货~
好东西啊
HI 宁皓,看了你的这个介绍以后 有两个问题我一直没有实现出来 不知道是否可以得到回复: 1. 过滤标准里面的 文件:类型(=audio)是怎么选择出来的啊? 2. 字段里面的 文件:duration是怎么选择出来的啊? 以上两个问题我在我的Drupal7里面试了半天都没有找到 不知道可否得到回复。。。。 谢谢
另外 请问 音乐时长 你用的是什么类型啊?