wiki:WF/Modificadoresdevariaveis

Modificadores de variáveis podem ser aplicados a variáveis, funções personalizadas ou strings. Para aplicar um modificador, especifique o valor seguido por |(pipe) e o nome do modificador. Um modificador aceita parâmetros adicionais que afetam o seu comportamento. Estes parâmetros vem após o nome do modificador e são separados por : (dois pontos).

Exemplo 5-1. Exemplo de modificador

{* Faz o título ficar com letras maiúsculas *}

<h2>{$titulo|upper}</h2>



{* Faz com que $topico use somente 40 caracteres, e coloca ... no fim da frase *}



Tópico: {$topico|truncate:40:"..."}



{* transforma a data em um formato legível *}

{"agora"|date_format:"%Y/%m/%d"}



{* aplica um modificador à uma função personalizada *}

{mailto|upper address="eu@dominio.dom"}

Se você aplicar um modificador à uma matriz ao invés de aplicar ao valor de uma variável, o modificador vai ser aplicado à cada valor da matriz especificada. Se você quer que o modificador use a matriz inteira como um valor, você deve colocar o símbolo @ antes do nome do modificador, como a seguir: {$tituloArtigo|@count} (isto irá mostrar o número de elementos na matriz $tituloArtigo).

Modificadores podem ser carregados automaticamente à partir do seu $plugins_dir (veja: Nomes sugeridos) ou podem ser registrados explicitamente (veja: register_modifier). Adicionalmente, todas as funções php podem ser utiliadas como modificadores implicitamente. (O exemplo do @count acima usa a função count do php e não um modificador do Smarty). Usar funções do php como modificadores tem dois pequenos problemas: Primeiro: às vezes a ordem dos parâmetros da função não é a desejada ({"%2.f"|sprintf:$float} atualmente funciona, mas o melhor seria algo mais intuitivo. Por exemplo: {$float|string_format:"%2.f"} que é disponibilizado na distribuição do Smarty). Segundo: com a variável $security ativada em todas as funções do php que são usadas como modificadores precisam ser declaradas como confiáveis (trusted) na matriz $security_settingsMODIFIER_FUNCS?.

capitalize


Isto é usado para converter para maiúsculas a primeira letra de todas as palavras em uma variável.

Exemplo 5-2. capitalize

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'Police begin campaign to rundown jaywalkers.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|capitalize}



SAÍDA:



Police begin campaign to rundown jaywalkers.

Police Begin Campaign To Rundown Jaywalkers.

lower


Isto é usado para converter para minúsculas uma variável.

Exemplo 5-13. lower

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|lower}

MOSTRA:

Two Convicts Evade Noose, Jury Hung.

two convicts evade noose, jury hung.

date_format


Posição do Parâmetro	Tipo	Requerido	Padrão	Descrição

1	string	Não	%b %e, %Y	Este é o formato para a data mostrada.

2	string	Não	n/a	Esta é a data padrão se a entrada estiver vazia.

Isto formata a data e hora no formato strftime() indicado. Datas podem ser passadas para o Smarty como timestamps unix, timestamps mysql, ou qualquer string composta de mês dia ano(interpretavel por strtotime). Designers podem então usar date_format para ter um controle completo da formatação da data. Se a data passada para date_format estiver vazia e um segundo parâmetro for passado, este será usado como a data para formatar.

Exemplo 5-8. date_format

index.php:

$smarty = new Smarty;

$smarty->assign('yesterday', strtotime('-1 day'));

$smarty->display('index.tpl');



index.tpl:





{$smarty.now|date_format}

{$smarty.now|date_format:"%A, %B %e, %Y"}

{$smarty.now|date_format:"%H:%M:%S"}

{$yesterday|date_format}

{$yesterday|date_format:"%A, %B %e, %Y"}

{$yesterday|date_format:"%H:%M:%S"}



MOSTRA:



Feb 6, 2001

Tuesday, February 6, 2001

14:33:00

Feb 5, 2001

Monday, February 5, 2001

14:33:00



Exemplo 5-9. date_format conversion specifiers



%a - nome do dia da semana abreviado de acordo com o local atual



%A - nome do dia da semana inteiro de acordo com o local atual



%b - nome do mês abreviado de acordo com o local atual



%B - nome do mês inteiro de acordo com o local atual



%c - representação preferencial de data e hora para o local atual



%C - ano com dois dígitos (o ano dividido por 100 e truncado para um inteiro, intervalo de 00 a 99)



%d - dia do mês como um número decimal (intervalo de 00 a 31)



%D - o mesmo que %m/%d/%y



%e - dia do mês como um número decimal, um único dígito é precedido por um

espaço (intervalo de 1 a 31)



%g - ano baseado na semana, sem o século [00,99]



%G - ano baseado na semana, incluindo o século [0000,9999]



%h - o mesmo que %b



%H - hora como um número decimal usando um relógio de 24 horas (intervalo de 00 a 23)



%I - hora como um número decimal usando um relógio de 12 horas (intervalo de 01 a 12)



%j - dia do ano como um número decimal (intervalo de 001 a 366)



