Plone Introduction

By marr, Last updated Apr 14, 2012

本文件介紹 Plone 的基本資訊。

關於 Plone 系統的安裝與啟動技巧,可參考 Plone Installation 文件說明。

1. 什麼是 Plone

Plone 是一套內容管理系統 (Content Management System, CMS),一種網頁式應用軟體,簡單地說,Plone 就是一部「快速架站機」,有了這套軟體,不熟悉技術的人,也能輕鬆地管理網站會員和內容,類似的工具例子有 Drupal、Joomla!、SharePoint 等。

img/ContentTypesIntoPlone.png

1.1 什麼是內容管理

所謂的「內容管理」,範圍包括文件、圖片、多媒體等檔案型式,這些文件資料的編輯、發佈、搜尋、展示等管理動作,就是內容管理的主要工作,它所牽涉的功能包括會員管理、群組權限分派、文件編輯、工作流程、搜尋引擎等,它們是知識庫 (Knowledge Base) 或入口網站 (Portal) 的核心功能。

下載 Plone 安裝後,使用者可以線上編輯多種內容,內容格式包括文件、新聞稿、行事曆、書籤連結、多媒體檔案等,也可以利用 FTP 或 WebDAV 方式批次上傳檔案,再透過描述文字 (例如 metadata 資料)、斷字斷詞、關鍵字索引、全文檢索等服務,方便地找到想要的內容。當然,也可以新增合適的外掛模組,擴充想要的延伸功能。

img/PloneOutline.png

除了擁有 CMS 產品的優點外,Plone 也具備平台開發的彈性,應用例子包括 blog、issue tracking、network monitoring、video streaming 等場合。採用這項技術工具的知名單位,包括有美國中情局 (CIA)、聯邦調查局 (FBI) 和太空總署 (NASA) [1] ,麻省理工學院的 OpenCourseWare [2] 、Novell 公司,還有歐盟、聯合國、法國、巴西、紐西蘭等官方機構 [3] 。更多的採用單位清單,可參考 http://plone.net/ 網頁資料。

[1]NASA Science 是採用的網站之一,可造訪 http://nasascience.nasa.gov/ 網址。
[2]OpenCourseWare 在 http://ocw.mit.edu/help/faq-technology 網頁說明採用 Plone 系統。
[3]Why Plone Works Well For Government Agencies
img/PlonePowered.png

1.2 分層式網站架構

Cal Henderson 在 Building Scaleable Web Sites 書中表示,「好的網站系統,應該像一個英式疊層蛋糕 (English trifle)。」也就是,網站系統應以分層方式,提供開發人員一個強固而延展的架構。

http://www.thinkvitamin.com/images/articles/features/cal/trifle.jpg

Plone 系統以分層方式設計,主要分成三大層,各自負責不同功能:

  1. 資料儲存: 預設使用物件資料庫,也可以結合 SQL 資料庫或檔案系統。
  2. 邏輯運算: 處理流程控制判斷或資料轉換的工作。
  3. 外觀呈現: 負責使用者介面或資料呈現的工作。

系統在開發擴充的過程,像是堆砌樂高積木,積木本身需要進行單元測試 (unit testing),模組結合時需要進行整合測試 (integration testing),以確保軟體品質和系統穩健度。聽起來,一切似乎都很美好,但開發及測試過程包含無數次的重覆動作,Plone 使用哪些工具與方法來降低這個門檻呢?

1.3 以 Python 和 Zope 為基礎

從技術層面來看,Plone 以 Zope 和 Python 為基礎,如果要開發新功能,就需要額外學習 Zope 與 Python 的技術與知識。

Zope 是 Z Object Publishing Environment 的縮寫,一套以 Python 程式語言撰寫的 Web Application Server 框架及實作品,它提供的服務包括網站伺服器、資料庫、會員及權限管理、搜尋引擎等,這些服務元件都以 egg 型式 (類似 Java 的 jar 型式) 存在,它們就扮演樂高積木的角色。

開發人員可以「站在巨人肩上」設計自己的模組或應用程式,建造屬於自己的樂高世界,而 Plone 就是架構在 Python 和 Zope 基礎之上,著重於內容管理領域的應用程式。

img/SystemOutline.png

Plone 引用一套稱為 buildout 軟體工具,在建置專案開發環境的過程,它能快速產生程式碼樣版範例,設定基本的系統選項參數,執行程式碼測試和 subversion 上傳,大幅降低開發的門檻,並提昇程式碼與軟體工具再利用的效率。

