我只是试图在page.typoscript
文件中使用PHP代码以编程方式计算一个值。这就是我所做的:
dataProcessing {
1010 = TYPO3CMSFrontendDataProcessingMenuProcessor
1010 {
levels = 2
special = directory
special.value = USER_INT
special.value {
userFunc = VendorExtensionUtilsNavigationBarUtils->getPlatformRootPid
}
as = menuMain
}
...
}
这个方法叫做
public function getPlatformRootPid(): int
{
return 1;
}
当我加载menuMain
为空的任何页面时。命名空间正确。此外,我还使用了这样的方法来计算同一个page.typoscript
文件中的其他一些值,它们都能工作。
当将该值设置为special.value = 1
时,它将按预期工作。
MenuProcessor(即HMENU(的special.value
和USER_INT是否有问题?它们在某种程度上是不相容的吗?还是我错过了别的东西?
提前感谢您!
我认为您错过了类型。
special.value
需要一个值,该值可能会被.stdWrap
函数修改。
您试图将属性修改为对象,但这是不可行的
您分配了值(字符串(USER_INT
和stdWrap函数userFunc
,但该函数不存在。
如果要将对象用于某个值,则需要使用.cObject
。所以你的解决方案可能是:
1010 {
levels = 2
special = directory
special.value.cObject = USER_INT
special.value.cObject {
userFunc = VendorExtensionUtilsNavigationBarUtils->getPlatformRootPid
}
as = menuMain
}
最后,我找到了一种方法:
1010 {
levels = 2
special = directory
special.value.postUserFunc = VendorExtensionUtilsNavigationBarUtils->getPlatformRootPid
as = menuMain
}
实际上,它实现了我想要的,通过调用PHP方法以编程方式设置该值。