我正在开发一个新扩展,我的模型具有属性'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},它会显示我想要的字符串,但是以小写字母显示。
答案 0 :(得分:0)
显然,你的问题是你的ViewHelper并没有做你想做的事。
首先,ViewHelper名称将写在lowerCamelCase中。
其次,您不需要将子类型放在花括号中:
这种语法......
{vh:string.upperFirstCharacter(string:sub.type)}
......应该足够了。
Fluid将查找名为
的ViewHelperTx_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与命名空间的关系。