2. Plone 的特色

僅管 Plone 的發展依附在既有的軟體上,在整體而言,Plone 系統一直保有下列幾項特色:

2.1 快速上手的安裝檔案

Windows、Linux、Mac 環境都具備自動安裝檔,協助使用者第一次安裝就上手。

Installer: Running Windows Installer

以 Windows Installer 為例,下載 Plone-4.?.?.exe 檔案執行後,會出現常見的安裝畫面。設定管理員帳號密碼後,一路點擊「Next」按鈕就能完成安裝。

Installer: Setting Administrative Account

執行 Plone 後,可以透過 Controller 來管理 Plone 系統的啟動與停止,設定系統的埠號。

Plone Controller

想在 Windows 環境享受更多便利特性的朋友,別錯過 Enfold Systems 公司提供的工具,例如 Enfold Desktop 軟體可以讓你結合 MS Office 來管理內容。

2.2 直覺而一致的操作介面

依照權限與角色的不同,系統會提供不同的功能,造成使用者看到略為不同的畫面,但整體介面是直覺而一致的。

Interface Consistency - View from an Anonymous Guest

未登入的訪客會看到上述的畫面,包括帳號登入與行事曆的方框。

Interface Consistency - View from an Authenticated User

登入後的使用者會看到 My Folder 之類的管理功能。

Interface Consistency - View from a Manager User

管理員則會看到更多管理功能,例如 Site Setup、Manage portlets 等。

2.3 便利的內容編輯介面

Plone 內建「所見即所得 (WYSIWYG)」網頁編輯器,預設工具稱為 TinyMCE,也可以換用其他工具,例如舊版的編輯器稱為 kupu。

TinyMCE

藉由網頁編輯器,使用者可以輕鬆地編輯 HTML 文件,包括設定文字風格 (例如粗體、斜體)、對齊方式、條列方式、連結方式、插入圖片等。

kupu toolbar

Plone 可以啟用即時編輯 (inline editing) 的功能,讓使用者可以快速編輯特定的資料欄位,例如點擊一下標題欄位,就可以直接修改標題的內容,而不必載入所有的內容資料。

kupu editor

2.4 企業級的安全與功能

除了操作便利的優點外,Plone 的安全性極高,在 National Vulnerability Database 只發現少數的安全缺失,相對的,像 PHP 的 CMS 產品就發現許多安全缺失。

Plone 重視昇級過程的相容性,也具備企業級應用的功能彈性,像是工作流程、規則觸發引擎、多國語文支援、版本控制、快取設定、系統昇級等。想要維持網站的穩定及高延展性,可以採用 Entransit 軟體,它也能夠與 .Net、Java、PHP 等開發環境結合。

img/ecoagents.png

以 Plone 提供的 LinguaPlone 多國語文支援為例,包括能夠「由右到左」顯示的語系,像是阿拉伯文、希伯來文、波斯文等,而且「由右到左」與「由左到右」的內容能同時出現在同一網站。多國語文支援是 Plone 的強項之一,許多歐洲地區或聯合國組織選擇使用 Plone 架站,就是看上這項優勢。

img/LinguaPlone.png

Plone 開發者在改善介面美觀之餘,也重視操作親和度,並注意相容於網頁標準,例如,它符合 US Section 508 及 W3C's AA rating for accessibility 規範。

完整的功能特色,可參考 http://plone.org/products/plone/features 的介紹,其他詳細說明,可參考 LearnPlone 網站內容。

3. Zope 與 Plone 的沿革歷史

早期的網站伺服器,如果想要產生動態網頁的效果,使用 CGI (Common Gateway Interface) 是最常見的方式,同時,也會配合執行環境,搭配一個程式語言及資料庫軟體來存取資料,例如 Perl 和 MySQL 就是當時常見的方案。

Note

繼 CGI 之後,動態網頁廣泛使用 PHP 之類的方案,常見以 mod_php 型式與 Apache 伺服器一起運作。

Zope 的作者 Jim Fulton 是一位 Python 程式好手,1996 年之際,他受邀擔任網站 CGI (Common Gateway Interface) 程式設計的講師,初識 CGI 技術的他,並不滿意它的架構方式,重新以 Python 語言撰寫了幾個用於網站開發 (稱為網頁物件出版功能) 的模組 [4] ,後來在繼續擴充模組的情況下,Zope 的系統原型於焉誕生,Jim Fulton 並組成一家 Digital Creations 公司展開 Zope 的開發,接近 2000 年之際,Digital Creations 公司正式更名為 Zope 公司,專注 Zope 產品的商業化工作。

