Контекст:
На сайте XWiki я интенсивно использую шаблоны скорости, чтобы задать c представление объектов. В конкретном шаблоне мне нужно иметь возможность иметь один уровень косвенности, чтобы разрешить специальную обработку для некоторых полей. Мне удалось поместить формулу в переменную и оценить ее во время рендеринга.
Мой текущий (упрощенный) код:
#set($special = { 'field1': 'F1: $pageDoc.display("field1") - F2: $pageDoc.display("field2")',
'field2': '' }
...
#foreach($field in $fields):
#if($special.contains($field))
#if("$special[$field]" != "")
<p>#evaluate($special[$field])</p>
#end
#else
<p>$pageDoc.display($field)</p>
#end
#end
На самом деле этот пример кода отображает список полей один в строке, в то время как некоторые из них ( специальные поля) отображаются 2 подряд ($pageDoc.display($field)
- это идиома XWiki для отображения получения отображаемого значения из объекта, содержащегося на странице)
Проблема:
Для другого движка рендеринга мне теперь нужно передать строки в движок:
$engine.addLine($pageDoc.display($field))
Но $engine.addLine(#evaluate($special[$field]))
не может работать, потому что #evaluate
напрямую выводит свою оценку и ничего не возвращает.
Вопрос
Есть ли способ сохранить результат переменной #evaluate
в переменной?