gpt4 book ai didi

TYPO3:如何将 userFunc TypoScript 条件迁移到 Symfony 表达式语言?

转载 作者:行者123 更新时间:2023-12-03 14:32:49 24 4
gpt4 key购买 nike

如何迁移此 TypoScript 条件以与 Symfony 表达式语言完全兼容 TYPO3 9.5 中的条件?
[userFunc = TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('fluid_styled_content')]

最佳答案

您现在必须提供自己的功能。

这里有教程:https://usetypo3.com/symfony-expression-language-in-typo3.html

但基本上你会有文件 yourext/Configuration/ExpressionLanguage.php内容如下:

<?php

return [
'typoscript' => [
\Vendor\Yourext\ExpressionLanguage\ConditionProvider::class
]
];

这会为 typescript 上下文注册一个条件提供程序。

要添加简单的函数,您需要将函数提供程序类设置为 expressionLanguageProviders那个类的。

可能看起来像这样:

<?php

namespace Vendor\Yourext\ExpressionLanguage;

use TYPO3\CMS\Core\ExpressionLanguage\AbstractProvider;

class ConditionProvider extends AbstractProvider
{
public function __construct()
{
$this->expressionLanguageProviders = [
UtilitiesConditionFunctionsProvider::class,
SomeOtherConditionFunctionsProvider::class,
AThirdConditionFunctionsProvider::class,
];
}
}

(甚至可能直接在属性上设置它,而不是使用构造函数,但这就是我所做的)。

这些函数提供者需要实现 \Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface界面,基本上只是一个 getFunctions需要返回 \Symfony\Component\ExpressionLanguage\ExpressionFunction 数组的方法实例。

我的 UtilitiesConditionFunctionsProvider 看起来像这样:

<?php

namespace Vendor\Yourext\ExpressionLanguage;

use Symfony\Component\ExpressionLanguage\ExpressionFunction;
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

class UtilitiesConditionFunctionsProvider implements ExpressionFunctionProviderInterface
{

/**
* @return ExpressionFunction[] An array of Function instances
*/
public function getFunctions()
{
return [
$this->getIntersectsFunction(),
$this->getExtensionLoadedFunction(),
];
}

/**
* @return ExpressionFunction
*/
protected function getIntersectsFunction()
{
return new ExpressionFunction('intersects', function () {
// Not implemented, we only use the evaluator
}, function ($arguments, $left, $right) {
return count(array_intersect($left, $right)) > 0;
});
}

protected function getExtensionLoadedFunction()
{
return new ExpressionFunction('loaded', function () {
// Not implemented, we only use the evaluator
}, function ($arguments, $extKey) {
return ExtensionManagementUtility::isLoaded($extKey);
});
}
}

有了它,现在可以使用 intersects( ... )loaded( ... )在我的条件下。

关于TYPO3:如何将 userFunc TypoScript 条件迁移到 Symfony 表达式语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58821112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com