коллектив.listingviews: как использовать настраиваемые поля для отображения поля изображения на основе ловкости и поля форматированного текста

Я хотел бы использовать панель управления collect.listingviews для отображения поля изображения и форматированного текста. У меня работает поле изображения, но я хотел бы знать, есть ли более простой способ получить изображение. Когда я пытаюсь получить поле расширенного текста, я получаю ошибку разрешений.

Подробности:

У меня есть настраиваемый тип контента ловкости (examplecontent) и коллекция, которая извлекает эти типы examplecontent.

Чтобы отобразить типы контента, я создал настраиваемое представление списка для коллекции. Цель состоит в том, чтобы для каждого извлеченного элемента отображалось следующее:

  • Поле RichText с именем «тело»
  • Поле изображения с именем «скриншот»

Это макет того, как может вести себя макет: макет макета

Чтобы получить поле изображения, я использую пользовательское выражение tal:

python:"<img src='%s/view/++widget++form.widgets.screenshot/@@download' />" % item.getObject().absolute_url()

Чтобы получить поле тела, я использую пользовательское выражение tal:

python:item.getObject().body

Поле изображения работает, но поле RichText дает следующее:

Объект RichTextValue. (Вы имели в виду .raw или .output?)

Когда я изменяю выражение tal для поля RichText на следующее:

python:item.getObject().body.output

Затем я получаю следующую ошибку разрешений:

Недостаточно прав У вас недостаточно прав для просмотра этой страницы. Если вы считаете, что получили это сообщение по ошибке, обратитесь к администрации сайта.


person David Bain    schedule 18.01.2014    source источник
comment
Только для диагностических целей, что произойдет, если вы используете item/getObject/body/output вместо python:item.getObject().body.output?   -  person SteveM    schedule 18.01.2014
comment
Я получаю следующее: traceback_info: (‹связанный метод mybrains.getObject объекта ‹Products.ZCatalog.Catalog.mybrains по адресу 0x6a09940››, 'body', ['output']) LocationError: (‹ связанный метод mybrains.getObject объекта ‹Products.ZCatalog.Catalog.mybrains по адресу 0x6a09940››, 'тело')   -  person David Bain    schedule 18.01.2014
comment
Дополнительная информация: я действительно пытаюсь добиться этого без создания индекса в portal_catalog. Пытаюсь понять, как далеко я могу зайти, используя только подход TTW.   -  person David Bain    schedule 18.01.2014


Ответы (1)


Во-первых, вы должны изменить

python:"<img src='%s/view/++widget++form.widgets.screenshot/@@download' />" % item.getObject().absolute_url()

to:

python:"<img src='%s/view/++widget++form.widgets.screenshot/@@download' />" % item.getURL()

Поскольку этот способ означает, что вам не нужно получать полный объект. Обратите внимание на использование метода getURL().

Для второго выражения попробуйте что-то вроде этого:

item/getObject/@@text-transform/body

or

python: item.getObject().restrictedTraverse('@@text-transform/body')

не проверено

person vangheem    schedule 18.01.2014
comment
использование item/getObject/@@text-transform/body дает следующее: Модуль plone.app.textfield.browser, строка 45, в вызове AttributeError: объект «функция» не имеет атрибута «тело» - person David Bain; 18.01.2014
comment
Мне пришлось использовать item.getURL(), поэтому я редактирую ответ выше, чтобы отразить это для изображения. - person David Bain; 18.01.2014
comment
Похоже, мне нужно было добавить поле body в метаданные portal_catalog {plone_site}/portal_catalog/manage › metadata › Добавить метаданные и добавить body, затем {plone_site}/portal_catalog/manage › Advanced › Clear and Rebuild. После этого я смог использовать следующее выражение: item/body/output. Так что это можно сделать, но шаг portal_catalog кажется обязательным и немного усложняет его для тех, кто работает исключительно через веб-интерфейс. - person David Bain; 19.01.2014
comment
Можете ли вы попробовать что-то вроде python: item.getObject().restrictedTraverse('@@text-transform/body'). Пожалуйста, просто поиграйте с этим выражением. Он должен делать то, что вам нужно. Использование portal_catalog определенно не очень хорошая идея. - person vangheem; 21.01.2014
comment
Ограниченный подход Traverse работает. Я удалил метаданные из каталога, и он все еще работал, так что это здорово. Спасибо, вангхим! Еще одно замечание: для изображений, которые я использую @@images, для своего снимка экрана я теперь использую следующее выражение: python:‹img src='%s/@@images/screenshot/preview' /› % item.getURL (). Что мне нравится в этом, так это то, что теперь я могу использовать функции изменения размера изображения (предварительный просмотр, большой палец, мини, плитка, большой и т. д.). - person David Bain; 21.01.2014