代码之家  ›  专栏  ›  技术社区  ›  simplychrislike

在部分路径中使用ViewHelper

  •  0
  • simplychrislike  · 技术社区  · 10 年前

    我正在开发一个新的扩展,我的模型具有属性“type”,它可以从TCA表单中获取不同的字符串。仅限字符串! 模板应加载的部分的名称位于模型的“type”属性中。所以我的问题来了。由于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>
    

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

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

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

    2 回复  |  直到 10 年前
        1
  •  0
  •   lorenz mac    10 年前

    很明显,你的问题是你的ViewHelper没有做你想做的事情。

    首先,ViewHelper名称将以lowerCamelCase编写。

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

    此语法。。。

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

    …应该足够了。

    Fluid将查找名为的ViewHelper

    Tx_MyExtension_ViewHelpers_String_UpperFirstCharacter
    

    或以名称命名

    \My\Extension\ViewHelpers\String\UpperFirstCharacter
    

    请检查是否存在这种情况。

        2
  •  0
  •   Community THelper    7 年前

    所以我发现了问题。流体无法处理名称空间。首先,我的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在名称空间中的样子。