Apache Velocity: какие переменные доступны в шаблонах? - PullRequest
2 голосов
/ 22 октября 2009

Можно ли получить список переменных внутри шаблона и заполнить их, используя этот список? Я хотел бы, чтобы мои пользователи создавали свои шаблоны, а это значит, что я не буду знать заранее, какие переменные будут доступны?

EDIT:

В моем шаблоне пользователи будут решать, что будет напечатано. Такие как

$ пользователей $ last

но из моего приложения я не буду знать, какие переменные используются в шаблоне. Я хотел бы получить список, такой как [последние пользователи], который включает все переменные в шаблоне, чтобы я мог заполнить их в соответствии со спецификацией пользователя.

Ответы [ 4 ]

1 голос
/ 23 октября 2009

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

#if( $foo ) $bar #else $woogie #end

Ваш обработчик событий будет видеть только $ bar или $ woogie, но не оба.

Этот неподдерживаемый (и, возможно, устаревший) класс может помочь:

http://svn.apache.org/viewvc/velocity/engine/branches/1.x/experimental/templatetool/

0 голосов
/ 01 мая 2013

Я нашел этот вкладыш (сохраните его как фрагмент), если вы не можете его запомнить.

<code>## #foreach($key in $context.keys) <pre> $key
# конец

Надеюсь, это поможет ...

О, удалите ##, как это прокомментировано

0 голосов
/ 25 сентября 2012

Здесь есть некоторые обсуждения и идеи, чтобы решить эту проблему. Предпочтительным вариантом является в основном реализация обходчика для сгенерированного AST шаблона. Не тривиально.

0 голосов
/ 22 октября 2009

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

Вот несколько вариантов, как бы я это сделал:

  1. Добавить все возможные переменные (я при условии, что есть предопределенный набор из них). Если это тяжелая производительность посмотрите в кеширование.
  2. Спросите пользователей, какие данные им нужны перед отображением шаблона (если это единовременная вещь, просто форма, если эти переменные меняются не часто запишите их в БД).
  3. Попросите пользователей предоставить список переменных, которые им нужны в некоторых конкретных форматировать внутри шаблона для простого разбора перед рендеринг шаблона, например: <!--%%__VARS__%%users,latest%%__VARS__%%-->
  4. Используйте regexp для поиска файла шаблона и поиска экземпляров $ var, что может быть сложно.
...