1

archetypes.schemaextenderを使用して、ATEventにImageFieldを追加します。

extender.pyのコードはここにあります:http://pastealacon.com/29670

そしてconfigure.zcmlに私はこれを持っています:

<include package="archetypes.schemaextender" />
<adapter for="Products.ATContentTypes.interface.IATEvent"
    factory=".extender.ContentImageExtender" />

これはかなりうまく機能します。ATEventを編集すると、自分のフィールドが表示されました。問題ありません。

ただし、概要ビューでは、exists:item_object/imageはFalseを返します

アダプターではなく、オブジェクト自体にあるからだと思います...どうすれば動作させることができますか?

4

2 に答える 2

2

私が正しく覚えていれば、Ploneのサマリービューはimage_thumbをチェックします。スキーマエクステンダーは問題ありませんが、トラバースの変更を見逃しています。そのためには、モンキーパッチを適用する必要があります__bobo_traverse__。これを行う方法については、ATContentTypesのATImageをご覧ください。

于 2012-02-09T16:29:33.390 に答える
2

スキーマ拡張フィールドにアクセスする場合、Archetypesはその時点ではまだスキーマ拡張フィールドを認識していないため、Archetypesが通常自動的に作成するアクセサーに依存することはできません。

代わりに、Schema()メソッドを呼び出す必要があります。このメソッドは、オブジェクトの通常のスキーマとすべての拡張フィールドをフェッチします。そして、そこからフィールドを取得して、そのアクセサーを呼び出すことができます。

したがって、次のような画像を取得できます。

item_object.Schema().getField('image').getAccessor(item_object)()

folder_summary_view.ptテンプレートを確認しましたが、次のようにコードを変更する必要があります。

<a href="#"
   tal:define="image python:item_object.Schema().getField('image');
               image python:image and image.getAccessor(item_object)();"
   tal:condition="image"
   tal:attributes="href python:test(item_type in use_view_action, item_url+'/view', item_url)">
   <img src="" alt=""
        tal:replace="structure python:path('nocall:image/tag')(scale=0.5, css_class='tileImage')" />
</a>

その後、動作します。

編集:ggozadが提案するルートに行くこともできます。次に、bobo_traverseメソッドで、前述のように最初にSchema()を呼び出してフィールドを取得する必要があります。

于 2012-02-09T16:33:55.873 に答える