如何在TYPO3的Solr索引队列中为news记录配置多个详情页
TYPO3 Solr 为 newsrecords 配置多详情页的方案
可以通过两种常见方式实现,以下是具体配置步骤:
方法1:基于storagePid配置(推荐,匹配你当前不同文件夹存储的场景)
你可以在站点的Solr配置(TypoScript的plugin.tx_solr.index.queue配置段)中为newsrecords定义多个独立的队列配置项,分别绑定不同的storagePid和对应的详情页PID:
- 首先复制原生newsrecords的索引配置,分别命名为
news_news和news_event两个独立队列 - 分别为两个队列配置
storagePid参数,对应你的新闻存储文件夹PID、活动存储文件夹PID - 分别配置
additionalWhereClause过滤对应存储PID下的记录 - 分别配置
url.pageId为对应详情页的PID
示例配置代码:
plugin.tx_solr { index { queue { # 新闻类newsrecords配置 news_news = tx_news_domain_model_news news_news { table = tx_news_domain_model_news # 新闻存储文件夹PID,替换为你实际的PID storagePid = 123 additionalWhereClause = pid = 123 fields { # 绑定新闻详情页PID,替换为你实际的详情页PID url = TEXT url { typolink.parameter = 456 typolink.additionalParams = &tx_news_pi1[news]={field:uid} typolink.additionalParams.insertData = 1 typolink.returnLast = url typolink.useCacheHash = 1 } } } # 活动类newsrecords配置 news_event = tx_news_domain_model_news news_event { table = tx_news_domain_model_news # 活动存储文件夹PID,替换为你实际的PID storagePid = 789 additionalWhereClause = pid = 789 fields { # 绑定活动详情页PID,替换为你实际的详情页PID url = TEXT url { typolink.parameter = 987 typolink.additionalParams = &tx_news_pi1[news]={field:uid} typolink.additionalParams.insertData = 1 typolink.returnLast = url typolink.useCacheHash = 1 } } } } } }
配置完成后清空Solr索引、重新运行索引队列即可生效。
方法2:基于分类配置
如果你的新闻和活动是通过分类区分、存在同一存储文件夹下,可以通过additionalWhereClause关联分类表过滤,再绑定对应详情页PID:
- 先确认新闻分类的UID、活动分类的UID
- 分别写两个队列配置,用
additionalWhereClause关联sys_category_record_mm表过滤对应分类的记录 - 分别绑定不同的详情页PID即可
示例过滤条件写法参考:additionalWhereClause = EXISTS (SELECT 1 FROM sys_category_record_mm mm WHERE mm.uid_foreign = tx_news_domain_model_news.uid AND mm.uid_local = 10 AND mm.tablenames = 'tx_news_domain_model_news' AND mm.fieldname = 'categories')
其中uid_local = 10替换为你对应分类的UID即可。
内容的提问来源于stack exchange,提问作者Jacco van der Post
相关产品推荐
相关产品推荐

