Apache Velocity: Que variáveis ??estão disponíveis em modelos?
Pergunta
É possível obter uma lista de variáveis ??dentro do modelo e preenchê-los usando a lista? Eu gostaria que meus usuários para criar seus modelos que significa que não vai saber de antemão o que variáveis ??estarão disponíveis?
EDIT:
Em meus usuários do modelo irá decidir o que será impresso. Como
$ utilizadores $ Últimas
mas do meu aplicativo eu não saberá quais as variáveis ??são usadas no modelo. Gostaria de obter uma lista como [os usuários mais recentes] que inclui todas as variáveis ??no modelo para que eu possa preenchê-los de acordo com as especificações do usuário.
Solução
Você pode ser capaz de reunir uma lista, tornando o modelo e usando um ReferenceInsertionEventHandler que constrói uma lista. O problema com isso, porém, é se os modelos têm coisas como:
#if( $foo ) $bar #else $woogie #end
O seu manipulador de eventos apenas iria ver nenhum $ bar ou US $ woogie, não ambos.
Esta classe não suportada (e talvez ultrapassada) podem ajudar:
http: //svn.apache. org / viewvc / velocidade / motor / ramos / 1.x / experimental / templatetool /
Outras dicas
Eu não acho que há uma maneira fácil de fazer isso sem substituir algumas das classes de velocidade.
Aqui estão algumas opções de como eu faria isso:
- Adicione todas as variáveis ??possíveis (eu sou assumindo que há um conjunto predefinido deles). Se ele é pesado desempenho olhar em cache.
- Peça aos usuários que os dados de que necessitam antes de renderizar modelo (se é uma coisa do tempo apenas uma forma, se essas variáveis ??não mudam frequentemente escrevê-los em db).
- Peça aos usuários para fornecer lista de variáveis ??que precisam de alguma específica
formato dentro do modelo para facilitar a análise antes
renderização de um modelo, como:
<!--%%__VARS__%%users,latest%%__VARS__%%-->
- Use regexp para procurar o arquivo de modelo e olhar para $ instâncias var, o que poderia ser complicado.
Aqui existem algumas discussões e idéias para resolver isso. A opção preferida é basicamente implementar um andarilho para a AST gerado de um molde. Não trivial.
Eu encontrei este um forro, (salvá-lo como um trecho) se você não pode se lembrar dela.
## #foreach($key in $context.keys) <pre> $key</pre> #end
Hope isso ajuda ...
Oh, remova o ##
como é comentado