3

オーバーライドしたいビューは、「ixds.covalent」パッケージの「behaviors」フォルダー内の「covalent_member.py」というファイルのクラス「ActivateForm」によって定義されています。したがって、このパッケージ (ixds.covalent) 内にビューのカスタム テンプレートを配置する場所は次のとおりです。

ixds/covalent/behaviors/covalent_member_templates/activateform.pt

(これは機能します)

しかし、代わりに、という名前のファイルを作成して、テーマ パッケージでカスタマイズを試みます。

ixds.covalent.behaviors.covalent_member_templates.activateform.pt

私のテーマの「オーバーライド」フォルダに、何も起こりません(もちろん、インスタンスを再起動したり、テーマを無効にしてから再び有効にしたり、いくつかの製品を再インストールしたり、ビルドアウトを実行したりしました). カスタム テンプレート「activateform.pt」が ixds.covalent パッケージにまだ存在するかどうかに関係なく、違いはないようです (まあ、実際にはそうです: 削除すると、「そのようなファイルまたはディレクトリはありません」というエラーが表示されます)。 . ただし、問題は常に同じです: テーマの "override" ディレクトリにあるテンプレートは取得されません)。

同じ「オーバーライド」フォルダーに他に 5 つのオーバーライド テンプレートがあり、それらはすべて機能しています。私は z3c.jbot 0.7.1 (利用可能な最新版)、Plone 4.2.4 (最新の安定版)、および Github の ixds.covalent の最新の利用可能な Git バージョンを使用しています。

私は何が間違っている可能性がありますか?

4

1 に答える 1

3

Github でこれixds.covalentを使用していると仮定します。

ここでは、2 つの異なるテンプレート登録メカニズムが使用されます。

ActivateFormクラスは から派生し、次にパッケージplone.directives.form.Formを使用します。five.grokしたがってActivateForm、起動時に "grokked" になります。つまり、Zope への登録は自動的に行われ、別のファイルに個別のエントリはありません。の開発者にとって非常に便利ですixds.covalent

grok メカニズムにより、開発者はフォーム用に自動登録されたテンプレートを作成することもできます。モジュールの名前に「_templates」を加えた名前のディレクトリ ( covalent_member_templates) と、クラス名に一致するファイル( ) を作成できますactivateform.pt

しかし、この場合、開発者はそれを選択していません。plone.directives.form専用のテンプレートを必要としないなど、開発者がフォームを簡単に作成できるようにするために存在します。これまで見てきたように、標準の grok アプローチに従ってパッケージ内にそのテンプレートを作成することを妨げるものは何もありません。ixds.covalent

もちろん、この方法でサードパーティのパッケージを編集することはお勧めできません。独自のパッケージでフォームをカスタマイズするのは正しいことです。z3c.jbotただし、オーバーライドする既存のテンプレートがないため、使用できません。クラスをオーバーライドし、ActivateForm自分で grok テンプレート手法を使用する必要があります。

したがって、 my.theme パッケージに次のものが含まれていることを確認してくださいinterfaces.py

from zope.interface import Interface

class IMyTheme(Interface):
    """Marker interface that defines a ZTK browser layer.
    """

profiles/default/browserlayer.xml

<layers>
  <layer
      name="my.theme"
      interface="my.theme.interfaces.IMyTheme"
      />
</layers>

configure.zcml

...
<!-- Grok the package -->
<grok:grok package="."/>
...

covalent_member.py

from five import grok
from ixds.covalent.behaviors.covalent_member import ActivateForm \
    as OriginalActivateForm
from my.theme.interfaces import IMyTheme

class ActivateForm(OriginalActivateForm):
    grok.layer(IMyTheme)

covalent_member_templates/activateform.pt

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      i18n:domain="my.theme"
      metal:use-macro="context/main_template/macros/master">

    <metal:block fill-slot="main">

        <h1 class="documentFirstHeading" tal:content="view/label | nothing" />

        <p>Hey there. I'd really like you to fill out this form.</p>

        <div id="content-core">
            <metal:block use-macro="context/@@ploneform-macros/titlelessform" />
        </div>

    </metal:block>

</html>

...そして、カスタマイズされたテンプレートが表示されます。

于 2013-02-08T09:22:07.803 に答える