toolset.xmlは途中までしか進んでいないようです。理想的には、__ init __。pyのinitialize()でのToolInit呼び出しをなくすことができるはずです。しかし、ToolInitを呼び出さないと、ツールアイコンをZMIに表示できませんでした。
2 に答える
初期化関数のToolInit呼び出しは、ツールクラスをデータベース内のOFSベースのフォルダーに追加できるものとして登録します。主に、クラスのインスタンスを作成するためのファクトリを登録します。これは基本的に、ContentInitが通常のコンテンツクラスに対して行うのと同じです。
クラスが登録され、そのmeta_typeがわかると、クラスのインスタンスをOFSベースのフォルダーに追加できます。GenericSetupステップは、永続コンテンツの管理を担当し、データベースにツールインスタンスを追加するために使用できます。
初期化関数のコードを避けたい場合は、代わりにいくつかのカスタムZCMLディレクティブを作成し、configure.zcmlでこれらを使用して、型とそのファクトリを登録する必要があります。Dexterityはこのルートを進んでいますが、Archetypesベースのコンテンツタイプやツールなどの一般的なクラスでは使用できません。
toolset.xmlの目標は、ツールをデータベースにインスタンス化することです。ツールの削除にも使用できます。これは、たとえばアップグレード手順で非常に役立ちます。
toolset.xmlの例:
<?xml version="1.0"?>
<tool-setup>
<required tool_id="portal_foo" class="dotted.path.to.FooTool" />
<forbidden tool_id="portal_spam" />
</tool-setup>
このサンプルtoolset.xmlは、FooToolクラスをそのportal_foo
コンテキストのようにインスタンス化し、存在する場合はidを持つオブジェクトを削除しますportal_spam
。
たとえば、開発するサイトの一般的なポリシーパッケージなど、最初にツールを定義するパッケージだけでなく、任意のGenericSetupプロファイルでtoolset.xmlを使用できることに注意してください。