2012-04-23 4 views
2

ビューレットの問題を無効にすることがよくありますが、それがうまくいかない理由が見つからないことがよくあります。ブラウザレイヤーを使用してPloneでビューレットの作成をデバッグする方法

私は今、browserlayerを使用するがplone.app.layout.viewlets.common.BaseViewletから継承しないcollective.googleanalyticsトラッカービューレットをオーバーライドしようとしています。

これを達成するために、私はc.googleanalyticsを継承するブラウザ層を作成し、それを登録し、永遠にうまくいっていることを確認しました。

私の代わりにc.googleanalyticsビューレットが使用されている理由はまだ分かりません。

コードはここにある:https://github.com/toutpt/collective.linguaanalytics

私はこれをデバッグするためにPDBを追加することができる場所を知ってできるようにしたいと思います。またはどのツールが役立つか

編集:

(Pdb) self.request.__provides__.__iro__ 
InterfaceClass plonetheme.sunburst.browser.interfaces.IThemeSpecific>, 
InterfaceClass plone.app.z3cform.interfaces.IPloneFormLayer>, 
InterfaceClass z3c.form.interfaces.IFormLayer>, 
InterfaceClass plone.app.discussion.interfaces.IDiscussionLayer>, 
InterfaceClass collective.linguaanalytics.interfaces.ILayer>, 
InterfaceClass collective.googleanalytics.interfaces.browserlayer.IAnalyticsLayer>, InterfaceClass plone.theme.interfaces.IDefaultPloneLayer>, 
InterfaceClass Products.CMFDefault.interfaces.ICMFDefaultSkin>, 
InterfaceClass zope.publisher.interfaces.browser.IDefaultBrowserLayer>, 
InterfaceClass zope.publisher.interfaces.browser.IBrowserRequest>, 
InterfaceClass zope.publisher.interfaces.http.IHTTPRequest>, 
InterfaceClass zope.publisher.interfaces.IRequest>, 
InterfaceClass zope.publisher.interfaces.IPublisherRequest>, 
InterfaceClass zope.publisher.interfaces.IPublicationRequest>, 
InterfaceClass zope.security.interfaces.IParticipation>, 
InterfaceClass zope.publisher.interfaces.IApplicationRequest>, 
InterfaceClass zope.interface.common.mapping.IEnumerableMapping>, 
InterfaceClass zope.interface.common.mapping.IReadMapping>, 
InterfaceClass zope.interface.common.mapping.IItemMapping>, 
InterfaceClass zope.publisher.interfaces.ISkinnable>, 
InterfaceClass zope.annotation.interfaces.IAttributeAnnotatable>, 
InterfaceClass zope.annotation.interfaces.IAnnotatable>, 
InterfaceClass zope.interface.Interface>) 

編集: 彼らがplone.browserlayer内の他の層ごとのオーバーライド周りにテストされていないようです。バグかもしれない?

+0

これは奇妙です。 ILayerでIAnalyticsLayerを拡張するため、コードが正しいように見えます。ちょっと怪しげに見えるのは、GSプロファイルの "analytics"ブラウザレイヤーを削除したときだけです。 – vangheem

+1

リクエストを得ることができるところであれば、どこにでもpdbを貼り付け、リクエスト__が__.__ iro__の出力を提供したことをお知らせください。 –

+0

@vangheem分析層を削除することがテストでした。私はこれをせずにプッシュしました。 – toutpt

答えて

3

haha​​、silly typo。 viewlets/configure.zcml内の の場合、ビューレットはcollective.googleanalyticsの「AnalyticsTrackingViewlet」です。あなたのviewlets.pyで

あなたはこのクラスを上書きしますが、あなたのオーバーライドクラスの本当の名前はZCMLがロードされたときに「AnalyticsViewlet」

はこのように、それがで... c.google c.google.AnalyticsTrackingViewletを上書きします.AnalyticsTrackingViewlet:D。

zcmlを変更して、AnalyticsViewletを使用して楽しんでください。

0

これは非常にハックに見えます。上流の層だけを残してみませんか?

overrides.zcmlでオーバーライドする必要があります。一度それが/レイヤーの制限なしで動作すると、それをクリーンレイヤーインターフェイスにバインドすることができます。

別の方法では、上流のビューレットをオーバーライドしないでください。ただし、GSを介して非表示にして、独自のビューレットに別の名前を付けます。再び、きれいな層に。

+0

私はoverrides.zcmlについて知っていますが、overrides.zcmlを必要とするアドオンを作るのは変です。私がこれを使用する唯一の場所は、(歌とダンスのような)コンポーネントをアンロードする必要があるときです。したがって、この解決策は回避策であり、プロジェクトに対してのみ有効です。既存のビューレットの動作を変更するためのソリューションです。私がここで達成しようとしているものです。 – toutpt

関連する問題