Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Tutorial / Plone Introduction

Plone Introduction

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

Plone as CMS

1. 什麼是 Plone

Plone 是一套內容管理系統 (Content Management System, CMS),一種網頁式應用軟體,簡單地說,Plone 就是一部「快速架站機」,有了這套產品,不熟悉技術的人,也能輕鬆地管理網站會員和內容,享受多項功能特色,並符合 HTML5 CSS3 和 W3C AAA 規範。同類型的產品例子,像是 Drupal、Joomla!、SharePoint 等。

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

從技術層面來看,Plone 以 Zope 為基礎,整個系統由上百個 Python 套件組合而成,想像每個套件是可重覆組合的樂高積木,透過完整的教學文件,我們也可以建立自己的積木,用來擴充系統的功能。

2. Plone 特色

安裝 Plone 後,使用者可以線上編輯多種內容,內容格式包括文件、新聞稿、行事曆、書籤連結、多媒體檔案等,也可以利用 WebDAV 方式批次上傳檔案,再透過描述文字 (例如 metadata 資料)、斷字斷詞、關鍵字索引、全文檢索等服務,方便地找到想要的內容。除此之外,Plone 系統一直保有下列幾項特色:

  • 快速上手的安裝檔案

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

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

  • 直覺而一致的操作介面

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

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

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

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

  • 便利的內容編輯介面

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

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

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

  • 企業級的安全與功能

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

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

  • 搜尋引擎和多國語文支援

    Plone 搭配的多國語文支援工具,早期是 LinguaPlone,現在改版為 plone.app.multilingual 並由核心團隊維護,它能支援「由右到左顯示」的語系,像是阿拉伯文、希伯來文、波斯文等,而且「由右到左」與「由左到右」的內容能同時出現在同一網站。多國語文支援是 Plone 的強項之一,許多歐洲地區或聯合國組織選擇使用 Plone 架站,就是看上這項優勢。

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

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

Plone Powered Sites

3. Plone 應用場合

除了擁有 CMS 產品的優點外,Plone 也具備平台開發的彈性,有人在開發後,把它應用在 Blog、Issue Tracking、Network Monitoring、Video Streaming、高等教育 等場合。採用這項技術工具的知名單位,包括有美國中情局 (CIA)、聯邦調查局 (FBI) 和太空總署 (NASA) [1] ,麻省理工學院的 OpenCourseWare [2] 、Novell 公司,還有歐盟、聯合國、法國、巴西、紐西蘭等官方機構 [3]。更多的使用狀況,可參考清單列表

4. Plone 學習資源

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

Plone CMS Security Research: The Art of Plowning

5. 是啤酒也是綠茶

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

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

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

5.1 國外社群

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

5.2 台灣社群

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

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 說明。

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

有人針對雲端主機服務進行評比,例 Digital Ocean 支援同機房的 Private Networking 讓資料轉移更方便。

7. Plone 的沿革歷史

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

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

7.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 這顆閃亮巨星幕後了。

7.2 分層式網站架構

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

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

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

系統在開發擴充的過程,像是堆砌樂高積木,積木本身需要進行單元測試 (Unit Testing),模組結合時需要進行整合測試 (integration testing),以確保軟體品質和系統穩健度。

聽起來,一切似乎都很美好,但開發及測試過程包含無數次的重覆動作,Plone 使用哪些工具與方法來降低這個門檻呢?

7.3 以 Python 和 Zope 為基礎

Plone Outline如果要開發新功能,就需要額外學習 Zope 與 Python 的技術與知識。

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

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

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

7.4 持續轉型與演進

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 等洐生計畫的基礎,這些衍生計畫都有特定的專案實作規範。

7.5 Plone 發展里程碑

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

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

依照規劃,整個 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 系統,大幅改善內容編輯的使用經驗,未來像 ZCatalog 改用 Solr / ElasticSearch、加入 OAuth 支援、RelStorage 改進,這些方案都是可能的調整方向