3.1 新聞出版系統為前身

Zope 系統最早是針對新聞媒體界的應用需求所設計,因此除了一般的會員管理 (membership management)、安全機制 (ACL management)、內容物件管理 (content object management)、編目與索引 (catalog and index) 之外,也很快納入版本管理 (version control management)、工作流程管理 (workflow management) 及版型主題 (theme and skin) 等服務。這些入口網站所必備的服務功能,初期稱為 Portal Toolkit (PTK),不久再改名為 CMF (Content Management Framework),變成獨立的開放源碼專案,由於 CMF 擁有良好的延伸彈性,引發更多奠基在 CMF 之上的擴充專案 [5] ,Plone (最早稱為 CMFPlone,用來取代 CMFDefault 的角色) 就是這類擴充專案中的佼佼者。

CMF 是一個在 Zope 開發環境之上的入口網站服務架框,由於它的開發焦點是在基礎服務模組的研發與測試,長久以來都有不夠穩定,介面不夠美觀、易用度不高的缺點,Plone 專案計畫的主持人 - Alan Runyan 與 Alexander Limi,便接手解決上述的問題,沒想到這樣的改善構想,迅速吸引廣大開發者的認同與參與,Zope 與 CMF 便退居 Plone 這顆閃亮巨星幕後了。

[4]這些模組分別稱為 Bobo、Document Template、BoboPOS。
[5]以 CMF 為基礎的擴充專案包括 NuxDocument、Silva 等。

3.2 轉型與躍進

Zope 與 Plone 仍然不停在演化,目前,兩者的改版步調是獨立前進,但期待趨向一致 [6] 。2005 年之際,Zope 的版本開始分成 Zope 2 與 Zope 3 兩大體系,Zope 3 是從頭撰寫的全新軟體,它導入新的 Component Architecture 設計框架,優點之一是讓開發流程能與 Python 社群緊密結合。Zope 3 初期和 Zope 2 並不相容,但利用一項稱為 Five 的橋接模組,讓 Zope 2 也能應用到 Zope 3 的技術,例如 interface、adapter、view 等元件,達到逐步轉型並維持相容度的效果。

最新版的 Zope 實作成果,以 Zope Toolkit 為名繼續發展,它的理念是維護一份核心函式庫,但並不提供特定的專案實作規範,因此成為 BlueBreamGrok 等洐生計畫的基礎,這些衍生計畫都有特定的專案實作規範。

[6]http://encolpe.wordpress.com/2008/10/06/why-plone-architecture-must-change 簡介 Plone 的過去與未來

4. Plone 社群現況

CMS 產品超過數十種,在這個競爭激烈的市場 [7] ,Plone 社群過往的表現如何呢?

[7]CMS Watch 整理的 Content Technology Vendor Map 列出了主要的 CMS 供應商,InfoWorld 整理的 Open Source CMS 評比了五項產品,Idealware 整理的 Comparing Open Source Content Management Systems 評比了四項產品。
[8]O'Reilly 與 OSDir 合辦 "Open Source Goes to COMDEX" 活動網址 http://www.oreillynet.com/contest/comdex/
[9]Packt 舉辦 "Open Source CMS Award" 活動網址 http://www.packtpub.com/award
[10]http://blogs.onenw.org/jon/archives/2007/06/16/plone-blows-away-commercial-and-open-source-competition-in-cmswatch-review/

目前 Zope 和 Plone 開放源碼專案分別由 Zope FoundationPlone Foundation 維護與開發,並有全球 [11] 超過 300 家商業公司 [12] 提供客製化開發服務,截至 2008年 10月為止,超過 200 名開發者活躍地更新核心原始碼 [13] ,並有網友每月主動舉辦 Plone Tune-Ups 線上活動。

[11]網址 http://plone.org/support/region 列出不同語文的 Plone 討論群組。
[12]網址 http://plone.net/providers 提供 Plone 商業服務廠商名單。
[13]網址 http://www.vimeo.com/2075738 提供 code swarm 影片。

4.1 Plone 發展藍圖

