Marcação Condicional

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

Usando PageTextVariables?, PageVariables? e MarkupExpressions?

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:

ExpressionOperatorResult
A and BAndTRUE se ambos A e B são TRUE.
A or BOrTRUE se ambos A ou B são TRUE.
A xor BXorTRUE se ambos A ou B é TRUE, mas não ambos.
! ANotTRUE se A não é TRUE.
A && BAndTRUE se ambos A e B são TRUE.
A || BOrTRUE 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 ConditionalMarkupSamples.

Veja também referências especiais para o uso de {*$Variáveis}.



Essa é possivelmente a tradução do original em : PmWiki.ConditionalMarkup - Links de retorno
Essa tradução se encontra em : PmWikiPtBr.ConditionalMarkup - Links de retorno
Últimas modificações da tradução feitas em : 10 de setembro de 2011, às 16h00
Últimas modificações feitas no original em : 17 de dezembro de 2022, às 09h49