![](/img/trans.png)
[英]TYPO3: how to migrate userFunc TypoScript condition to Symfony Expression Language?
[英]TYPO3 TypoScript How to pass current element identifier to userFunc
我们将事件索引到我们的 Solr 内核中。 现在我们需要在创建事件时无法生成的其他数据,因此我们需要在索引之前处理事件以填充新字段。
要在 userFunc 中进行必要的处理,我们至少需要一个来自当前被索引元素的标识符。
所以这里是配置,精简:
plugin.tx_solr.index.queue {
events = 1
events {
table = tx_events_domain_model_event
fields {
# this is the new field
eventTopicNames_textEdgeNgramM = SOLR_MULTIVALUE
eventTopicNames_textEdgeNgramM {
stdWrap.cObject = USER
stdWrap.cObject.userFunc = XXX\xxxevents\Helper\EventTopicNamesHelper->getValues
stdWrap.cObject.userFunc {
internalTopics = field:uid
uid.data = current:identifier
}
separator=,
}
# ... alot of other fields
}
所以在这里我试图调用我的 userFunc 来处理给定事件的主题名称 - 但我无法找出如何将当前元素的实际标识符传递给我的 userFunc。 我通常可以传递数据,例如一些硬编码的字符串,如internalTopics = "foobar"
可以正常工作。
我试过了
但实际上没有任何东西被解析为我们需要的值 - 而 output 只是相应的字符串值,如“current:uid”等等......
这里是小帮手class:
class EventTopicNamesHelper
{
public function getValues($content = '', $conf = array()) {
// $conf['userFunc.']['internalTopics']
// ... returning values suitable for SOLR_MULTIVALUE
}
}
非常感谢帮助
userFunc
的属性只是传递给 function,但在传递之前没有应用stdWrap功能。 因此,您的 userFunc 正在获取原始 TS array/values ,而您的 function 必须解释 TypoScript 本身。
为此,您需要一个ContentObjectRenderer
和您的属性的名称:
$internalTopics = $this->cObj->cObjGetSingle(
$config['internalTopics'],
$config['internalTopics.']
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.