ユーザがリソース(カスタムコンテンツタイプ)にアクセスしようとしたときにトリガされるサブスクライバを作成したいとします。したがって、オブジェクトは追加されず、変更されず、何もトラバースされません。 Zope View Eventのようなものです。Plone上のブラウザにページが表示される直前に、どのイベントを使用してサブスクライバをトリガする必要がありますか?
基本的に、カスタムコンテンツタイプにカスタムワークフロー(2つの状態:private
とviewed
)があるとします。初期状態はprivate
です。このコンテンツタイプは、匿名ユーザーが_createObjectByType
を使用して、プログラムによってのみ作成されます。 myobjet
というオブジェクトがプログラムでPloneサイトのルートフォルダに追加されたとします。私が欲しいもの
です:ときに、ユーザーアクセス
http://localhost:8080/Plone/myobject
...それは自動的にviewed
にこのオブジェクトのワークフローの状態を変更します。 URL http://localhost:8080/Plone/myobject
はデフォルトのbase_edit
ではなくカスタム表示になります。
私はどのイベントを使用しますか?私はIEndRequestEvent
とIBeforeTraverseEvent
をthis listから試してみましたが、それらのどれも動作しません。ハンドラが私のカスタムオブジェクトインタフェースのために呼び出されていません。
カスタムオブジェクトインターフェイス(IObjectEditedEventなど)で他のイベントを試しました。このイベントでは、インターフェイスを実装するオブジェクトを編集するときにハンドラが呼び出されます。しかし、IEndRequestEvent
とIBeforeTraverseEvent
を使用してもハンドラは呼び出されません。
IEndRequestEvent
とIBeforeTraverseEvent
私はすべてのインターフェイスに加入者を設定する場合にのみ動作します。
<subscriber
for="*
zope.app.publication.interfaces.IBeforeTraverseEvent"
handler=".subscriber.myhandler"
/>
そして、私ははmyHandler印刷されたオブジェクトとこのような状況でイベントを作るとき、それは示しています
<PloneSite at Plone>
<zope.app.publication.interfaces.BeforeTraverseEvent object at 0xd52618c>
ソリューションが自分自身でイベントを書くことになっているのなら、簡単なチュートリアルはありますか?
あなたは何を達成しようとしているの? –
彼らのどれもが働いていないということは何を意味していますか?これを達成するためにIBeforeTraverseを使用することができます。 – toutpt
@Sentinel:私が達成したいことについて、より多くの情報を追加しました。 –