パーソナルツール
現在の場所: ホーム plone archetypes ArchExampleを読む
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
ナビゲーション

 
文書操作

ArchExampleを読む

作成者 takanori 最終変更日時 2005年03月18日 00時12分

ここではArchetypesと一緒に配布されている、サンプルのアイテム ArchExample のソースを読みながら、Archetypesの仕組みについて説明します。

目次

ダウンロード[download]

まずはArcheExampleはArchetypes 1.2.4-rc4と一緒に配布されているので、下記のURLから archetypes-1.2.5-rc4.tgz をダウンロードします。 (1.2.4-rc5, 1.3.1, 1.3.2には ArchExample が含まれていません。)

http://sourceforge.net/project/showfiles.php?group_id=75272&package_id=75683

ダウンロードしたアーカイブを展開すると、Archetypes, generator 等とともに ArchExample というディレクトリができています。

ファイルの構成[files]

ArchExampleのファイルの中身について、それぞれがどういった内容のファイルなのかを説明します。

  • __init__.py これってプロダクトの初期化スクリプト?
  • Article.py このプロダクトの中心です。Archetypes の仕組みを利用してploneサイト用のアイテムを定義しています。
  • ChangeLog 変更履歴です。特に動作には関係ありません。
  • config.py 他のpython3つのソースファイルで使われている変数が定義してあります。
  • Extensions/Install.py このプロダクトをploneサイトにインストールするためのスクリプトが記述してあります。 このスクリプトは プロダクトの追加・削除 の時に実行され、このプロダクトを plone サイトに追加します。
  • skins/archexample/article_view.pt このアイテム用をploneサイト上で表示する時に使用する PageTemplate です。

上記のようなファイルの構成はplone用のプロダクトの場合には一般的なものです。 ArchExampleで最も重要なのは Article.py ファイルで、アイテムの定義を Archetypes の仕組みを使用して記述してあります。

Article.py[article]

上記のファイルのうち、中心的なソースファイル Article.py の中身を読んでみます。

まず最初の方に、 schema = BaseSchema + Schema(( という記述から始まる一連の定義部分があります。 ここで定義されているのは、このアイテムのフィールド名とその入力方法などです。

この schema を定義している部分が Archetypes を利用する上で最も重要な部分です。

BaseSchema というのはショートネームとタイトルと、プロパティタブで設定できるメタデータについての定義がしてある「基本のデータ構造(スキーマ)」です。 そして、自分が追加で使用したいフィールドを Schema(( 以降に定義します。

Article.py では3つの追加フィールドが定義されています。 以下では、それぞれのフィールドの定義について見ていきます。

groupフィールド[group]

一つ目のフィールドは group フィールドです。 このフィールドはwidget(編集用の部品)に SelectionWidget を使用しているので、リストボックスで表示されます。またその選択用のリストは ARTICLE_GROUPS を使用します。

StringField("group",
    vocabulary=ARTICLE_GROUPS,
    widget=SelectionWidget(),
    ),

groupフィールドの編集画面は以下のようにイメージになります。ショートネームとタイトルフィールドは BaseSchema で定義されています。

edit group field

なお、ARTICLE_GROUPS の中身については config.py に以下のように定義してあります。

ARTICLE_GROUPS = DisplayList((
    ("headline", "Headline"),
    ("bulletin", "Special Bulletin"),
    ("column", "Weekly Column"),
    ("editorial", "Editorial"),
    ("release", "Press Release"),
    ))

blurbフィールド[blurb]

blurbフィールドは文字列を保持するフィールドで、widgetには TextAreaWidget を使用しているので、普通のテキストエリアとして表示されます。 また、'searchable=1'と記述してあるため、ここの設定されている文字列は検索対象の文字列となります。

StringField("blurb",
    searchable=1,
    widget=TextAreaWidget(),
    ),

edit blurb field

bodyフィールド[body]

bodyフィールドはテキストを保持するフィールドで、widgetには RichWidget を使用しています。 RichWidget では複数の記述フォーマットに対応していて、この例ではプレーンテキスト、HTML、構造化テキストなどから選択する形式になっています。

TextField("body",
    searchable=1,
    required=1,
    primary=1,
    default_output_type="text/html",
    allowable_content_types=("text/plain",
                             "text/structured",
                             "text/restructured",
                             "text/html",
                             "application/msword"),
    widget=RichWidget(label="Body"),
    ),

edit body field

クラスの定義[class]

最後に Article クラスの定義を行なっています。 ここでは、Articleクラスの schema として、上で定義した schema を代入しています。

次の actions では、view アクションでは article_view を使用するという設定をしています。 この article_viewskins/archexample/article_view.pt にページテンプレートとして記述されています。

class Article(BaseContent):
    """This is a sample article, it has an overridden view for show,
    but this is purely optional
    """

schema = schema

actions = ({ "id": "view", "name": "View", "action": "string:${object_url}/article_view", "permissions": (CMFCorePermissions.View,) },)

他にクラスを定義するときに指定できる主な属性には、以下のものがあります。

  • content_icon このアイテムを表すアイコンを指定します。アイコンのファイルは skin フォルダに入れておきます。
  • global_allow このアイテムをどこででも追加できるようにしたくない場合は、0 を設定します。
  • allowed_content_types このアイテムの下に作成できるアイテムの種類をリストで記述します。


Powered by vine linux, python, zope, plone, coreblog