Как возможно получить только первое связанное FAL-изображение записи EXT:news в EXT:solr?

Проблема

После обновления веб-сайта TYPO3 с TYPO3 4.5 до TYPO3 8.7 необходимо было повторно интегрировать интерфейс EXT:solr (из-за изменения шаблонов на Fluid).

Мне нужно отобразить первое связанное с FAL изображение tx_news_domain_model.fal_media записи новостей, для которой showInPreview установлено на 1 или 2.

Мое фактическое решение для plugin.tx_solr.index.queue.news.fields....

извлекает каждое изображение и ограничивается одним. Но этого недостаточно, мне нужно where=showinpreview=1

image_stringS = TEXT
image_stringS {
    value = /typo3conf/ext/theme/Resources/Public/Images/solrImageDummy.gif
    override.cObject = FILES
    override.cObject {
        references {
            table = tx_news_domain_model_news
            uid.data = field:uid
            fieldName = fal_media
        }

        begin = 0
        maxItems = 1

        renderObj = IMG_RESOURCE
        renderObj {
            file {
                import.dataWrap = {file:current:storage}:{file:current:identifier}
                width = 50c
                height = 50c
            }

            stdWrap.wrap = /|
        }
    }
}

Как можно также проверить, обладает ли связанная запись изображения некоторыми специфическими свойствами?


person Josef Glatz    schedule 27.08.2018    source источник
comment
Я думаю, что это действительно плохой дизайн от EXT:news. В проекте, над которым я сейчас работаю, я полностью деактивировал все поля мультимедиа и добавил свои собственные. По сути, у меня есть поле, в котором вы можете хранить только одно изображение, которое используется для предварительного просмотра, и другое поле, в котором вы можете добавить несколько дополнительных изображений. С таким подходом мне не приходится принимать странные решения в моем коде, и я думаю, что это также может принести пользу вашему делу.   -  person Shufla    schedule 28.08.2018


Ответы (1)


Если вам не нужно менять порядок файлов, вы можете использовать sorting для получения файлов, которые вас интересуют в начале.

В противном случае вам нужно опустить maxItems и, возможно, ограничить файлы в вашей жидкости.
Затем вы можете отфильтровать в renderObj некоторые простые .stdWrap.if файлы, которые должны быть в массиве, переданном жидкости.

Поскольку у вас нет жидкости (вы хотите передать ее в solr), вы можете использовать хитрость: если у вас есть массив, вы можете отобразить всю необходимую информацию в одну строку, но вам нужен уникальный разделитель (может быть stdWrap.wrap = /|##!!##), тогда вы затем разделите его, чтобы использовать только первую запись.

override.cObject {
    :
    stdWrap.split {
        token = ##!!##
        ## we need only the first, but does indexing start with 0 or 1?
        ## and will 0 be recognized?
        returnKey = 0
    }
}

может вам это нужно:

override.cObject {
    stdWrap.split {
        :
        cObjNum {
            # render first entry
            1 = TEXT
            1.current = 1

            # ignore all further entries
        }
    }
}
person Bernd Wilke πφ    schedule 28.08.2018