2009/09/24

Changing Tabs in Plone

在 Plone Site 根目錄 (root folder) 所建立的項目,例如 (id = about, title = 認識協會) 目錄,它會自動以 tab 型式出現,就像下圖裡的 1。 http://www.contentmanagementsoftware.info/plone-book/navigation/plone-site.png
讀取各別文章時,會有 You are here: 的提示,如圖裡的 2。左方可以有 navigation portlet 導覽視框,如圖裡的 3。

我們也可以讓新增的項目,不要"自動"出現在 tab 位置,方法是從 Site Setup 點選 Navigation Setting 導覽設定,取消"自動產生"的設定值

完成上述的設定調整後,除了"首頁"之外,其他 tab 都不會自動出現。

接著,想再把"認識協會"加回 tab 位置,先進入 ZMI 到 portal_actions/portal_tabs 畫面,從右上方選 CMF Action 來新增

ID 欄位填 about。

http://lh4.ggpht.com/_BESgcgeL9eA/SsB-EugJnJI/AAAAAAAABJ4/DRt3vUUZauI/s800/cmf-action.png

再點選 about 進去填其他詳細資料,注意到 Permissions 欄位選擇 View,而且 Visual? 要勾選生效。

http://lh3.ggpht.com/_BESgcgeL9eA/SsB-E6br48I/AAAAAAAABJ8/YE0V5bccI9w/s800/portal_tabs-config.png

至此,我們在 portal_tabs 裡有兩個 CMF Action,分別是 index_html 和 about,還可以用 Up / Down 或 Top / Bottom 來控制順序。

http://lh5.ggpht.com/_BESgcgeL9eA/SsCB4hAu_jI/AAAAAAAABKA/xKQ8He2MfBc/s800/cmf-action-position.png

想要讓某個 tab 未登入前看不見,登入後才看得到,要在 Condition 欄位裡填 python: member,想要讓某個 tab 只有管理員才看得到,要在 Condition 欄位裡填 python:portal.portal_membership.getAuthenticatedMember().has_role('Manager')


以上說明參考自 http://plone.org/documentation/how-to/changing-tabs

2009/09/11

CMS Showdown for NPO

CMS Showdown for NPO 是個網站改造的觀摩賽,構想仿自「全能住宅改造王」,由 charlesc 開頭籌辦,招募 NPO 團體報名,訪談 NPO 的需求,最後由 Joomla, Drupal, Plone 組隊實作,並在 ICOS 2009 裡舉行。

其中的 Plone 隊伍來自日本 CMS Communications Inc. 成員,隊員介紹如下:


* 寺田學 (Manabu Terada)
o CMS Communications Inc. 總經理,過往十年工作領域在電子工程及系統工程,五年的 Zope/Plone 開發經驗,是日本 Zope/Plone 社群主要成員。現居千葉縣。
o Twitter: http://twitter.com/Terapyon
o Plone site show case (2009): http://www.osaka-u.ac.jp/ http://www.asean.or.jp/


* 永井孝 (Takashi Nagai)
o CMS Communications Inc. 首席工程師,開發 Zope/Plone 及 Google App Engine 應用程式,亦研究遠距學習系統。
o Website: http://ngi644.net/blog/


* 足立健誌 (Takeshi Adachi)
o Scient UX Inc. 設計師及網站顧問,大學畢業後到美國洛杉磯學習平面設計,2002年回到日本大阪任職網站設計工作,五年的網站設計經驗,專長是使用者操作經驗的改善。興趣是吉他、貓、電影。
o Blog: http://www.thinkcreative.jp/blog/
o Google Profile: http://www.google.com/profiles/takeshi.adachi


* 宮本加奈子 (Kanako Miyamoto)
o 自由工作者,專長是 (X)HTML/CSS 程式設計。興趣是吹奏薩克斯風。
o Website: http://balanced.jp/
o Twitter: http://twitter.com/ayaxx


* 渡邊あや (Aya Watanabe)
o 自由工作者,日本網站設計社群 WebSig24/7 主要成員,專長是視覺設計,HTML 及 FLASH 程式設計。
o Website: http://balanced.jp/
o Twitter: http://twitter.com/ayaxx

2009/08/28

Display Portlets Where You Want

在 Plone 裡 portlet 通常只顯示在網頁畫面的兩側,如果想要任意調整 portlet 的顯示位置,利用 ContentWellPortlets 模組是個方式。
測試這模組的最簡易方式,是先下載 Plone 最新版 Windows Installer,假設安裝在 C:\Plone 目錄,它會提供一個 Plone Controller 來管理系統的啟動和關閉。

可以先不急著啟動它,到 C:\Plone 目錄裡利用文字編輯器打開 buildout.cfg 設定檔,如果你完全不清楚文字編輯器的用途,那麼就用 WordPad 打開這個設定檔。

找到設定檔裡的 [instance] 區段,它會包含一個 egg = 的設定項目,在 = 等號之後,就是要指定 Products.ContentWellPortlets 的設定值,完成後的內容類似下列所示:
[instance]
...
# If you want Zope to know about any additional eggs, list them here.
# e.g. eggs = ${buildout:eggs} my.package
eggs =
${buildout:eggs}
Products.ContentWellPortlets