2007 年八月 Plone 3.0 推出,特色之一是導入文件版本管理功能,使用者可以鎖定線上版本,在新的工作副本 (working copy) 上編輯,完稿後再正式更新線上版本,因為編修過程都有歷史記錄,使用者還可以復原成之前的舊版本。

http://plone.org/documentation/manual/plone-3-user-manual/managing-content/locked.png

依照規劃,整個 Plone 3.x 依舊屬於 Zope 2 體系,著重於軟體包裝的改善,例如 installer、egg、buildout 等工具,還有整合了 AJAX 技術,包括 WYSIWYG Editor、 jQuery 等工具。舉例來說,從 Plone 3.1 開始,模組目錄名稱從 Products 換成 products,就是要提醒使用者移往新的系統架構,更多資訊可參考 Plone 3.2: What's New 簡報內容。

這些新的工具與技術,經過引用及測試後,核心模組已大幅穩定,2010 年九月正式問世的 Plone 4 是上述成果的里程碑,底層改用 Python 2.6 執行,反應速度明顯提昇,搭配新的樣版引擎和快取模組的話,效能還會更好。

相對來說,Plone 4 是個改進式的產品,Plone 5 則是革命式的里程碑,它將引進 Deco/Tiles 系統,大幅改善內容編輯的使用經驗。

Version Released Date Major Features
2.0.5 2004/12/01 Printer Stylesheets
2.1 2005/09/06 Archetype, selectable_view
2.5 2006/06/17 PAS, Zope3 Views
3.0 2007/08/21 GenericSetup, Staging, Workflow
3.1 2008/04/22 Portlet Manager, buildout
3.2 2009/02/07 egg, installer, jQuery update
3.3 2009/08/19 maintenace release
4.0 2010/09/01 Python 2.6 based
4.0.2 2010/11/23 bugfix release
4.1 2011/08/09 Zope 2.13 built-in WSGI support

4.2 Plone 書籍與文件

http://plone.org/documentation 可以找到所有 Plone 書籍和技術文件,依照不同的讀者屬性,由淺到深,簡介書籍如下:

5. 是啤酒也是綠茶

如果你是 PHP 程式員,或許會這樣想:「Plone 只是一個 CMS,我用 PHP 可以開發包括 CMS 在內的各種網頁應用程式。」有趣的是,既有的資訊系統,幾乎都是用來管理內容,廣義地看待「內容」,它就是資訊系統的核心,以出版產業為例,管理的內容就是媒體素材,以金融產業為例,管理的內容就是財務報表等。

撇開程式語言的差異,程式員會關心快速開發和系統延展性的議題,這正是 Plone 開發者致力提昇的重點。另外,Sean Kelly 也以資深 PHP 程式員的角度,在 Graduating from Spaghetti to Sushi 影片裡,說明他是如何看待 Python 和 Plone。

Plone 是一個 CMS 產品,但也保留功能彈性,讓使用者能夠拿它作為核心開發平台,實現自己的創意。有哪些例子呢?

5.1 國外社群

  • 在紐約市,一群愛好 open source 的朋友發起 The Open Planning Project 活動,他們架網站、寫程式、線上討論,以 Plone 為核心工具,結合 pylons、wordpress、mysql 等軟體,目的是讓全體市民能夠發聲、組織、分享,創造更好的公民生活。
  • EngageMedia collective 提供影片分享的網站軟體,以澳洲、印尼等地為服務據點,收錄社會正義與環保議題的紀錄片。
  • 一群關心 Plone 商業應用的朋友,藉由 GetPaid 軟體計畫,讓 Plone 能提供線上募款、購物車等功能。
  • 索羅斯基金會所支持的 Open Society Institute (OSI) 使用 Plone 技術,並結合 Python 及 Repoze 開發架構,建構了 KARL 資訊系統,這套系統支援 OSI 組織內部及社群經營之用。

幾個採用 Plone 技術的社群專案,整理列表如下:

Project Description
CoActivate.org a platform for social activism
WebLion a customized CMS for Penn State
Plumi a video sharing content management system
Plinkit Collaborative a multi-state cooperative supporting public libraries
Objectis a free Zope and Plone application service
PloneGov Initiative a collaboration for public organization
Economics E-Journal an open-access, open-assessment e-journal
Connexions a place to view and share educational material
SchoolTool gradebook, attendance, calendars and more
GetPaid for Plone a framework for online payments
ZenOSS Core a software to monitor netwrok, systems, application

5.2 台灣社群

