Существует расширение ATEvent с помощью ImageField: item_object / image return False - PullRequest
1 голос
/ 09 февраля 2012

С помощью archetypes.schemaextender я добавляю ImageField в ATEvent.

Код файла extender.py можно найти здесь: http://pastealacon.com/29670

А в файле configure.zcml у меня так:

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

Эта работа довольно хороша, когда я редактирую ATEvent, я видел свое поле, без проблем.

Но в сводном представлении существует: item_object / image return False

Я думаю, это потому, что он находится на самом объекте, а не на адаптере ... Как я могу заставить его работать?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Если вы хотите получить доступ к расширенному полю схемы, вы не можете полагаться на средства доступа, которые Архетипы обычно автоматически создают для вас, поскольку Архетипы в то время еще не знали о расширенных полях схемы.

Вместо этого вам нужно вызвать метод 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 (), как я упоминал выше.

2 голосов
/ 09 февраля 2012

Сводное представление в Plone проверяет image_thumb, если я правильно помню. Вы расширитель схемы в порядке, но вы пропустите изменение хода. Для этого вам нужно обезьяньим патчем __bobo_traverse__. Посмотрите на ATImage в ATContentTypes, чтобы увидеть, как это сделать.

...