儲存上述設定檔案,再打開 CMD.exe 到 C:\Plone 目錄,執行 bin\buildout 指令。

順利讓 buildout.cfg 的設定值生效後,系統已自動完成 ContentWellPortlets 的第一步安裝。
再啟動 Plone 系統,到 Site Setup 裡的 Add-on Products 把 ContentWellPortlets 啟用。

ContentWellPortlets 生效作用後,從網站首頁畫面看得到 Add, edit or remove a portlet above the content 字樣,點選進入後,會出現 portlet 的設定畫面。

例如在 Column A 的 Add portlet... 裡新增一個 RSS Portlet,設定 Title 為 BBC News,填入 URL of RSS feed。

同樣地,也可以從 Add, edit or remove a portlet below the content 進入設定。

2009/08/14

Aceh and Taiwan

Aceh 亞齊是印尼北部地區,之前海嘯災難,台灣曾參與救援,部份單位選擇長期駐點,新竹的社區大學就是一例。台灣和亞齊建立的合作之一,是安排兩位學生到中研院實習,既然由我照料,學習 Python Plone 就成為學生的功課之一。這星期完成學習心得簡報,我也鼓勵他們回國後建立 Python Plone 社群。
華人的飲食文化有融入印尼當地,例如 mi 就是麵 daofu 就是豆腐,我還學會 mi golian 是炒麵 beibei 是鴨子。另外,當地多數人只有名沒有姓,通常貴族才有家族姓氏,也是相當特別。
剛好,客家電視「客家新聞雜誌」日前在亞齊採訪,專題報導在八月15日晚上九點播出,首播和重播時間如下:
客家電視--17頻道
(六) 21:00(首播)
(日) 16:00
(二) 15:00 / 01:00
公共電視--13頻道
(六) 09:00
(日) 04:00
另外,【重返亞齊DAILY系列報導】於八月24日至八月27日晚間七點在暗夜新聞播出,當天最夜新聞22:00、隔天過晝新聞12:30也會重播。
一邊是海嘯,一邊是風災,除了努力重建外,也期盼我們都能夠有更大的智慧來和大自然相處。

Recurring Event

近期有個在 Plone 裡實作農曆 recurring event 的需求,剛好 Plone 開發者正在討論這功能,先把相關資訊記下來
當然,農曆功能主要得靠"我們自己"了
其他 calendar 相關的小軟體列表如下,有空再了解它們:

2009/07/25

plonectl debug

以 standalone 方式安裝 Plone3 installer 後,可用 zinstance 目錄裡 bin/plonectl 程式來啟動 Zope/Plone,bin/plonectl 功能和之前的 bin/instance 一樣。例如執行 bin/plonectl fg 後,除了啟動 Zope/Plone 外,還可以在 shell 即時顯示系統訊息。使用 fg 或 start 參數啟動 Zope/Plone 後,它會鎖住 Data.fs 檔案,代表這種啟動方式只允許一個 client 存取 ZODB。想要多個 client 同時存取 ZODB,必須改用 zeo 安裝方式。

在 Data.fs 沒被鎖住的情況下,可以執行 bin/plonectl debug 手動存取 ZODB 內容。

$ bin/plonectl debug
instance: Starting debugger (the name "app" is bound to the top-level Zope object)
>>> dir()
['Zope2', '__builtins__', '__doc__', '__name__', 'app', 'configure']
>>> app.Plone['front-page'].getRawTitle()
'Welcome to Plone'
>>> app.Plone['front-page'].setTitle("New Title for Plone Site")
>>> import transaction
>>> transaction.commit()

>>> myitem = app.mysite['my-folder']['001']
>>> myitem.meta_type
'MyType'

以上是最簡單的範例。下列是其他範例,記得改過內容的話,都要使用 transaction.commit() 來確認寫進 ZODB。

>>> for k, v in app.Plone.Members.marr.objectItems():
...     print k, v.getRawText()
...
>>> for obj in app.Plone.Members.marr.objectValues():
...     obj.setText('<h2>My Test</h2>')
...

另外還可以把指令寫成 script 檔案,例如 updateTitle.py 的內容:

app.Plone['front-page'].setTitle("New Title Updated by Script")
import transaction
transaction.commit()

再用 bin/plonectl run updateTitle.py 執行結果。如果需要 admin 權限的話,要事先加上權限宣告:

import os
import transaction

from AccessControl.User import UnrestrictedUser
from AccessControl.SecurityManagement import newSecurityManager

admin = UnrestrictedUser('admin', '', ['Manager'], '')
newSecurityManager(None, admin)

app['mysite'].mytype['my-item'].setStartDate('1918/01/01')
transaction.commit()

2009/07/18

EMP: Collision of Styles

NGC 介紹了 Frank Gehry 著名的建築計畫,不規則曲線的建築結構是 Gehry 的特性,他並大量引用電腦系統來設計並交換資料。西班牙 Bilbao Guggenheim Museum 是他較早期的作品,九年後他在 Paul Allen 的委託下,在西雅圖完成了 Experience Music Project。因為 Paul Allen 和 Jimi Hendrix 都出身於西雅圖,促使這項搖滾樂體驗館的誕生,當然,還要靠 Frank Gehry 才能讓這項酷斃的建築物,充份包含並展現搖滾文化的多樣性。