台灣 Plone 社群活動通常出現在 Python 或 Open Source CMS 的宣傳管道裡,台北市經常舉辦 World Plone Day (全球 Plone 日) 活動,預計每年四月間固定舉行。

台灣位於亞太地區,這個區域的社群消息,可從 http://lists.plone.org/mailman/listinfo/plone-asiapacific 取得。

台灣使用 Plone 架站的組織單位列表部份如下:

單位名稱 網址
國泰綜合醫院實證醫學中心 http://ebm.cgh.org.tw/
台灣樂業協會 http://www.careergo.org.tw/
中山大學資工系 VLSIDA Lab http://vlsida.cse.nsysu.edu.tw/
裕隆行國際運流公司 http://www.asl-tpe.com/
大興土木技師事務所 http://www.daxing.com.tw/

台灣使用 Plone 架站的個人列表部份如下:

網站名稱 網址
Plone 示範 http://plone.python.org.tw/
劉醫師聊整形 http://ps.drliu.idv.tw/
四維之家 http://www.cine.idv.tw/

6. 使用 Plone 的考量因素

僅管 Plone 具備許多優點,使用前還是該評估 Plone 是否合適實際的應用場合。在 Does Plone do what I'm looking for? 一文裡,列舉使用 Plone 的考量因素,而最簡化的評量方式,就是先下載安裝一個 OOTB (Out-Of-The-Box) Plone 環境。

硬體需求也是重要的評估因素,在 http://www.openengagement.com/resources/cms-tools/help-center/openengagement-dms/installing-the-openengagement-dms/hardware-requirements 文中說明了實務上的需求概況。

6.1 成本效益分析

OOTB 就是「隨裝即用」的狀態,完全使用預設功能來啟動 Plone 環境,通常是在 30 分鐘內體驗 Plone 的主要特色。網路上找得到不少教學影片,例如搭配閱讀 Plone3 InstallationPlone BasicsEditing with Plone 等,更多教學影片可從 http://plone.org/documentation/movieshttp://plonetv.blip.tv/ 網址取得。

然後,比較預設功能和實際需要之間,有多大的差距,再到 Plone ProductContentManagementSoftware.info 網址,查詢是否已有類似的模組產品滿足你的需求。再次提醒,也記得逛逛 4.2 Plone 書籍與文件 資源。

如果把「隨裝即用的情境」當作是「泡麵或微波食品」,那麼「加裝擴充模組的情境」像是「買料回家煮雜菜火鍋」,即使比泡麵來得複雜,但熟練之後,總能按部就班完成,至於「開發客製化程式的情境」,就像是大廚料理一般,包括食材、醬料、廚具等,每樣都要掌控或講究。至少努力讓自己能煮雜菜鍋吧,花點小工夫,就能獲得大滿足,很值得的。

持續學習 Plone 的過程,也會認識到 Python 程式語言,有助日後再學習 Google App Engine、Django、Turbo Gears、Pylons 等工具,其妙不可言,只待有緣人親身體驗。

至此,你已經完成最基本的功課,剩下的問題,可以在下列管道提出:

6.2 在地化資源

如果架設的網站以正體中文為主要語言,當然會關心在地資源的支援狀況,下列是一些範例:

6.3 代管主機

如果想在代管主機 (hosting service) 上執行 Plone,會是一項挑戰,因為台灣的 hosting serivce provider 並不主動支援 Plone,支援 Python 的也很少,想嘗試的朋友可優先比較 http://www.cloudocean.net/http://www.clara.com.tw/ 的方案。國外支援 Python 的代管主機雖然多,總有人會認為不方便,在 http://plone.net/hosting-providers 可以找到廠商清單,評估方式可參考 http://plone.org/documentation/faq/where-can-i-host-my-plone-site 或是 http://www.openplans.org/projects/plone-hosting/plone-app-engine 說明。

例如,到 PloudObjectis 可以直接申請 Plone 4 的免費主機空間,是最方便的管道之一,使用 PondCMS 可以和 Amazon Elastic Compute Cloud 結合,是需要花錢的方案,而 Google App Engine 雖然支援 Python 2.5.2 版本,但暫時只能利用 ContentMirror 工具把靜態資料放上 GAE。

Free Provider Link to Service Description
Objectis http://objectis.org/
Openia http://www.openia.com/services/free-plone
Bitubique http://bitubique.com/services/free-plone-website-hosting