Templates TWiki
Definição dos Templates utilizados para renderizar todas as páginas HTML mostradas no TWiki
Visão Geral
O novo sistema de Templates modulares oferece flexibilidade e um controle fácil sobre o layout de todas as páginas TWiki. O Template mestre agrupa partes utilizadas em vários Templates - como cabeçalhos e rodapés - em um arquivo comum. Variáveis especiais permitem que layouts individuais incluam partes de um Template mestre - as varáveis são misturadas com código HTML para conteúdos específicos de cada Templates. Os Templates são utilizados para definir o
layout da página, e também para fornecer um
conteúdo padrão para páginas novas.
Principais alterações do sistema de templates anterior
Onde os antigos Templates eram cada um um documento HTML completo, os novos Templates são definidos usando-se variáveis para incluir partes de um arquivo mestre. Agora você pode mudar apenas uma instância de um elemento comum e afetar todas as suas ocorrências; antes, cada Template afetado tinha de ser mudado. Isso simplifica a conversão de Templates em arquivos XHTML, e fornece uma solução mais versátil para Templates e
TwikiSkins?. O novo sistema:
- separa uma lista de partes comuns de Templates em um Template base que é incluído em todos os Templates relacionados;
- define variáveis comuns, como um separador padrão (ex: "|"), no modelo base;
- define valores de variáveis em Templates individuais e retorna-os para o modelo base.
Como as Variáveis de Template Funcionam
- Diretivas especiais para Templates (ou comandos de preprocessador) são incluídas em Templates normais.
- Todo o preprocessamento de Templates é feito em
&TWiki::Store::readTemplate() de modo que o invocador apenas recebe um arquivo de Template expandido (igual a antigamente).
- As directives são do formulário
%TMPL:<key>% e %TMPL:<key>{"attr"}%.
- Directives:
-
%TMPL:INCLUDE{"file"}%: Inclui um arquivo de Template. O diretório de Templates da web é vasculhado antes, e depois os Templates do diretório raiz (twiki/templates).
-
%TMPL:DEF{"var"}%: Define uma variável. O texto entre isso e a directive END não é retornado, mas quardado numa hash para uso posterior.
-
%TMPL:END%: Termina uma definição de variável.
-
%TMPL:P{"var"}%: Mostra uma variável previamente definida.
- As variáveis são globais: elas não recebem parâmetros.
- Procesamento duplo permite que você utilize uma variável antes de declará-la.
- Templates e TWikiSkins? funcionam de forma transparente e intercambiável. Por exemplo, você pode criar uma skin que substitui apenas o Template mestre
twiki.tmpl, como twiki.print.tmpl, que redefine o cabeçalho e o rodapé.
-
O uso de directives de Template é opcional: Templates funcionam sem ele.
-
NOTE: Template directives work only for templates: they do not get processed in topic text.
Tipos de Template
Existem 3 tipos de Template:
- Template Mestre: Guarda partes comuns; incluído por outros Templates.
- Templates de Página HTML: Define o layout de páginas TWiki
- Tópicos Padrão: Definem o texto padrão quando você cria um novo tópico
Templates Mestre
Partes comuns, aparecendo em dois ou mais templates, podem ser definidas em um template mestre e depois compartilhadas por outros:
twiki.tmpl é o template mestre padrão.
| Variáble: |
Define: |
| %TMPL:DEF{"sep"}% |
"|" separador |
| %TMPL:DEF{"htmldoctype"}% |
Início de todas as páginas HTML |
| %TMPL:DEF{"standardheader"}% |
Cabeçalho padrão (ex: ver, índice, busca) |
| %TMPL:DEF{"simpleheader"}% |
Cabeçalho padrão com links reduzidos (ex: editar, anexar, oops) |
| %TMPL:DEF{"standardfooter"}% |
Rodapé,excluindo partes de revisão e copyright |
| %TMPL:DEF{"oops"}% |
Esqueleto da caixa de diálogo oops |
Páginas HTML Template
O TWiki usa templates HTML para todas as ações, como ver tópicos, editar, and previsualizar. Isso permite que você mude a aparência e o tom de muitas páginas apenas editando alguns arquivos.
Os templates estão no diretório
twiki/templates . Como um exemplo,
twiki/templates/view.tmpl é o template para o script
twiki/bin/view . Templates podem ser substituídos em webs individuais. A ordem de procura é a seguinte:
-
twiki/templates/$webName/$scriptName.tmpl
-
twiki/templates/$scriptName.tmpl
-
$webName é o nome da web (ex: Main)
-
$scriptName é o script (ex: view).
NOTE: As
TWikiSkins? podem ser definidas para se sobreporem aos templates padrão.
Variáveis especiais são utilizadas em templates, especialmente em
view, para mostrar
meta dados.
Templates de Tópicos
Template de topicos definem o texto padrão para novos tópicos. Existem três tipos de templates de tópicos:
Todos os templates de tópico estã localizados na web TWiki. O
WebTopicEditTemplate pode ser sobreposto. Quando você cria um novo tópico, o TWiki o tópico para ser utilizado como conteúdo padrão na seguinte ordem:
- Um nome de tópico especificado pelo parâmetro CGI
templatetopic .
- WebTopicEditTemplate na web atual
- WebTopicEditTemplate na web TWiki
Editando Templates de Tópicos e Expansão de Variáveis
As variáveis seguintes são expandidas quando um usuário cria um novo tópico baseado num template de tópico:
| Variável: |
Descrição: |
%DATE% |
Data atual, e.g. 21 Nov 2009 |
%WIKIUSERNAME% |
Nome do usuário, e.g. Main.TWikiGuest |
%URLPARAM{"name"}% |
Valor de um parâmetro passado na URL com o nome 'name' |
%NOP% |
Uma variável de não-operação que é removida. Útil para prevenir uma SEARCH de alcançar um tópico de edição; útil também para escapar uma variável, como em %URLPARAM%NOP%{...}% |
%NOP{ ... }% |
Um texto de não-operação que é removido. Útil para proteger um template contra edição, mas não os tópicos baseados no template. Veja as notas abaixo. Exemplo: %NOP{ * Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup }% |
Notas:
- Diferentemente de outras variáveis,
%NOP{ ... }% pode ocupar várias linhas.
- A busca para o padrão de fechamento
}% é "non-greedy" (não-avarenta), isto é, pára após a primeira ocorrência. Isto significa que, quando você precisa escapar variáveis com parâmetros localizados dentro de um %NOP{ ... }%: Insira um %NOP% entre } e %. Um exemplo besta: %NOP{ %GMTIME{"$year"}%NOP%% }%.
Todas as outras variáveis vão sem modificações para o tópico.
Templates de Tópicos em Ação
Aqui está um exemplo para criar novos tópicos baseado num template de tópicos:
O formulário acima pede por um nome de tópico. Uma tag escondida chamada de
templatetopic especifica
ExampleTopicTemplate? como o template de tópico a ser utilizado. Aqui está o fonte HTML do formulário:
<form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%"}%/">
* Novo template de tópico:
<input type="text" name="topic" value="ExampleTopic%SERVERTIME{$yearx$mox$day}%" size="23" />
<input type="hidden" name="templatetopic" value="ExampleTopicTemplate" />
<input type="hidden" name="onlywikiname" value="on" />
<input type="submit" value="Create" />
(date format is <nop>YYYYxMMxDD)
</form>
O parâmetro
onlywikiname força
WikiWords para nomes de tópico.
TIP: Você pode usar as variáveis
%WIKIUSERNAME% e
%DATE% nos seus templates de tópicos para incluir a assinatura de quem gerou o tópico. as variáveis são expandidas em texto quando um tópico é criado. A assinatura padrão é:
-- %WIKIUSERNAME% - %DATE%
Templates por Exemplo
Anexado está o exemplo de um template baseado em oops,
oopsbase.tmpl e uma example oops dialog
oopstest.tmpl baseada no template base. %A%
NOTE: Esta não é a versão final, apenas um demo rápido e simples.
Template de base oopsbase.tmpl
A primeira linha declara uma variável delimitadora chamada "sep", utilizada para separar mútltiplos itens linkados. A variável pode ser invocada em qualquer lugar digitando-se
%TMPL:P{"sep"}%
%TMPL:DEF{"sep"}% | %TMPL:END%
<html>
<head>
<title> %WIKITOOLNAME% . %WEB% . %TOPIC% %.TMPL:P{"titleaction"}%</title>
<base href="%SCRIPTURL%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%">
<meta name="robots" content="noindex">
</head>
<body bgcolor="#FFFFFF">
<table width="100%" border="0" cellpadding="3" cellspacing="0">
<tr>
<td bgcolor="%WEBBGCOLOR%" rowspan="2" valign="top" width="1%">
<a href="%WIKIHOMEURL%">
<img src="%PUBURLPATH%/wikiHome.gif" border="0"></a>
</td>
<td>
<b>%WIKITOOLNAME% . %WEB% . </b><font size="+2">
<B>%TOPIC%</b> %TMPL:P{"titleaction"}%</font>
</td>
</tr>
<tr bgcolor="%WEBBGCOLOR%">
<td colspan="2">
%TMPL:P{"webaction"}%
</td>
</tr>
</table>
--- ++ %TMPL:P{"heading"}%
%TMPL:P{"message"}%
<table width="100%" border="0" cellpadding="3" cellspacing="0">
<tr bgcolor="%WEBBGCOLOR%">
<td valign="top">
Topic <b>%TOPIC%</b> . {
%TMPL:P{"topicaction"}%
}
</td>
</tr>
</table>
</body>
|
Test template oopstest.tmpl
Cada oops templade apenas define variáveis e inclui o template base que faz o layout.
%TMPL:DEF{"titleaction"}% (test =titleaction=) %TMPL:END%
%TMPL:DEF{"webaction"}% test =webaction= %TMPL:END%
%TMPL:DEF{"heading"}%
Test heading %TMPL:END%
%TMPL:DEF{"message"}%
Test =message=. Blah blah blah blah blah blah blah blah blah blah blah...
* Some more blah blah blah blah blah blah blah blah blah blah...
* Param1: %PARAM1%
* Param2: %PARAM2%
* Param3: %PARAM3%
* Param4: %PARAM4%
%TMPL:END%
%TMPL:DEF{"topicaction"}%
Test =topicaction=:
[[%WEB%.%TOPIC%][OK]] %TMPL:P{"sep"}%
[[%TWIKIWEB%.TWikiRegistration][Register]] %TMPL:END%
%TMPL:INCLUDE{"oopsbase"}%
|
</table >
Um screenshot de oopstest.tmpl
Com a URL: .../bin/oops/Sandbox/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
Problemas Conhecidos
- Um problema de se referir a um template mestre é que só se pode testar um template dentro do TWiki, onde as variáveis inclusas são resolvidas. No sistema anterior, cada template era um documento HTML estruturalmente completo, com a extensão
.tmpl - ele continha %VARIABLES% não resolvidas, mas podia ser testado em um browser.
-- PeterThoeny - 01 Feb 2003
-- MikeMannix - 14 Sep 2001
-- TWiki:Main/DavidLeBlanc - 11 Mar 2002