1

toolset.xmlは途中までしか進んでいないようです。理想的には、__ init __。pyのinitialize()でのToolInit呼び出しをなくすことができるはずです。しかし、ToolInitを呼び出さないと、ツールアイコンをZMIに表示できませんでした。

4

2 に答える 2

3

初期化関数のToolInit呼び出しは、ツールクラスをデータベース内のOFSベースのフォルダーに追加できるものとして登録します。主に、クラスのインスタンスを作成するためのファクトリを登録します。これは基本的に、ContentInitが通常のコンテンツクラスに対して行うのと同じです。

クラスが登録され、そのmeta_typeがわかると、クラスのインスタンスをOFSベースのフォルダーに追加できます。GenericSetupステップは、永続コンテンツの管理を担当し、データベースにツールインスタンスを追加するために使用できます。

初期化関数のコードを避けたい場合は、代わりにいくつかのカスタムZCMLディレクティブを作成し、configure.zcmlでこれらを使用して、型とそのファクトリを登録する必要があります。Dexterityはこのルートを進んでいますが、Archetypesベースのコンテンツタイプやツールなどの一般的なクラスでは使用できません。

于 2011-04-09T14:14:52.010 に答える
2

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を使用できることに注意してください。

于 2011-04-09T09:03:38.977 に答える