Typo3:使用 USER_INT 和 HMENU 的 special.value

Typo3: Use USER_INT with HMENU's special.value

我只是想在我的 page.typoscript 文件中使用 PHP 代码以编程方式计算一个值。这就是我所做的:

        dataProcessing {
            1010 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
            1010 {
                levels = 2
                special = directory
                special.value = USER_INT
                special.value {
                    userFunc = Vendor\Extension\Utils\NavigationBarUtils->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 = Vendor\Extension\Utils\NavigationBarUtils->getPlatformRootPid
    }
    as = menuMain
}

最后,我想出了一个办法:

1010 { 
  levels = 2
  special = directory
  special.value.postUserFunc = Vendor\Extension\Utils\NavigationBarUtils->getPlatformRootPid
  as = menuMain 
}

实际上它做了我想要的,通过调用 PHP 方法以编程方式设置该值。