2013/08/30

Tabbed Content Editing

collective.tabr allows for easy editing of Plone "tabbed content" using the jQuery Tools Tabs UI tool.

After successful installation, you should see the add-on listed in Plone Site Setup. Enable the add-on, you should see "Tab" and "Default Tab" from the TinyMCE toolbar menu.

However, you might run into minor issues on final display. First make sure jQuery compatibility fixes are applied. In case you need CSS tweaks, try looking for the "tabs" class name. collective.tabr/browser/tabr.js does almost the hard work, and I append 'style="list-style-type: none; margin-left: 0em"' in <ul class="tabs"> to fix the display.

< jq('<ul class="' + wysiwygTabs.TAB_CONTAINER_CLASS + \
 '"><!-- Dynamically generated tab selectors -->l</ul>');
---
> jq('<ul class="' + wysiwygTabs.TAB_CONTAINER_CLASS + \
 '" style="list-style-type: none; margin-left: 0em" \
 ><!-- Dynamically generated tab selectors --></ul>');

By using this visual tool, content editors can ease their job. It goes further by utilizing JavaScript in Plone without knowing HTML details.

2013/08/19

2013 Summer Outing

第一次 Python 同好的夏季合宿,八月16日到18日,兩天兩夜在宜蘭,包棟的民宿可供 18 人住宿,場地提供 wifi 和簡易投影設備。

感謝老朋友、新朋友的參加,整體而言,活動滿意度自評 85 分以上,我已經開始期待下一次的活動了。

玩得盡興,是這次活動的最高原則,民宿附近的景點,包括羅東夜市、梅花湖、運動公園,鬆散的行程架構,親子組和散客應該都能自在享受。

下午到晚間是主要的聊天時段,大家除了交換日常工作和工具使用心得,也討論 Python 活動的未來規劃,可以天馬行空聊到深夜。

有了這次經驗,下次可考慮一天一夜的行程,大家參加的彈性應該更大,視天氣情況來搭配地點,例如天氣好的話,就選附有綠地的民宿,天氣冷的話,就選溫泉民宿。

2013/08/03

View Pattern

View 是新式 Python 網站框架的重要元件,新版的 Plone 使用 View 機制來顯示動態網頁,或是處理表單內容,它可以完整取代舊版的 Skin Layer 機制。

Skin Layer 是顯示動態網頁的傳統機制,它通常透過 Restricted Python 來執行程式邏輯,包括副檔名是 .cpy 的 Controller Script 檔案,再由 Page Template 顯示畫面。但這類 Python Script 並不是一般的 Python 程式,它們只允許執行特定功能,如果存取超過安全範圍的功能,就會出現 Unauthorized: The container has no security assertions 的錯誤。

另一個常見問題是,Skin Layer 的 Script 或 Template 可以在任何 context 裡執行。以 plone_content 的 document_view 為例,通常它該和 Page 搭配,但在 /some-news-item/document_view 的情況下,Zope 仍會試圖執行它,這樣很容易遇到 AttributeError 的錯誤。

當然,也有些 Script 或 Template 屬於通用類型的設計,在多種 context 裡都適合執行,以 plone_forms 裡的 content_status_history 為例,只要內容型別實作 Workflow 功能,就適合搭配它來執行。無論如何,預計在 Plone 5 之際,Skin Layer 將大幅被 View 機制取代。

View 主要由 Python class 和 Page Template 組成,通常還搭配 JavaScript 或 CSS 等資源檔,除了產生 HTML 檔案外,也可以輸出成 JSON、Excel 檔案格式,或是匯出資料到 SQL 資料庫

在 Plone 環境裡,Browser View 是最常見的應用方式,通常也會搭配 Viewlet 或 Layer,設定進階的控制細節。