在部分路径中使用ViewHelper

时间:2014-02-13 17:48:46

标签: typo3 fluid typo3-6.1.x viewhelper

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

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>

如果我尝试在fontend中加载它,我的扩展名中的任何内容都不会呈现,并且任何地方都没有错误消息。问题取决于我的视图助手,因为即使我尝试仅加载它:

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

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

2 个答案:

答案 0 :(得分:0)

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

首先,ViewHelper名称将写在lowerCamelCase中。

其次,您不需要将子类型放在花括号中:

这种语法......

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

......应该足够了。

Fluid将查找名为

的ViewHelper
Tx_MyExtension_ViewHelpers_String_UpperFirstCharacter

或命名空间

\My\Extension\ViewHelpers\String\UpperFirstCharacter

请检查是否属实。

答案 1 :(得分:0)

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

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

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

<php
class Tx_MyExtension_ViewHelpers_String_UpperFirstCharacterViewHelper ...

这是它的工作原理。目前我正在使用TYPO3 6.1.6。 无论如何,谢谢你lorenz的帮助!

修改

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

{namespace vh=TYPO3\MyExtension\ViewHelpers}

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