Usando a diretiva (:if:)
A diretiva (:if:)
A diretiva if permite que partes de uma página sejam incluidas ou excluidas da renderização. As formas genéricas da diretiva (:if:)
são:
(:if cond param:) texto (:ifend:)
(:if cond param:) texto (:else:) texto (:ifend:)
(:if cond param:) texto (:elseif cond param:) texto (:ifend:)
Onde "cond" é uma condição à ser testada, e "param" é um parâmetro ou outro argumento da condição.
Note que (:if:)
sem parâmetros e (:ifend:)
sõ identicos. Note também que (:if cond:)
fecha automaticamente uma condição prévia. Para aninhamento em múltiplos níveis, veja Condições aninhadas.
Condições embutidas
As condições embutidas incluem:
(:if name PAGENAME:)
| -
| Página atual tem o nome "PAGENAME "
|
(:if group GROUPNAME:)
| -
| Grupo atual tem nome "GROUPNAME "
|
(:if auth LEVEL PAGENAME:)
| -
| usuário está autorizado - significa "o que é permitido que o usuário faça" - corresponde a "LEVEL " onde LEVEL pode ser: read , edit , upload , attr ou admin ; PAGENAME é opcional.
|
(:if authid:)
| -
| Usuário atual esta autenticado - significa que eles provaram quem são ataravés do login - para usar essa capacidade é necessário o uso da receita AuthUser? ou outras que usem a variável $AuthId .
|
(:if enabled InvalidLogin:)
| -
| usuário e senha não foram atenticados. É necessário o uso da receita AuthUser.
|
(:if true:)
| -
| sempre irá incluir o texto
|
(:if false:)
| -
| sempre irá excluir o texto (mesmo que comentário)
|
(:if attachments:)
| -
| A Página tual tem um ou mais arquivos anexados
Se usado na barra lateral, cabeçalho, ou rodapé a condição será aplicada somente a página principal.
|
(:if date DATA VALOR:)
| -
| DATE pode ser ano-mês. ano-mês-dia é opcional.
Avaliado com verdadeiro se VALOR está dentro da DATA ("now" ou "today" é assumido se VALOR for omitido, como nos exemplos a seguir.) (Note que VALOR pode ser uma data reconhecida via strtotime() considerando que DATA [ou DATA1 and DATA2 abaixo] tem um formato mais fixo que explicitamente excluem espaços. Qualquer espaço em DATA1 or DATA2 podem causar resultados imprevisíveis.)
|
(:if date DATA.. VALOR:)
| -
| verdadeiro se VALOR (ou data atual se omitida) é DATA or later (unlimited)
|
(:if date ..DATA VALOR:)
| -
| verdadeiro se VALOR (ou data atual se omitida) é DATA or earlier (unlimited)
|
(:if date DATA1..DATA2 VALOR:)
| -
| verdadeiro se VALOR (ou data atual, se omitida) está no intervalo DATA1 até DATA2 (inclusivamente)
datas estão em standard formato yyyy-mm-dd ou yyyymmdd ou yyyymmddThhmm (note o "T" entre a data e a hora, e também veja o comentário acima sobre a formatação de VALOR).
Note os ".." não podem ter espaços no início ou no final.
|
(:if enabled VAR:)
| -
| verdadeiro se variável do PHP (VAR) for verdadeiro
|
(:if enabled AuthPw:)
| -
| verdadeiro se o usuário enviu sua senha durante a sessão atual.
- Isso não significa que o usuário enviou a senha correta, mas sim que ele enviou uma senha qualquer.
|
(:if equal STRING1 STRING2:)
| -
| verdadeiro se STRING1 é igual a STRING2 , use aspas se a string ou variavel contém espaços, e.g. "MINHA STRING"
|
(:if match REG_EXPRESSION:)
| -
| verdadeiro se o nome da página atual corresponde à expressão regular
|
(:if exists PAGENAME:)
| -
| verdadeiro se a página pagename existe
|
(:if ontrail WikiTrailPage ThisPage:)
| -
| verdadeiro se ThisPage está numa lista usada como trail em WikiTrailPage
|
Os condicionais nome e grupo funcionarão mesmo para uma página incluída, como o "nome" e "grupo" condicionais sempre verificar a página exibida atualmente, em oposição a página que a marcação aparece dentro.
Nota : Although there is no built-in conditional markup to test ?action=, you can use (:if equal {$Action} AÇÃO:)
to test what the current action being requested is. Nota: não há marcação condicional embutida para testar qual é a "?action=" atual. Embora seja possível usar (:if equal {$Action} AÇÃO:)
para testar qual a ação atual está sendo solicitada.
Condicionais negativadas
Condicionais negativadas também funcionam:
(:if !attachments:)
| -
| Esta página não possui anexos
|
|
(:if ! name PAGENAME:)
|
| Página atual não é "PAGENAME "
|
(:if name -PAGENAME :)
|
|
Aninhando condicionais
Note que (:if cond:)
automaticamente fecha uma condional prévia. Assim, os dois exemplos a seguir tem o mesmo significado:
(:if cond1:) cond1 é verdadeira (:if cond2:) cond2 é verdadeira (:ifend:)
(:if cond1:) cond1 é verdadeira (:ifend:)(:if cond2:) cond2 é verdadeira (:ifend:)
Condicionais podem ser aninhadas desde a versão 2.2.beta 66. Para aninhar condionais você precisa numerar os IFs, and ELSE/IFEND correspondentes:
(:if cond1:)
cond1 é verdadeira
(:if2 cond2:)
cond1 e cond2 são verdadeiras
(:else2:)
cond1 é verdadeira, cond2 não é
(:if2end:)
(:else:)
cond1 é falsa, cond2 teste foi ignorado
(:ifend:)
espaços foram adicionados para uma melhor leitura.
Usando coringas para cobrir espaços
O caractere * pode ser usado como um curinga para representar qualquer personagem, zero, um ou mais vezes.
O caractere ? pode ser usado como um curinga para representar qualquer caractere exatamente uma vez.
Os caracteres curinga ( * e ? ) podem ser usados com as condicionais de nome e grupo, assim:
(:if name PmCal.2005* :)
| -
| página atual está no grupo PmCal e inicie com 2005
|
(:if group PmWiki* :)
| -
| Página atual está no grupo PmWiki ou um começando com PmWiki
|
(:if name Profiles.*,-Profiles.Profiles :)
| -
| A página atual está no grupo Profiles mas não em Profiles.Profiles
|
Variáveis de Texto da Página -> Page text variables (PTVs), variáveis de página -> page variables (PVs) e expressões de marcação-> markup expressions podem ser usadas em conditionais. Estes serão atribuidos/avaliados antes das condicionais.
Combinando condicionais
Condicionais (como previamente definido) podem ser combinadas para formar expressões condicionais mais complexas usando uma das três formas equivalentes:
(:if expr EXPRESSÃO :)
(:if [ EXPRESSÃO ] :)
(:if ( EXPRESSÃO ) :)
As condições são combinadas em expressões com operadores booleanos e parênteses.Na tabela ao lado, A e B são condições regulares ou sub-expressões entre colchetes de condições regulares:
Expression | Operator | Result |
A and B | And | TRUE se ambos A e B são TRUE. |
A or B | Or | TRUE se ambos A ou B são TRUE. |
A xor B | Xor | TRUE se ambos A ou B é TRUE, mas não ambos. |
! A | Not | TRUE se A não é TRUE. |
A && B | And | TRUE se ambos A e B são TRUE. |
A || B | Or | TRUE se ambos A ou B são TRUE. |
Exemplo
(:if [ name SomePage and group SomeGroup ]:) equivalent to (:if name SomeGroup.SomePage:)
Notas Importantes:
- Espaços são necessários no início e fim de operadores e parênteses.
- Nenhum aviso é dado para erros de sintaxe or unbalanced brackets.
- Use parênteses para expressões aninhadas.
Assim, o que se segue é uma maneira válida de se construir uma expressão que mostra o seguinte conteúdo somente quando o usuário é o administrador, ou está conectado e o tempo é mais tarde que data indicada:
(:if [ auth admin || ( authid && date 2006-06-01.. ) ] :)
Aninhamento com colchetes falharão silenciosamente:
(:if [ auth admin || [ authid && date 2006-06-01 ] ] :)
NOTA: Não funciona!
Um uso comum destes testes complexos para expressões como:
(:if expr auth admin || auth attr || auth edit :)
[[Logout -> {$Name}?action=logout]]
(:ifend:)
que fornecem um link de logout(saida) só quando o usuário tem permissões parar admin, attr, ou edit.
administradores (avançado)
Criando novas condicionais
Veja +.
Veja também referências especiais para o uso de {*$Variáveis}.