模块选择艺术的个案研究
最近,一位客户要求我为公司的Drupal站点添加一项新功能:在浏览器中显示PDF文件。 当我浏览drupal.org上的选项时,我意识到这是一个完美的机会来记录我选择新模块时的实际决策过程。 我一直在说明智地选择模块 ,但现在你可以看到我认为这在现实生活中的作用。
定义你想要的
第一步是定义你想要的。 就我而言,我想要:
- 能够在Web浏览器中查看PDF文件,与此示例类似。 客户可以上传公司通讯的PDF文件,游客可以轻松阅读。
- 该网站是Drupal 7 ,因此该模块需要匹配该主要版本 。 (Drupal 7已经出现一段时间了,所以如果一个模块开发者还没有推出Drupal 7版本,他们可能不会。)
- 虽然客户没有具体说明,但我也想避免依赖第三方服务。 对于视频,我很高兴将内容发布到YouTube或Vimeo,然后将其嵌入到Drupal站点,但对于PDF,我不认为可能的额外曝光量会超过潜在的麻烦,破损和费用。 但是,如果这是唯一的选择,我可以接受第三方服务。
- 尽管我希望避免第三方服务,但我知道我的选择可能需要第三方Javascript 库 。 虽然这会为未来的升级增加额外的步骤,但我通常会更喜欢运行自己的图书馆副本,而不是依赖第三方服务。
- 我想尽可能保持模块的轻量级和特定性。 我不想介入一些全新的处理或组织媒体文件的方式。 我想要更类似于Colorbox的东西,它可以放大图像以获得更好的观看效果,但仍与您选择管理图像文件的方式完全无关。 我有一个预感,这个图书馆将pdf.js,但我打开其他的可能性。
- 像往常一样,我想遵循选择Drupal模块的一般准则。 基本上,选择一个已被几千人使用的模块(如果可能的话)一段时间,具有最少的依赖关系,这似乎是由一个积极的开发人员维护的,他们计划继续支持该项目未来, t需要许可费用。
在Drupal.org上搜索
考虑到这些目标,下一步就是在Drupal.org上简单搜索。 有时间跳进Module Goodness的球场。
"比较" PDF模块的页面
我的第一站是(或应该是),这个页面:PDF查看器模块的比较。 Drupal.org拥有优秀的文档页面传统,概述了同一空间中各种模块的优缺点。 有一个比较页面的中心列表,但他们也洒在整个网站。
PDF比较页面包含四个PDF查看器模块。 我会在这里介绍他们以及我从搜索中找到的其他人。 我将从我决定跳过的候选人开始。
现在让我们深入探讨这些模块为什么(或者大部分没有)为这个项目工作的具体细节。
文件查看器
File Viewer使用Internet Archive BookReader,这让我很感兴趣,因为我是Internet档案迷。 每次我去那里,我都会感到恐惧的痒痒,并在我能从以太汲取的书籍山上压倒。
话虽如此,示范网站对我来说有点难看。 我可能会忍受它,但是当我的客户看起来更加时尚时,我怀疑客户会这么做。
另外,在第二次看项目页面时,我看到了顶部的大胆公告: 此模块已正式移至PDF模块 。 很公平。 安装少于400个,与更流行的PDF模块(我们稍后会介绍)合并,似乎是一个很好的举措。 切勿下载已合并/移动/放弃的模块。
Google Viewer文件格式器
谷歌浏览器文件格式化器听起来像这样:一种使用Google文档在网页中嵌入文件显示的方式。 尽管我喜欢Google Docs的多功能性,但我的目标之一是保持独立于任何第三方服务。
此外,这个模块安装不到100次。
Ajax文档查看器
尽管“AJAX”是一个通用的Javascript术语,但Ajax Document Viewer却依赖于特定的第三方服务。 只有大约100次安装。 继续...
烫伤PDF
Scald PDF只有40次安装,但我不得不看一看,因为它显然是一个名为(是)烫伤的大型项目的一部分。 正如Scald项目页面所解释的那样:“ Scald是如何在Drupal中处理媒体原子的一种创新。”
这句话引出了两个巨大的红旗:“创新采取”和“媒体”一词与“原子”配对。 “原子”显然是“事物”的一个重用词,它本身就使它成为一面红旗。 Drupal对这些空洞的单词有兴趣: 节点 , 实体 , 特征 ......这个词越普遍,这些变化就越清晰。
当我向下滚动时,我的怀疑得到了证实。 我读到Scald如何基本改造我在我的网站上处理媒体的兴奋声明。
现在,事实是Drupal的媒体处理可能会使用一些重新创建。 烫伤不是这个领域唯一雄心勃勃的项目。 但是,到目前为止,安装量还不到1000台,我不想进入底层。
当然,到明年的这个时候,Scald可能会成为下一个观点 。 那会摇摆。 但它也可能是放弃的,有一小撮破碎的网站留下来哭泣。
现在,我想坚持一个不那么雄心勃勃和危险的解决方案。 请只显示PDF。 这就是我所问的。
暗箱
Shadowbox让我感到惊讶:它声称是显示各种媒体的单一解决方案,从PDF到图像到视频。 这并不像Scald那样广泛,因为它只会专注于展示媒体,而不会引入像“媒体原子”这样的全新概念。 但正如我所说,我已经喜欢Colorbox了。 我不想重新考虑这个决定。
然而,我注意到(有内心的呻吟),在超过16,000次安装中,Shadowbox可能是同一空间中更强大的替代品。 我不得不看看。
Shadowbox Drupal模块基本上是一个Javascript库的桥梁,Shadowbox.js,所以我查看了图书馆的网站。 在那里,我发现了两个继续前进的理由:
- 图书馆需要商业用途的许可费。 这笔费用够合理,但我尽量避免使用不是免费的开源软件 。
- 仔细搜索FAQ显示,与Drupal模块页面上的描述相反,PDFs 不是 100%被Shadowbox库支持的。 哎呀。 我检查过的好东西。
两位竞争者:" PDF" 和“PDF阅读器”"
除了剩下的部分,我现在来到了两个明显的竞争者:PDF和PDF阅读器
这两个项目有着重要的相似之处:
- 两者都安装了近3000次,远远超过了替代品(Shadowbox除外)。
- 两者都使用相同的外部Javascript库pdf.js。
差异呢?
PDF Reader也可以选择Google Docs集成。 在这种特殊情况下,我认为我的客户可能会喜欢这样,所以我喜欢有这个选择。
同时, PDF被标记为寻求共同维护者(s)。 这可能表明开发人员很快就会放弃该项目,但另一方面,最近一次提交是在一周前完成的,所以至少开发人员仍然活跃。
另一方面, PDF阅读器被标记为主动维护,但最近的提交是一年前。
没有一个明确的赢家,我决定对它们进行测试。
测试竞争者
我在我的现场网站上复制了两个模块。 (无论组件出现多么稳固和无害,请不要在活动网站上先尝试它,否则可能会破坏整个网站。)
我偏向于PDF阅读器 ,因为它似乎有比PDF更多的选项(如Google文档)。 所以我决定首先尝试PDF ,以避开它。
PDF失败:需要编译?
但是,当我安装PDF并阅读README.txt时,我发现了一个我曾经看到但在项目页面上被忽略的问题。 出于某种原因,这个模块似乎需要您手动编译pdf.js。 虽然项目页面显示这不一定是必需的,但是README.txt表明它是。
由于PDF Reader会使用完全相同的库而不需要这一步,因此我决定首先尝试它。 如果它不起作用,我总是可以回到PDF并尝试手动编译pdf.js。
PDF阅读器:成功! 有点。
所以,终于,我尝试了PDF阅读器 。 该模块提供了用于显示文件字段的新窗口小部件。 您可以将文件字段添加到所需的内容类型 ,并将窗口小部件类型设置为PDF阅读器。 然后,您创建这种类型的节点并上传您的PDF。 PDF出现嵌入在页面上的“框”中。
您可以通过再次编辑内容类型并更改字段的显示设置来尝试不同的显示选项。
我发现每个显示选项都有优点和缺点:
- Google文档阅读器的嵌入效果很好,但是当我点击它以全屏显示时,我终于在Google Docs页面上找到了一个Google Docs页面,该页面已经超过了我的速率限制。 哎呀。 如果我将该模块连接到支付的Google Apps帐户,这可能会更可靠,但我没有打扰,因为我确信我的客户不喜欢显示器。
- pdf.js选项在Firefox和Chrome上运行得非常好。 但是,当我启动Internet Explorer时,该框出现空白。 显然,这是pdf.js本身的问题,而不是PDF阅读器模块。 我想我应该预料到这一点,因为pdf.js是由Mozilla开发的,Internet Explorer本身就是......。 尽管如此,我还是很失望,我没有想到要确认pdf.js能够在所有浏览器中可靠地工作。
- 嵌入选项是最可靠的。 这实际上是在网页上的一个框中运行Adobe Reader。 我的Firefox仍然倾向于运行pdf.js,但我认为这是一个浏览器设置。 无论哪种方式,只要访问者使用Firefox或Adobe Reader等PDF阅读器,就会显示PDF。
因此,最终,我的解决方案是使用PDF阅读器和Embed显示选项。 该选项允许我将PDF附加到Drupal节点,并可靠地将其显示在Drupal网页上。
不幸的是,有时候“可靠”是不够的。 在所有这些搜索之后,我必须考虑第三方服务。