🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

听说您也想创建一个跟宁皓网一样的网站

去年有一次跟朋友闲聊,他说他们公司(一家上海做 Drupal 开发的公司)经常会收到请求,要照着宁皓网做一个一样的网站,我自己也收到过这样的请求。如果你也有类似的想法,可以读下这篇文章,在这里会提供给你一个大体的思路,这样实施起来会更容易一些。

宁皓网是基于 Drupal 7 创建的一个 Web 应用,基本上用到的功能全部来自 Drupal 核心,以及社区贡献的模块。Drupal 的好处之一就是完全开放,社区里的模块全部都是免费开源的。Drupal 在扩展模块这方面的理念是,不去竞争,而是合作。也就是一种类型的模块最好只有一个,如果你想为 Drupal 开发一个模块,先去搜索一下,如果已经有类似的模块,加入进来,一起让这个模块变的更好,而不是去重新创建一个模块。除非你有完全不同的想法。

现在你知道宁皓网的核心是 Drupal 了,或许你可以先去看一下宁皓网的 Drupal 视频来了解一下 Drupal ,这会让你对 Drupal 有个大概的了解,你会知道它到底能做什么,其实在宁皓网上应用的功能,在我们现有的 Drupal 视频里都已经提到了。你只需要组织一下,再去试试看。宁皓网其实只有两个重要的功能,一个是视频的播放,第二个是会员在线支付以后自动开通权限,可以去在线观看视频。下面我再详细的解释一下。

内容结构

宁皓网有三个内容类型,视频,课程,博客。不同的内容类型存储不同类型的内容,每一种内容类型都可以拥有各自的字段,这些字段是内容的一部分,比如标题字段,正文字段,海报字段,视频文件字段等等。我用 视频 这个内容类型去存储视频内容,在这个内容类型上添加了视频文件字段,视频截图字段,视频字幕字段。然后用 课程 这个内容类型来组织整个课程相关的信息,课程的名称,介绍,海报,作者,时长,在这个课程内容类型上还有一个关键的字段,就是相关视频的字段,这个字段可以去关联与这个课程相关的视频内容。这样我们可以利用这种关系,比如可以在课程内容上面显示出所有的相关的视频内容。

打开宁皓网的某个课程,在这个课程页面上,你会看到一个相关的视频目录, 这个目录就是利用课程与视频之间的关系来创建的。也就是,你可以创建一个与当前查看的这个课程相关的视频的列表。创建这个列表可以使用 Drupal 的 Views(视图) 模块,在宁皓网的 《 Drupal 7 : 字段 视图 关系(下)》这个课程里,介绍了 Views 模块的使用方法。你需要知道使用 Views 模块创建内容列表,特别要了解下 Views 模块里的 上下文过滤器(语境过滤器) 的使用。使用 上下文过滤器 你才能在课程页面只显示与当前这个课程相关的视频内容。

视频播放

宁皓网的视频播放功能是很简单的,为 视频 内容添加一个文件字段,可以去上传视频文件,结合 JW Player 播放器,通过自定义模板文件的方法,让视频文件字段成为 JW Player 播放器里要播放的视频文件 。这种方法不是最好的,因为用户很容易找到视频文件的地址,把视频下载下来,不过并不是所有的用户只要知道视频文件的地址就能下载视频文件,Drupal 的私有文件系统,可以保证让拥有特定权限的用户才能访问私有文件系统里的东西。

如果你想把视频文件地址隐藏的好点,可以考虑使用 Media Server ,比如 Wowza,Adobe Media Server,Red5 之类的。它们可以实时为用户传输视频,也就是用户每次只下载视频的一小部分,这样在用户的客户端上,不会缓存完整的视频文件。

控制权限

Drupal 自身的权限控制做的已经非常好了,也足够的灵活。你可以为 Web 应用创建不同的用户角色,不同的用户角色可以拥有不同的权限,比如你可以让特定的用户角色查看指定的内容。我在宁皓网上添加了一个 付费会员 的用户角色,只有这个类型的用户可以查看视频内容。然后再去添加一个电子商务模块,比如 Ubercart 或者 Commerce 模块。用户支付成功以后,会自动赋予用户某个指定的用户角色,并且,你可以指定用户属于某个角色的时间,到期以后,会自动去掉用户的这个角色。

Commerce 模块相当灵活,它是用在 Drupal 7 上的一个电子商务模块,配合 Rules 模块,你可以为网站定制一系列的规则,也就是当发生什么的时候,去做什么样的事情。Ubercart 模块也是一个电子商务模块,它用起来更简单一些。

