2016-07-27 2 views
2

В одном из моих шаблонов NEOS я пытаюсь решить простую задачу создания случайного числа (в пределах заданного диапазона) и сохранить его в переменной для последующего использования.Fluid-Alias-View-Helper с результатом другого помощника представления

Поскольку ни один из помощников по умолчанию не предлагает такую ​​функцию, я разработал свой собственный помощник вида, который ожидает минимальное и максимальное значение. Внутри помощник вида использует php rand($min, $max).

Следующий пример работает в моем шаблоне:

site:RandomNumber(0, 17) 

Как и ожидалось, это выводит случайное число. Однако теперь мне нужно сохранить результат в переменную, так как я должен использовать его более одного раза.

я наткнулся флюиды псевдоним -view-помощника:

<f:alias map="{number: 33}"> 
    The number is {number} 
</f:alias> 

Это приводит к:

The number is 33 

Теперь я хочу номер не быть 33, но результат моего RandomNumber -view-хелперов.

Я пытался что-то вроде:

<f:alias map="{number: {site:RandomNumber(0, 17)}}"> 
    The number is {number} 
</f:alias> 

Это, однако, бросает исключение, говоря:

The argument "map" was registered with type "array", but is of type "string" 
in view helper "TYPO3\Fluid\ViewHelpers\AliasViewHelper" 

Документах по f:alias вид-хелперов говорят принятые ценности и другие вид-хелперы, но они никогда Приведите примеры.

Я полностью ошибаюсь при таком подходе? Невозможно ли просто назначить простую переменную в шаблоне жидкости?

Дополнительная информация: У меня есть ползунок на веб-сайте, который должен начинаться с другой слайд на (почти) каждой загрузке страницы. Поэтому мне нужно взять этот случайный номер слайда, который я должен разделить на разметку слайдера несколько раз.

ответ

2

Я вновь выкопал в нем и первым попытался вывести:

{site:randomNumber(0,17)} <- was output as the string, not the expected result 
<site:randomNumber min="0" max="17" /> <- this was the expected output 

Первый из них, это одна мне нужна, чтобы работать, чтобы использовать его в псевдоним-хелперов права?

Так что я сначала должен был убедиться, что этот первый работает!

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

{site:randomNumber({min: 0, max: 17})} 

Исходя из PHP Я думал, что предоставление массива с аргументами было решением. Однако я был неправ.

погуглить для «инлайн жидкости нотации» привели меня к этому ресурсу: https://wiki.typo3.org/Fluid_Inline_Notation

Там я увидел, что я был очень близок. Аргументы должны быть даны по именам, но не в массиве нотации, так ЭТА произвела ожидаемый результат:

{site:randomNumber(min: 0, max: 17)} 

Так что я получил один шаг к решению. Так что я взял этот фрагмент кода и вставить его в псевдониме-помощник, как это:

<f:alias map="{number: {site:randomNumber(min: 0, max: 17)}}"> 
    The number is {number} 
</f:alias> 

Это, однако, приведет к тому же исключению, как и раньше. Я чувствовал, что я был близок, так догадалась обвести выражение в одинарные кавычки, например:

<f:alias map="{number: '{site:randomNumber(min: 0, max: 17)}'}"> 
    The number is {number} 
</f:alias> 

Это все, что я хотел. Трудно поверить, что вам нужно 2 дня, чтобы понять это, поскольку документация действительно плохая.

+0

У меня была аналогичная проблема, и из-за вашего ответа здесь я заметил, что мой тоже не работал, потому что я не добавлял лишних кавычек вокруг одного выражения !! Благодаря! :) Вы должны поместить их вокруг всего выражения, даже если фигурные скобки не находятся вокруг всего выражения, как в моем случае: 'arguments = {" property: 'AdditionalInfos. {I.index} .infoValue' "}' –

1

Это должно быть {site:randomNumber(min: 1, max:10)}. Обратите внимание на корпус. Это предполагает, что вы зарегистрировали пространство имен site, как это в начале вашего шаблона:

{namespace site=Vendor\ExtName\ViewHelpers} 

EDIT: Аргументы должны соответствовать именам параметра ViewHelper делают функцию.

+0

Конечно, пространство имен установлено. В противном случае хелпер не работал бы в нормальном выходе ''. Но я проверил обсадную колонну. Очевидно, что корпус не имеет никакого значения: '

Смежные вопросы