首页 > 解决方案 > 怎么可能只获得 EXT:solr 中 EXT:news 记录的第一个相关 FAL 图像?

问题描述

问题

在将 TYPO3 网站从 TYPO3 4.5 更新到 TYPO3 8.7 后,有必要重新集成 EXT:solr 的前端(因为更改为 Fluid 模板)。

我必须显示将tx_news_domain_model.fal_mediashowInPreview 设置为 1 或 2 的新闻记录的第一个 FAL 相关图像。

我的实际解决方案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 = /|
        }
    }
}

如何检查相关图像记录是否具有某些特定属性?

标签: solrtypo3typo3-7.6.xtypo3-8.xtypo3-extensions

解决方案


如果您不想更改文件的顺序,您可以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
        }
    }
}

推荐阅读