Как показать изображение типа контента Plone на основе Dexterity в виде списка? - PullRequest
5 голосов
/ 20 сентября 2011

Какой лучший способ показать изображение типа контента Plone на основе Dexterity в виде списка?

Допустим, у меня есть папка с объектами контента на основе Dexterity, которые предоставляют поле изображения, и я хочу перечислить объекты (как каталоги) вместе с их изображением.Можно отобразить изображения в списке, вызвав их абсолютный URL:

<img src="" tal:attributes="src string:${item/getURL}/@@images/image/thumb" />

. Однако Plone выдаст ошибку, если изображение не существует, и я не вижу хорошего способа проверить,изображение существует в шаблоне страницы.Мы явно не хотим разбудить объекты для распечатки, чтобы посмотреть изображение.

Нужно ли создавать в каталоге столбец метаданных изображения или есть лучшее решение, которого я не вижу?

Ответы [ 4 ]

5 голосов
/ 20 сентября 2011

Я бы не стал особо волноваться о пробуждении объектов в списке, если он правильно упакован. Если вы используете поля из plone.app.textfield и plone.namedfile, тогда большие данные хранятся в отдельных постоянных объектах, поэтому основной объект элемента содержимого является относительно легким. Конечно, сделайте свой собственный сравнительный анализ, если хотите быть уверенным, что это не повредит вашему делу.

4 голосов
/ 20 сентября 2011

Существует рецепт, как это сделать в Professional Plone 4 Development (я думаю, глава 10). К сожалению, я действительно не могу вспомнить, как это сделать прямо сейчас. :)

0 голосов
/ 02 сентября 2012

Пример проверки поля изображения доступен:

class product(grok.View):
    grok.context(IDexterityContent)
    grok.require('zope2.View')
    grok.name('view')

    def update(self):
        """
        """
        # Hide the editable-object border
        context = self.context
        request = self.request
        request.set('disable_border', True)


    #brain come from contained image field 's object
    def isImageAvalable(self,brain=None):
        """判断图片字段是否有效"""
        try:
            if brain is None:
                image = self.context.image.size
            else:
                 image = brain.getObject().image.size

            return (image != 0)

        except:
            return False
0 голосов
/ 21 сентября 2011

Создайте метаданные в portal_catalog, где вы будете хранить путь к действительному изображению. Создайте сценарий python с тем же именем, который будет проверять, есть ли у объекта изображение, а в случае, если изображение отсутствует, возвращает скрипт по умолчанию.

...