在宁皓网上,有一些视频是可以试看的,使用 Content Access 模块,你可以去设置单个内容的权限。

关于设计

我不喜欢浮夸,花俏,也不是动画,还有社交网络的粉丝。在宁皓网上,唯一的社交功能是评论,我曾想过去掉评论功能,不过怕你憋坏,还是保留了这个唯一的发泄口。对于设计,保持简单,也要保持个性,网站是你自己的,你想怎样都行,用户也会因为你的网站个性喜欢或者讨厌你。

总结

以上基本上就是宁皓网的核心了。三个内容类型,视频,课程,还有博客。博客类型里放的就是你现在看到的这篇文章,视频 类型的内容里存储视频文件,然后用 课程 内容来组织相关的视频内容。再用 Views 模块,去创建视频的列表,设置 上下文过滤器,在 课程 内容上只去显示出相关的视频列表。使用 Content Access 模块来控制单个内容的权限。用电子商务模块控制用户角色的购买还有到期的时间。

在实施的过程中,你会遇到些小问题,受点折磨以后,你都能解决掉它们。宁皓网是你的伙伴,不断完善的课程,可以让你少受点折磨 :)

工作

评论

宁皓改版喽
喜欢简单的美,呵呵
皓哥未来的可不可以再出些关于wordpress、drupal的整站案例?像最先的drupal6或drupal7字段视图关系课程那样建个电影网站一样什么的,期待中……
(跟皓哥学过课程后,挣点外快不是梦哦^_^ {纯属个人意见,不是广告 哼哼 跟皓哥学了不少东西,推荐一下})

谢谢啊,呵呵。简单的修改一点点。

无意间知道这个网站,很意外在北方的家乡有这样一个有技能、有想法并拿出来实践的人。敬佩。

谢谢啊:)

想做一个一样的, 是我说的

:)

感谢皓哥分享,这才是互联网!

佩服皓哥的气概,

皓哥相当给力!

请问 皓哥 会员到期了,你那头会发邮件给我,这个是怎么做到的?

是 Rules 模块,如果你用 commerce 做电子商务,可以更好的跟 Rules 结合在一起。

这是我找到的第二个牛X的技术分享教程了。(另一个是曹鹏)向博主学习了。

一起进步:)

我使用了content access 模块,控制页面内容显示。但是怎么让你的课程列表给匿名用户也显示呢?(当然无法点击)

课程列表是 views 生成的区块,在 views 里面,有一个选项,在 高级 - 查询设置 里面,勾选一下 停止 SQL 重写。这样 views 输出的内容不会检查用户的权限。

收到,谢谢,解决了

请问一下,使用什么模块可以控制下载?(让某个角色下载文件,如果把url给匿名用户,还是需要登录才能下载)

另外:王老师,能否设置评论有回复可以直接发email或者给提示。谢谢 :)

可以使用 Content Access 模块。

需要二次开发吗?还是在现成页面设置就可以?能指点一下吗?页面控制会,主要找不到点下载zip或pdf,怎么设置权限

你可以为内容添加一个文件字段,然后使用 Drupal 的私有文件系统存储这个文件,这样,上传的文件就不会在 Web 目录下面,也就是,通过浏览器,不能直接访问这些文件,而是通过 Drupal 去得到这些文件,这样你就可以利用 Content Access 来控制内容还有内容里面包含的存储在私有文件系统上的文件的权限了。

谢谢老师,搞通了。

王老师:一个课程下的相关课程我做出来了,但是一个视频下的相关课程是怎么做出来的?不是每一个视频需要加好多个相关课程吧?

不需要,你用 entity reference 这个模块。

宁浩网友相关的课程吗?

还没有单独的这个模块的教程。你可以先下载一个试一下。如果你理解好 Drupal ,你应该对这个模块会有点感觉。

浩哥,哪个网站输入网址之后可以看到网站使用的技术?我就记得是个国外网站。

是这个:builtwith.com

这么快就回复啦,感谢!

自己学的话,可能需要很长时间,皓哥可以推荐些靠谱的高手帮我建站吗?

嘿嘿。暂时还没有。

浩哥,关于视频嵌入jw player我还是不太明白,是不是要安装一个video模块呢?我是把视频放在七牛云上,网站放在新浪云上,七牛云给我返回的是一个视频地址,可是video模块是要用户自己上传啊,这块我不太明白,你是怎么做的

我其实是直接把视频放到了自己的服务器上。没有使用其它的云存储服务。 JW Player 我是直接定制的 Views 的模板,没有使用模块,视频是通过文件字段上传的。使用云存储应该是更好的方法。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点