[2]プロダクトの構造
RichDocumentのプロダクトディレクトリのファイルを概観します。
RichDocumentはATContentTypesのATDocumentを拡張しています。拡張することは比較的簡単です。拡張するためのコードを説明する前に、RichDocumentのパッケージレイアウトについて説明します。
__init__.py
config.py
interfaces/
interfaces/richdocument.py
content/
content/__init__.py
content/attachments.py
content/richdocument.py
widgets/
widgets/__init__.py
widgets/attachments.py
widgets/images.py
Extensions/Install.py
Extensions/utils.py
skins/
skins/RichDocument/*
skins/attachment_widgets/*
このレイアウトは、ATContentTypesのコンテンツタイプ規約にしたがっていました。次に主なファイルについて説明します。
__init__.py
このファイルはZopeがRichDocumentプロダクトをロードするときに実行されます。プロダクトを初期化するコードを含んでいるため、Zopeが理解できるようになります。このファイルで、スキンフォルダ用のFIleSystemDirecoryViewを登録します。つまり、RichDocumentをインストール後、portal_skins/RichDocumentは、skins/RichDocumentフォルダのコンテンツを反映したものになります。 config.py
設定用の定数を定義しています。プロダクト名やコンテンツの追加で使用するパーミッションが設定されています。 interfaces/ フォルダ
このプロダクトで定義されているインターフェースを記述しています。IRichDocumentインターフェースはATContentTypesのIDocumentインターフェースを拡張しています。IRichDocumentインターフェースを提供しているコンテンツタイプは、暗黙的にIDocumentが提供しているすべての機能をサポートしています???。インターフェースを定義することは、コンテンツタイプが機能するためには厳密には必要ありませんが、文書を提供でき、クラスの振舞を宣言できるのでこの慣例にならっています。 content/ フォルダ
実際のコンテンツタイプが実装されています。richdocument.pyはRichDocumentタイプを実装しています。attachments.pyはImageAttachmentとFileAttachmentを実装しています。この二つのタイプは、画像や添付ファイルのアップロードをできるようにするために使用します。__init__.pyファイルでこれらのタイプをロードします。このため、RichDocumentをインポートするために、書かなければならないのは、from Products.RichDocument.content import RichDocument だけになります。 widgets/ フォルダ
RichDocumentで使うカスタムウィジェットを定義しています。これらは、content/__init__.pyと同じように__init__.pyで初期化されます。RichDocumentは二つの複雑なウィジェットを定義しています。画像と添付ファイルのアップロードと管理するために、これらのウィジェットをコントローラアクションで使います。 Extensions/ フォルダ
External Methodsをインストールします。プロダクトをインストール、または、アンインストールするときに、PloneのQuickInstallerがInstall.pyファイルを読み込んで、install()とuninstall()メソッドを実行します。utils.pyファイルは、追加のsetupメソッドが実装されています。これらのメソッドは、install()メソッドから呼び出されます。 skins/ フォルダ
標準のインストールの仕組でskins/RichDocumentとskins/attachment_widgetフォルダをportal_skinsに登録すします。インストール後にRichDocumentでページテンプレートとPythonスクリプトを使用できるようになり、画像と添付ファイルのアップロードウィジェットを利用できるようになります。