%k - hora (relógio de 24 horas) digítos únicos são precedidos por um espaço em branco (intervalo de 0 a 23)

      

%l - hora como um número decimal usando um relógio de 12 horas, digítos unicos são precedidos

por um espaço em branco (intervalo de 1 a 12)



%m - mês como número decimal (intervalo de 01 a 12)



%M - minuto como um número decimal



%n - caractere de nova linha 



%p - ou `am' ou `pm' de acordo com o valor de hora dado, ou as strings correspondentes ao local atual 



%r - hora na notação a.m. e p.m.  



%R - hora na notação de 24 horas



%S - segundo como número decimal 



%t - caractere tab 



%T - hora atual, igual a %H:%M:%S 



%u - dia da semana como um número decimal [1,7], com 1 representando segunda-feira 



%U - número da semana do ano atual como um número decimal, começando com o primeiro domingo como primeiro dia da primeira semana 



%V - número da semana do ano atual como um número decimal de acordo com The ISO 8601:1988,

intervalo de 01 a 53, aonde a semana 1 é a primeira semana que tenha pelo menos quatro dias no ano atual, sendo domingo o primeiro dia da semana. 



%w - dia da semana como decimal, domingo sendo 0 



%W - número da semana do ano atual como número decimal, começando com a primeira segunda como primeiro dia da primeira semana  



%x - representação preferencial da data para o local atualsem a hora 



%X - representação preferencial da hora para o local atual sem a data 



%y - ano como número decimal sem o século (intervalo de 00 a 99) 



%Y - ano como número decimal incluindo o século 



%Z - zona horária ou nome ou abreviação 



