Использование ViewHelper внутри частичного пути

Я работаю над новым расширением, и моя модель имеет атрибут «тип», который может получать разные строки из формы 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>

Если я попытаюсь загрузить это в шрифт, ничего из моего расширения не будет отображаться, и нигде не будет сообщений об ошибках. Проблема зависит от моего помощника просмотра, потому что даже если я попытаюсь загрузить только это:

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

Ничего не возвращается. Если я вывожу только {sub.type}, он показывает мне строку, которую я хочу, но в нижнем регистре.


person simplychrislike    schedule 13.02.2014    source источник


Ответы (2)


Очевидно, ваша проблема в том, что ViewHelper не делает то, что вы хотите.

Прежде всего, имена ViewHelper должны быть написаны в нижнем верблюжьем регистре.

Во-вторых, вам не нужно помещать sub.type в фигурные скобки:

Этот синтаксис...

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

... должно хватить.

Затем Fluid будет искать ViewHelper с именем

Tx_MyExtension_ViewHelpers_String_UpperFirstCharacter

или пространство имен

\My\Extension\ViewHelpers\String\UpperFirstCharacter

Пожалуйста, проверьте, так ли это.

person lorenz    schedule 13.02.2014
comment
К сожалению, это не внесло изменений в мой внешний интерфейс. Даже если я вставлю в него тестовую строку следующим образом: {vh:string.upperFirstCharacter(string:example)} - person simplychrislike; 13.02.2014
comment
Пожалуйста, опубликуйте весь код ViewHelper. Выводит ли он вообще что-нибудь (например, если вы добавите return 'TEST';)? - person lorenz; 14.02.2014

Итак, я нашел проблему. 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 с пространством имен.

person simplychrislike    schedule 14.02.2014