Plone3のテーマプロダクトをつくる、はじめの一歩

World Plone Day 2008 Tokyo

安田善一郎

Ciel Serein

本日のゴール

  • 素の状態のPlone3の見た目をカスタマイズします。
  • これを素のPlone3に適用して行きます
  • と、思っていたのですが、そこまで準備が間に合いませんでした。

本日のゴール 方針変更版

  • 素の状態のPlone3の見た目をカスタマイズします。
    • プロダクトを作る手順
    • 表示順の変更
    • できれば、コンポーネントのカスタマイズ
    • これを実際にやってみます
  • ZMI(管理インターフェース)で設定を変更するのではなく、プロダクト(パッケージ)として開発します。
    • プロダクトなのでインストール/アンインストールが可能です。
    • ローカル環境で開発し、十分に作り込んでからこれを本番に適用する、というような手順がとれるようになります。
    • サーバー変更時などの移行作業が簡単になります。

イントロダクション

  • 対象者
    • Ploneサイトのカスタマイズに興味のあるかた
  • 前提知識など
    • XHTML/CSS
    • zopeのページテンプレート
      • tal 構文を見ても驚かない程度
      • MTなど他のテンプレートの経験があればなんとなくわかる

イントロダクション

  • 環境など
    • Ploneがインストールできる環境
      • 今回はMac OS X 10.5.4でやります
    • ターミナルが使える
      • ところどころでコマンドを入れる必要があります
    • エディタ
      • ほとんどの作業はテキストファイルの編集です
    • ブラウザ
      • ZMIからパッケージをインストールしたり、動作検証に使います

作業の流れ

  • I. 開発環境の準備
  • II. テーマプロダクトのスケルトンを作成する
  • III. Viewlet コンポーネントの表示を制御する
  • IV. Viewlet コンポーネントをカスタマイズする
  • V. カスタムのスタイルシートを適用する
  • 今日はIIIまでです...

I. 開発環境の準備 (1)

  • unified Installerを使って一式そろえる
    • Plone 3.1.6, Zope 2.10.6,Python 2.4.5
    • pasterなどのツールもセットでサンドボックスができあがる。
  • 私の場合 いろんなバージョンのpythonが散在していて混乱。
    Unified installerでサンドボックスを作った方が楽でした

I. 開発環境の準備 (2)

  • デバッグモードの設定
    • ~/Plone-3.1/zinstance/buildout.cfg
    •  [instance] 
      debug-mode = on 
      
    • $cd ~/Plone-3.1/zinstance
      $ ./bin/buildout
      • これを実行することで反映される

I. 開発環境の準備 (3)

  • zopeの開始
    • $ ~/Plone-3.1/zinstance/parts/instance/bin/runzope
      • メッセージがコンソールに逐一表示されるので安心
      • ctrl+Cで終了
      • .pyファイルを変更した場合は再起動
  • cssとjsがすぐに反映されるようにする
    • ZMI画面
      [Ploneサイト名] > portal_css or portal_javascripts
    • Tick the debug check box

II. テーマプロダクトのスケルトンを作成する

  • 1) egg スケルトンを作る
  • 2)できたeggをzopeにインストールする
  • 3) Ploneサイトに適用する

II. スケルトン作成 1) egg スケルトンを作る

  • $ cd ~/Plone-3.1
    $ ./Python-2.4/bin/paster create -t plone3_theme
  • Enter project name: wpdj.theme
    Variables:
      egg:      wpdj.theme
      package:  wpdjtheme
      project:  wpdj.theme
    Enter namespace_package (Namespace package 
    (like plonetheme)) ['plonetheme']: wpdj
    Enter package (The package contained namespace package 
    (like example)) ['example']: theme
    Enter skinname (The skin selection to be added to 'portal_skins' 
    (like 'My Theme')) ['']: wpdjSkin
    
    • この名前はあとあと使います
    • フォルダがたくさんできます

II. スケルトン作成 2)eggをzopeにインストール

  • 1. ~/Plone-3.1/zinstance/srcにegg (wpdj.theme)をコピーする。
  • 2. buildout.cfg を修正する
  • [buildout] 
    eggs = wpdj.theme 
    develop = src/wpdj.theme 
    [instance] 
    zcml =  wpdj.theme 
  • 3. buildoutを実行して修正を反映する。
    • $cd ~/Plone-3.1/zinstance
      $ ./bin/buildout

II. スケルトン作成 3) Ploneサイトに適用する

  • 再起動するとZMI の/[Plone site]/portal_quickinstaller にでてくる
  • .xmlや.zcmlを変更したら再インストールする
  • installすると、見事にstylesheetがすべてはずれます。
    • => [your theme package]/skins/wpdj_theme_styles/以下の
      public.css.dtml portlets.css.dtml base.css.dtml
    • これらを削除すると、基本のスタイルシートが生きるようになる。

III. Viewlet コンポーネントの表示を制御する

III. 1.) コンポーネントを非表示にする

  • Personal Bar, SearchBox,Colophonを非表示にする
  • 1) ~/Plone-3.1/zinstance/src/wpdj.theme/wpdj/theme/profiles/default/viewlets.xml これを編集する。
  • <object>
      <hidden manager="plone.portalheader" skinname="wpdjskin">
        <viewlet name="plone.searchbox" />   
      </hidden>
      <hidden manager="plone.portaltop" skinname="wpdjskin">
            <viewlet name="plone.personal_bar" />
       </hidden>
       <hidden manager="plone.portalfooter" skinname="wpdjskin">
             <viewlet name="plone.colophon" />
       </hidden>
    </object>
    
    #viewletManager, viewletの名前がわからなかったらURLの後ろに@@manage-viewletsつけると見れる。

III. 1.) コンポーネントを非表示にする

  • 2) ZMIからプロダクトをリインストールする。
    • 反映されました。
    • アンインストールしても戻りません。
      viewlets.xmlのバックアップを取っておきましょう

III. 2. コンポーネントの表示順を変更

  • portalheader:ロゴ→global_sections→site_actions
  • ふたたび profiles/default/viewlets.xml
  • orderタグの中にmanagerを定義し、その中で Viewletを定義する。
  •   <order manager="plone.portalheader" skinname="wpdjskin" based-on="Plone Default">     
        <viewlet name="plone.logo" insert-before="*" />
        <viewlet name="plone.global_sections" insert-after="plone.logo" />
        <viewlet name="plone.site_actions" insert-after="plone.global_sections" />    
      </order>
    #insert-before="*"とすると、なによりも最前列、という意味になる

IV. Viewlet コンポーネントをカスタマイズする

  • パンくずをコンテンツの下に移動する
  • ロゴを変更する
  • site_actions をフッタに移動する

IV. Viewlet コンポーネントをカスタマイズする

4. パンくず(path_bar) をコンテンツの下に移動
  • 1) /browser/viewlets.py にclassを記述する
    • [my package]/browser/viewlets.py にclass を追加する。
      pathViewlet という名前にする。
      ここでは、path_barの機能を実装しなけらばならないので、以下ページのサンプルを参考にする
    • footerも同様
  • 2) テンプレート(ptファイル)を作成する
    • ZMI サイト > portal_view_customizations から、path_barを探す。
    • plone.app.layout.viewlets/path_bar.ptをそのまま [my package]/browser/path_bar.pt として保存
    • footerも同様
  • 3) /browser/configure.zcml にviewletを定義する。
    • [my package]/browser/configure.zcml
  • 4) profiles/default/viewlets.xmlに viewletを登録する
  •         
    
    

V. カスタムのスタイルシートを適用する

カスタムcssを登録する
  • [your package]/profiles/default/cssregistry.xml

リソース