Как можно получить только первое связанное FAL-изображение EXT: новостной записи в EXT: solr? - PullRequest
0 голосов
/ 27 августа 2018

Задача

После обновления веб-сайта 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 = /|
        }
    }
}

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

1 Ответ

0 голосов
/ 28 августа 2018

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

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

Поскольку у вас нет жидкости (вы хотите отдать ее солру), вы можете использовать хитрость: если у вас есть массив, вы можете отобразить всю необходимую информацию в одну строку, но вам нужен уникальный разделитель (может быть 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
        }
    }
}
...