私は同じname=
属性を持つ<browser:page ...
でCMFスキン層によって提供されるビューをオーバーライドしようとしています。これはPloneで可能ですか、ブラウザの表示は他のブラウザの表示を上書きするだけですか?CMFスキンのテンプレートは、Zope 3ブラウザによって上書きできますか?
答えて
から「オルタナティブ」な方法を試すことができます。そのため、@@
をURLのブラウザビュー名の前に付ける必要があります。つまり、CMFスキンレイヤーテンプレートの代わりにブラウザビューが呼び出されるようにする必要があります。
つまり、手短に言えば、@@
を手前に置くと、ブラウザビューが上書きされます。
すなわち:
localhost:8080/Plone/@@myview
オーバーライド:
localhost:8080/Plone/myview
あなた@@myview
を指すようにあなたのCMFのスキン層とtal:define
View
変数でテンプレートをオーバーライドし、これを克服します。それでも、CMFスキン層テンプレートからBrowserViewsメソッドにアクセスできます。
私はそれについてはわかりませんが、すぐにできることはplone_skinsの "custom"フォルダで試してみることです。
また
CMFスキン層は、ブラウザビューをオーバーライドする(これは少し遅れているが、どのような地獄)http://plone.org/documentation/kb/applying-a-custom-view-to-a-specific-folder
デフォルトでは、CMFスキンメカニズムは、ビューを検索する前にportal_skinsを検索します。これを変更するには、IPublishTraverseアダプターをカスタマイズします。 (Ploneの3でテスト - 私はデフォルトの動作は、Ploneの4にあるものは100%わからない)それは少し悪だが、これは動作することがあります。
from zope.component import adapts, queryMultiAdapter
from zope.publisher.interfaces.browser import IBrowserRequest
from Acquisition import aq_base
from ZPublisher.BaseRequest import DefaultPublishTraverse
from Products.CMFCore.Skinnable import SKINDATA, SkinnableObjectManager
from thread import get_ident
_MARKER = object()
class SkinnableTraverser(DefaultPublishTraverse):
adapts(SkinnableObjectManager, IBrowserRequest)
def publishTraverse(self, request, name):
"""Let the default traverser do its job, but if the thing that was
returned was from a skin layer and there's a view with
the same name, let the view win.
"""
gotten = super(SkinnableTraverser, self).publishTraverse(request, name)
if not name.startswith('_') and not name.startswith('aq_'):
sd = SKINDATA.get(get_ident())
if sd is not None:
ob, skinname, ignore, resolve = sd
if resolve.get(name, None) is aq_base(gotten):
# This was retrieved as a skin resource
# Check if it could've been a view also
view = queryMultiAdapter((self.context, request), name=name)
if view is not None:
return view.__of__(self.context)
return gotten
あなたがでこれを登録する必要があります。
<adapter factory=".skins.SkinnableTraverser" />
おそらくoverrides.zcmlにあります。もう1つの選択肢は、要求に応じて、より具体的なマーカーインタフェースを使用することです。 browserlayer.xmlのインポート手順でインストールされたもの。
Martin
- 1. URLはApacheによって上書きされますか?
- 2. Javascript APIのように、IOS上でマップキットをスキンできますか?
- 3. デフォルトのテンプレートを上書きしてフロントエンドのテンプレートをカスタマイズするにはどうすればよいですか?
- 4. ブラウザでコンテキストメニューを上書きすることはできますか?
- 5. Sylius(Symfony)上書きテンプレート
- 6. django上書き管理テンプレート
- 7. UITabBarItemのタイトルはUIViewControllerのタイトルによって上書きされますか?
- 8. このデータは別のコンポーネントによって上書きされますか?
- 9. Nativescript:テンプレート内のActionBarを上書きできません
- 10. DeviseController#find_messageをどのように上書きできますか?
- 11. クラスのプロパティは、他のインスタンスセッターによって上書きされています
- 12. knockout.jsはテンプレートを使ってテンプレートを生成できますか?
- 13. 私はPHPを使ってExcelファイルを上書きできますか?
- 14. for..in traverseプロパティは、プロトタイプチェーンの列挙できないプロパティによって上書きされますか?
- 15. 特殊なテンプレートを上書きする
- 16. テンプレートを上書きするdjango-allaut
- 17. 上書きする方法ジャンゴ-CMSテンプレート
- 18. CKEditorテンプレートのScribite上書きパス
- 19. Log4NETの設定はAssemblyInfoタスクによって上書きされます
- 20. Convert.ToDateTime()を上書きできますか?
- 21. Drupal 7でテンプレートを無視または上書きしますか?
- 22. Materialize CSSをブラウザのデフォルトCSSで上書きする方法は?
- 23. 3番目のアプリケーションがそれを上書きしたときにdjango change_form.htmlテンプレートをオーバーライドします
- 24. デフォルトのテーブルモデルはどのように上書きできますか?
- 25. ユーザエージェントのスタイルシートはどのように上書きできますか?
- 26. スーパーパワーゲームエンジンのブラウザではどうやってビルドできますか?
- 27. Bashスクリプトは上書きせずに書き込みますか?
- 28. Silverlight 2.0をサポートするすべてのブラウザでSilverlightのコンテキストメニューを上書きできますか?
- 29. symfony 3:リポジトリを上書きできません
- 30. 私のpythonコードは追加されていて、上書きされていません。どのように上書きできますか?
ようこそ!後半の回答はここを歓迎する以上のものであり、早急に答えるよりも正しい答えを心がけています。 – Pops
Ah。有難うございます。 「@@」について学ぶことで、私の即時の対応は「何からの曖昧さ」でしたか?なぜなら、 'view'(少なくとも私が試した場所)は、ブラウザのビューではなく、スキンテンプレートだからです。なぜなら、私はunrestrictedTraverse()を '@@ myview'に使うことができる理由を説明します。 – Auspex