0

我正在开发一个新的扩展,我的模型具有属性“类型”,它可以从 TCA 表单中获取不同的字符串。仅限字符串!我的模板应该加载的部分名称在我的模型的“类型”属性内。所以我的问题来了。从 TYPO3 4.7.x 开始,流体的 .html 文件名必须以大写字母开头。在 'type' 属性中,应该加载的部分名称总是小写的。为此,我编写了一个仅包含此方法的简单视图助手:

public function render($string) {

    return ucfirst($string);
}

在我的模板中,我尝试使用此视图助手作为部分路径:

{namespace vh=Tx_MyExtension_ViewHelpers}
<f:for each="{obj.subObjects}" as="sub">
    <f:render partial="OtherObject/{vh:String.UpperFirstCharacter(string:'{sub.type}')}" arguments="{sub:sub}" />
</f:for>

如果我尝试在字体端加载它,我的扩展程序中的任何内容都不会被渲染,并且任何地方都没有错误消息。问题取决于我的视图助手,因为即使我尝试只加载这个:

{vh:String.UpperFirstCharacter(string:'test')}
{vh:String.UpperFirstCharacter(string:'{sub.type}')}

什么都没有回来。如果我只输出 {sub.type} 它会显示我想要的字符串,但是是小写的。

4

2 回答 2

0

显然你的问题是你 ViewHelper 没有做你想做的事。

首先,ViewHelper 名称要使用 lowerCamelCase。

其次,您不需要将 sub.type 放在花括号中:

这种语法...

{vh:string.upperFirstCharacter(string:sub.type)}

...应该足够了。

Fluid 然后会寻找一个名为 ViewHelper

Tx_MyExtension_ViewHelpers_String_UpperFirstCharacter

或命名空间

\My\Extension\ViewHelpers\String\UpperFirstCharacter

请检查是否是这种情况。

于 2014-02-13T19:01:33.223 回答
0

所以我发现了这个问题。Fluid 无法处理命名空间。所以首先我的 ViewHelper 看起来像这样:

<php
namespace TYPO3\MyExtension\ViewHelpers\String;
class UpperFirstCharacterViewHelper ...

现在我更改了我的类的名称并删除了命名空间:

<php
class Tx_MyExtension_ViewHelpers_String_UpperFirstCharacterViewHelper ...

这就是它的工作原理。目前我使用 TYPO3 6.1.6。无论如何,谢谢洛伦兹的帮助!

编辑:

我完全智障了!Fluid CAN 处理命名空间。我只需要以正确的方式设置命名空间。这就是您在模板中设置命名空间的方式:

{namespace vh=TYPO3\MyExtension\ViewHelpers}

在此评论之上,您可以看到我的 ViewHelper 与命名空间的外观。

于 2014-02-14T15:07:54.997 回答