%% - um caractere `%' 

NOTA PARA PROGRAMADORES: date_format é essencialmente um wrapper para a função strftime() do PHP.

Você deverá ter mais ou menos especificadores de conversão disponíveis de acordo com a

função strftime() do sistema operacional aonde o PHP foi compilado. De uma olhada

na página de manual do seu sistema para uma lista completa dos especificadores válidos.

count_words


Isto é usado para contar o número de palavras em uma variável.

Exemplo 5-7. count_words

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|count_words}



MOSTRA:



Dealers Will Hear Car Talk at Noon.

7

default


Posição do Parâmetro Tipo Requerido Padrão Descrição

1 string Não vazio Este é o valor padrão para mostrar se a variável estiver vazia.

Isto é usado para definir um valor padrão para uma variável. Se a variável estiver vazia ou não for definida, o valor padrão dado é mostrado. Default usa um argumento.

Exemplo 5-10. default

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle|default:"no title"}

{$myTitle|default:"no title"}



MOSTRA:



Dealers Will Hear Car Talk at Noon.

no title

escape


Posição do Parâmetro 1

Tipo string

Requerido Não

Valores Possíveis html,htmlall,url,quotes,hex,hexentity,javascript

Padrão html

Descrição Este é o formato de escape para usar.

Este é usado para escapar html, url, aspas simples em uma variável que já não esteja escapada, escapar hex, hexentity ou javascript. Por padrão, é escapado o html da variável.

Exemplo 5-11. escape

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', "'Stiff Opposition Expected to Casketless Funeral Plan'");

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|escape}

{$articleTitle|escape:"html"}    {* escapa  & " ' < > *}

{$articleTitle|escape:"htmlall"} {* escapa todas as entidades html *}

{$articleTitle|escape:"url"}

{$articleTitle|escape:"quotes"}

<a href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a>



MOSTRA:



'Stiff Opposition Expected to Casketless Funeral Plan'

'Stiff Opposition Expected to Casketless Funeral Plan'

'Stiff Opposition Expected to Casketless Funeral Plan'

'Stiff Opposition Expected to Casketless Funeral Plan'

%27Stiff+Opposition+Expected+to+Casketless+Funeral+Plan%27

\'Stiff Opposition Expected to Casketless Funeral Plan\'

<a href="mailto:%62%6f%62%40%6d%65%2e%6e%65%74">bob@me.net</a>

indent


Posição do Parâmetro Tipo Requerido Padrão Descrição

1 integer Não 4 Isto define com quantos caracteres endentar.

2 string Não (um espaço) Isto define qual caractere usado para endentar.

Isto endenta uma string em cada linha, o padrão é 4. Como parâmetro opcional, você pode especificar o número de caracteres para endentar. Como segundo parâmetro opcional, você pode especificar o caractere usado para endentar. (Use " " para tabs.)

Exemplo 5-12. indent

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'NJ judge to rule on nude beach.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}



{$articleTitle|indent}



{$articleTitle|indent:10}



{$articleTitle|indent:1:"	"}

string_format


Posição do parâmetro Tipo Requerido Padrão Descrição

1 string Sim n/a Este é o formato para ser usado. (sprintf)

Este é um meio para formatar strings, como números decimais e outros. Use a sintaxe para sprintf para a formatação.

Exemplo 5-18. string_format

index.php:

$smarty = new Smarty;

$smarty->assign('number', 23.5787446);

$smarty->display('index.tpl');



index.tpl:



{$number}

{$number|string_format:"%.2f"}

{$number|string_format:"%d"}

MOSTRA:

23.5787446

23.58

24

strip_tags


Isto retira as tags de marcação, basicamente tudo entre < e >.

Exemplo 5-20. strip_tags

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', "Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.");

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|strip_tags}

MOSTRA:

Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.

Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.

strip


Isto substitui todos os espaços repetidos, novas linhas e tabs por um único espaço ou a string indicada.

Nota: Se você quer substituir blocos de texto do template, use a função strip.

Exemplo 5-19. strip

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', "Grandmother of
eight makes	    hole in one.");

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|strip}

{$articleTitle|strip:" "}

MOSTRA:

Grandmother of

eight makes hole in one.

Grandmother of eight makes hole in one.

Grandmother of eight makes hole in one.

truncate


Posição Tipo Requerido Padrão Descrição

1 integer Não 80 Este determina para quantos caracteres truncar.

2 string Não ... Este é o texto para adicionar se truncar.

3 boolean Não false Isto determina quando truncar ou não ao final de uma palavra(false), ou no caractere exato (true).

Isto trunca a variável para uma quantidade de caracteres, o padrão é 80. Como segundo parâmetro opcional, você pode especificar uma string para mostrar ao final se a variável foi truncada. Os caracteres da string são incluídos no tamanho original para a truncagem. por padrão, truncate irá tentar cortar ao final de uma palavra. Se você quizer cortar na quantidade exata de caracteres, passe o terceiro parâmetro, que é opcional, como true.

Exemplo 5-21. truncate

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|truncate}

{$articleTitle|truncate:30}

{$articleTitle|truncate:30:""}

{$articleTitle|truncate:30:"---"}

{$articleTitle|truncate:30:"":true}

{$articleTitle|truncate:30:"...":true}

MOSTRA:

Two Sisters Reunite after Eighteen Years at Checkout Counter.

Two Sisters Reunite after Eighteen Years at Checkout Counter.

Two Sisters Reunite after...

Two Sisters Reunite after

Two Sisters Reunite after---

Two Sisters Reunite after Eigh

Two Sisters Reunite after E...

wordwrap


Posição Tipo Requerido Padrão Descrição

1 integer Não 80 Isto determina em quantas colunas quebrar.

2 string Não

Esta é a string usada para quebrar.

3 boolean Não false Isto determina quando quebrar ou não ao final de uma palavra (false), ou no caractere exato (true).

Isto quebra uma string para uma largura de coluna, o padrão é 80. Como segundo parâmetro opcional, você pode especificar a string que será usada para quebrar o texto para a próxima linha (o padrão é um retorno de carro ). Por padrão, wordwrap irá tentar quebrar ao final de uma palavra. Se você quiser quebrar no tamanho exato de caracteres, passe o terceiro parâmetro, que é opcional, como true.

Exemplo 5-23. wordwrap

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', "Blind woman gets new kidney from dad she hasn't seen in years.");

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}



{$articleTitle|wordwrap:30}



{$articleTitle|wordwrap:20}



{$articleTitle|wordwrap:30:"<br>
"}



{$articleTitle|wordwrap:30:"
":true}

MOSTRA:

Blind woman gets new kidney from dad she hasn't seen in years.

Blind woman gets new kidney

from dad she hasn't seen in

years.

Blind woman gets new

kidney from dad she

hasn't seen in

years.

Blind woman gets new kidney<br>

from dad she hasn't seen in years.

Blind woman gets new kidney fr

om dad she hasn't seen in year

s.

spacify


Posição Tipo Requerido Padrão Descrição

1 string Não um espaço O que é inserido entre cada caractere da variável.

Insere um espaço entre cada caractere de uma variável. Você pode opcionalmente passar um caractere (ou uma string) diferente para inserir.

Exemplo 5-17. spacify

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.');

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|spacify}

{$articleTitle|spacify:"^^"}

MOSTRA:

Something Went Wrong in Jet Crash, Experts Say.

S o m e t h i n g W e n t W r o n g i n J e t C r a s h , E x p e r t s S a y .

Something Went Wrong in Jet Crash, Experts Say.

replace


Posição Tipo Requerido Padrão Descrição

1 string Sim n/a Esta é a string a ser substituida.

2 string Sim n/a Esta é a string que irá substituir.

Um simples localizar e substituir.

Exemplo 5-16. replace

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', "Child's Stool Great for Use in Garden.");

$smarty->display('index.tpl');



index.tpl:



{$articleTitle}

{$articleTitle|replace:"Garden":"Vineyard"}

{$articleTitle|replace:" ":"   "}

OUTPUT:

Child's Stool Great for Use in Garden.

Child's Stool Great for Use in Vineyard.

Child's Stool Great for Use in Garden.

nl2br


Todas as quebras de linha serão convertidas para <br /> na variável data. Isto é equivalente a função nl2br() do PHP.

Exemplo 5-14. nl2br

index.php:

$smarty = new Smarty;

$smarty->assign('articleTitle', "Sun or rain expected
today, dark tonight");

$smarty->display('index.tpl');



index.tpl:



{$articleTitle|nl2br}

MOSTRA:

Sun or rain expected<br />today, dark tonight