模塊選擇藝術的個案研究
最近,一位客戶要求我為公司的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網頁上。
不幸的是,有時候“可靠”是不夠的。 在所有這些搜索之後,我必須考慮第三方服務。