From ae3b538314ee2295d3626812205df283a14c83a8 Mon Sep 17 00:00:00 2001 From: mohrt Date: Tue, 23 Dec 2003 15:53:39 +0000 Subject: [PATCH] add portuguese docs --- NEWS | 1 + docs/pt_BR/appendixes.sgml | 404 +++ docs/pt_BR/common.dsl | 46 + docs/pt_BR/designers.sgml | 5882 +++++++++++++++++++++++++++++++ docs/pt_BR/getting-started.sgml | 398 +++ docs/pt_BR/html-common.dsl | 382 ++ docs/pt_BR/html.dsl | 21 + docs/pt_BR/manual.sgml | 45 + docs/pt_BR/php.dsl | 21 + docs/pt_BR/preface.sgml | 69 + docs/pt_BR/programmers.sgml | 3275 +++++++++++++++++ 11 files changed, 10544 insertions(+) create mode 100644 docs/pt_BR/appendixes.sgml create mode 100644 docs/pt_BR/common.dsl create mode 100644 docs/pt_BR/designers.sgml create mode 100644 docs/pt_BR/getting-started.sgml create mode 100644 docs/pt_BR/html-common.dsl create mode 100644 docs/pt_BR/html.dsl create mode 100644 docs/pt_BR/manual.sgml create mode 100644 docs/pt_BR/php.dsl create mode 100644 docs/pt_BR/preface.sgml create mode 100644 docs/pt_BR/programmers.sgml diff --git a/NEWS b/NEWS index f2d3c417..f420def4 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,4 @@ + - add cookie persistance to debug console (Monte) - allow single-digit days and months without smarty_make_timestamp() in html_select_date (messju) - fix headers sent erroneously with cache_modified_check and fetch() diff --git a/docs/pt_BR/appendixes.sgml b/docs/pt_BR/appendixes.sgml new file mode 100644 index 00000000..e10488b5 --- /dev/null +++ b/docs/pt_BR/appendixes.sgml @@ -0,0 +1,404 @@ + + Apêndices + + Localização de Erros + + + erros de Smarty/PHP + + O Smarty pode obter muitos erros tais como, atributos de tags perdidos ou nomes de variáveis + mal formadas. Se isto acontece, você verá + um erro como segue: + + + +Erros do Smarty + +Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah' + in /path/to/smarty/Smarty.class.php on line 1041 + +Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name + in /path/to/smarty/Smarty.class.php on line 1041 + + + + O Smarty te mostra o nome do template, o número da linha e o erro. + Depois disso, o erro consiste do número da linha da classe Smarty em que o erro + ocorreu. + + + + Há certos erros que o smarty não pode entender, tais como um um fechamento de tags errado. + Estes tipos de erros normalmente + termina na interpretação de erros do tempo de compilação do PHP. + + + +Erros de análise do PHP + +Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75 + + + + Quando você encontra um erro de análise de PHP, o número da linha do erro corresponderá ao + script PHP compilado, não o template em si. Normalmente você pode no template localizar o + erro de sintaxe. Aqui algumas coisas para você procurar: + falta de fechamento de tags para {if}{/if} ou + {section}{/section}, ou sintaxe da lógica dentro de uma tag {if}. + Se você não encontra o erro, você pode ter + que abrir o arquivo PHP compilado e ir até o numero da linha exibido, no local onde o erro correspondente + está no template. + + + + + Dicas & Truques + + + + Manipulação de Variável Vazia + + Quando você quer algumas vezes imprimir um valor que você definir para uma variável vazia + ao invés de imprimir nada, tal como imprimindo "&nbsp;" a fim de que plano de fundo de tabelas + funcionem corretamente. Muitos usariam uma instrução {if} para manipular isto, mas há um + macete com o Smarty, usando o modificador de variável + default. + + +Imprimindo &nbsp; quando uma variável está vazia + + +{* A forma mais longa *} + +{if $title eq ""} + &nbsp; +{else} + {$title} +{/if} + + +{* A forma mais simples *} + +{$title|default:"&nbsp;"} + + + + + Manipulação do valor padrão de Variável + + Se uma variável é usada freqüentemente em seus templates, aplicando o modificador + default toda vez que ela é mencionado pode evitar um bit desagradável. Você pode remediar isto + pela atribuição de um valor padrão para a variável com a função + assign. + + +Atribuindo o valor padrão para uma variável de template + +{* faça isto em algum lugar no topo de seu template *} +{assign var="titulo" value=$titulo|default:"sem título"} + +{* Se o $titulo estava vazio, ele agora contém o valor "sem titulo" quando você exibí-lo *} +{$title} + + + + Passando a variável titulo para o template de cabeçalho + + Quando a maioria de seus templates usam os mesmos cabeçalhos e mesmos rodapés, é + comum dividi-los um em cada template e então incluí-los. Mas o que fazer se o + cabeçalho precisa ter um titulo diferente, dependendo de que página ele está vindo? + Você pode passar o titulo para o + cabeçalho quando ele é incluído. + + +Passando a variável titulo para o template de cabeçalho + + +mainpage.tpl +------------ + +{include file="header.tpl" titulo="Página Principal"} +{* O corpo do template vem aqui *} +{include file="footer.tpl"} + + +archives.tpl +------------ + +{config_load file="archive_page.conf"} +{include file="header.tpl" titulo=#archivePageTitle#} +{* O corpo do template vem aqui *} +{include file="footer.tpl"} + + +header.tpl +---------- +<HTML> +<HEAD> +<TITLE>{$titulo|default:"BC News"}</TITLE> +</HEAD> +<BODY> + + +footer.tpl +---------- +</BODY> +</HTML> + + + Quando a página principal é atraída, o título da "Página Principal" é passado para o template + header.tpl, e será subseqüencialmente usado com o título. Quando a página de arquivamento é atraída, + o título será "Archives". Note no exemplo de archive, nós estamos usando uma variável do arquivo + archives_page.conf ao invés de uma variável codificada rígida. + Também note que "BC news" é exibida se + a variável $titulo não está definida, + usando o modificador de variável default. + + + + Datas + + Como uma regra básica, sempre passe datas para o smarty como timestamps. Isto permite ao + desenhista de template utilizar date_format + para controle completo sobre a formatação de data, + e também facilita a comparação de datas se + necessário. + + + NOTA: No Smarty 1.4.0, você pode passar datas para o Smarty como timestamps unix, + mysql, ou qualquer outra data interpretável por strtotime(). + + +Usando date_format + +{$startDate|date_format} + +SAÍDA: + +Jan 4, 2001 + + +{$startDate|date_format:"%Y/%m/%d"} + +SAÍDA: + +2001/01/04 + + +{if $date1 < $date2} + ... +{/if} + + + Quando usando {html_select_date} em um template, o programador normalmente vai querer converter + a saída de um formulário de volta para o formato de timestamp. Aqui está uma função para ajudar + com isso. + + +Convertendo elementos em forma de data de volta para um timestamp + +// isto assume que a forma de seus elementos são nomeadas como +// startDate_Day, startDate_Month, startDate_Year + +$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day); + +function makeTimeStamp($year="",$month="",$day="") +{ + if(empty($year)) + $year = strftime("%Y"); + if(empty($month)) + $month = strftime("%m"); + if(empty($day)) + $day = strftime("%d"); + + return mktime(0,0,0,$month,$day,$year); +} + + + + WAP/WML + + Os templates WAP/WML requerem um cabeçalho de Content-Type de PHP para ser passado junto com + template. A forma mais fácil de fazer isto seria escrever uma função customizada que imprime + o cabeçalho. Se você está usando sistema de caching, esse não funcionará, então nós faremos isso + usando a tag de insert (lembre que tags de insert não são "cached!") Certifique-se que não há saída + para o navegador antes do template, + senão o cabeçalho irá falhar. + + +Usando insert para escrever um cabeçalho WML Content-Type + +// esteja certo que o apache está configurado para as extensões .wml ! +// ponha esta função em algum lugar de sua aplicação, ou em Smarty.addons.php +function insert_header() { + // esta função espera o argumento $content + extract(func_get_arg(0)); + if(empty($content)) + return; + header($content); + return; +} + +// seu template Smarty _deve_ começar com a insert tag, olha o exemplo: + +{insert name=header content="Content-Type: text/vnd.wap.wml"} + +<?xml version="1.0"?> +<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> + +<!-- begin new wml deck --> +<wml> +<!-- begin first card --> +<card> +<do type="accept"> +<go href="#two"/> +</do> +<p> +Bem-vindo ao WAP com Smarty! +Pressione OK para continuar... +</p> +</card> +<!-- begin second card --> +<card id="two"> +<p> +Bem fácil isso, não é? +</p> +</card> +</wml> + + + + Templates componentizados + + Esta dica é um pouco de hack, mas ainda é uma idéia limpa. + Use-a por seu próprio risco. ;-) + + + Tradicionalmente, programar templates em suas aplicações segue esta forma: + Primeiro, você acumula suas variáveis dentro de sua aplicação PHP, (talvez com requisições + de banco de dados.) Então, você instancia seu objeto Smarty, atribui valores às variáveis + e exibe o template. Por exemplo nós temos um registrador de estoque em nosso template. + Nós coletaríamos os dados estocagem em nossa aplicação, então damos valor a estas variáveis + no template e o exibimos. Agora isso seria legal + se você adicionasse este registrador de + armazenamento (stock ticker) para qualquer aplicação simplesmente incluindo o template, e sem + se preocupar com a busca de dados mais a frente? + + + Você pode embutir o PHP dentro de seus templates com as tags {php}{/php}. + Com isto, você pode configurar templates independentes, tendo a sua própria + estrutura de dados para dar valor às suas próprias variáveis. Com a lógica embutida + dessa forma, você pode manter a lógica do template & junto. Desta maneira não é + importante de onde o fonte do + template está vindo, ele está sempre junto como um componente. + + +Template componentizado + +{* Smarty *} + +{php} + + // configurar nossa função para buscar dados armazenados + function fetch_ticker($symbol,&$ticker_name,&$ticker_price) { + // ponha a lógica aqui que procura $ticker_name + // e $ticker_price de algum recurso + } + + // chama a função + fetch_ticker("YHOO",$ticker_name,$ticker_price); + + // passando valores às variáveis de template + $this->assign("ticker_name",$ticker_name); + $this->assign("ticker_price",$ticker_price); + +{/php} + +Nome do Estoque: {$ticker_name} Preço do Estoque: {$ticker_price} + + + No Smarty 1.5.0, há até uma forma mais limpa. Você pode incluir o php em seus templates com + a tag {include_php ...}. + Desta forma você pode manter a lógica do PHP separada da lógica do + template. Veja a função include_php para + mais informação. + + +Template componentizado com include_php + +load_ticker.php +--------------- + +<?php + // configura nossa função para buscar os dados armazenados + function fetch_ticker($symbol,&$ticker_name,&$ticker_price) { + // ponha aqui a lógica que procura $ticker_name + // e $ticker_price de algum recurso + } + + // chama a função + fetch_ticker("YHOO",$ticker_name,$ticker_price); + + // passar valores para as variáveis de template + $this->assign("ticker_name",$ticker_name); + $this->assign("ticker_price",$ticker_price); +?> + + +index.tpl +--------- + +{* Smarty *} + +{include_php file="load_ticker.php"} + +Nome do Estoque: {$ticker_name} Preço do Estoque: {$ticker_price} + + + + Ofuscando endereços de E-mail + + Você deseja saber como seu endereço de E-mail consegue entrar em tantas listas de email de spam? + A única forma de spammers coletar endereços de E-mail é de páginas da web. Para ajudar a combater + este problema, você pode fazer o seu endereço de E-mail aparecer em javascript misturado no + código HTML, mesmo assim ele aparecerá e funcionará corretamente no navegador. Isto é feito com + o plugin mailto. + + +Exemplo de ofuscamento de um Endereço de E-mail + + +index.tpl +--------- + +envia inquisição para +{mailto address=$EmailAddress encode="javascript" subject="Olá"} + + + + + Nota técnica + + Este método não é 100% a prova de falha. Um spammer poderia criar um programa + para coletar o e-mail e para decodificar estes valores, mas não é muito comum. + + + + + + Recursos + + A homepage do Smarty está localizada em http://smarty.php.net/. + Você pode entrar na lista de email enviando um e-mail para + smarty-general-subscribe@lists.php.net. Um arquivo da lista de e-mail pode ser + visto em http://marc.theaimsgroup.com/?l=smarty&r=1&w=2 + + + + BUGS + + Verifique o arquivo de BUGS que vêm com a última distribuição do Smarty, ou + verifique o website. + + + diff --git a/docs/pt_BR/common.dsl b/docs/pt_BR/common.dsl new file mode 100644 index 00000000..8df994d0 --- /dev/null +++ b/docs/pt_BR/common.dsl @@ -0,0 +1,46 @@ +;; -*- Scheme -*- +;; +;; $Id$ +;; +;; This file contains stylesheet customization common to the HTML +;; and print versions. +;; + +;; Stylesheets Localization +(define %default-language% "pt_BR") + +(define %use-id-as-filename% #t) +(define %gentext-nav-tblwidth% "100%") +(define %refentry-function% #t) +(define %refentry-generate-name% #f) +(define %funcsynopsis-style% 'ansi) +(define ($legalnotice-link-file$ legalnotice) + (string-append "copyright" %html-ext%)) +(define %generate-legalnotice-link% #t) +(define %footnotes-at-end% #t) +(define %force-chapter-toc% #t) +(define newline "\U-000D") +(define %number-programlisting-lines% #f) +(define %linenumber-mod% 1) +(define %shade-verbatim% #t) + +(define ($generate-book-lot-list$) + ;; REFENTRY generate-book-lot-list + ;; PURP Which Lists of Titles should be produced for Books? + ;; DESC + ;; This parameter should be a list (possibly empty) of the elements + ;; for which Lists of Titles should be produced for each 'Book'. + ;; + ;; It is meaningless to put elements that do not have titles in this + ;; list. If elements with optional titles are placed in this list, only + ;; the instances of those elements that do have titles will appear in + ;; the LOT. + ;; + ;; /DESC + ;; AUTHOR N/A + ;; /REFENTRY + (list (normalize "table"))) + +(define (php-code code) + (make processing-instruction + data: (string-append "php " code "?"))) diff --git a/docs/pt_BR/designers.sgml b/docs/pt_BR/designers.sgml new file mode 100644 index 00000000..2e92d2a5 --- /dev/null +++ b/docs/pt_BR/designers.sgml @@ -0,0 +1,5882 @@ + + Smarty para Designers de Template + + + Sintaxe Básica + + Todas as tags de template do Smarty estão fechadas com delimitadores. + Por padrão, estes delimitadores são { e + }, mas eles podem ser mudados. + + + Para estes exemplos, nós iremos assumir que você está usando os + delimitadores padrão. No Smarty, todo o conteúdo fora dos delimitadores é + mostrado como conteúdo estatico, ou sem modificações. Quando o Smarty encontra + tags de template, ele tenta interpreta-las, e então mostra a saída + apropriada em seu lugar. + + + + Comentários + + Comentários de template são cercados por asteriscos, e são cercados por + delimitadores, assim: {* este é um comentário *}. + Comentários Smarty não são mostrado na saída final do template. + Eles são usados para fazer notas internas nos templates. + + + Comentários + +{* Smarty *} + +{* inclui o arquivo header aqui *} +{include file="header.tpl"} + +{include file=$includeFile} + +{include file=#includeFile#} + +{* Mostra listas dropdown *} +<SELECT name=company> +{html_options values=$vals selected=$selected output=$output} +</SELECT> + + + + + Funções + + Cada tag Smarty mostra uma + variável ou utiliza algum tipo de + função. Funções são processadas e mostradas colocando-se a função e seus + atributos entre delimitadores, assim: {funcname + attr1="val" attr2="val"}. + + + Sintaxe de funções + +{config_load file="colors.conf"} + +{include file="header.tpl"} + +{if $highlight_name} + Welcome, <font color="{#fontColor#}">{$name}!</font> +{else} + Welcome, {$name}! +{/if} + +{include file="footer.tpl"} + + + Ambas as funções internas e as funções customizadas tem a mesma sintaxe nos + templates. Funções internas são o funcionamento do Smarty, + assim como if, section e + strip. Elas não podem ser modificadas. Funções customizadas + são funções adicionais implementadas por plugins. Elas podem ser modificadas + como você quiser, ou você pode adionar novas. html_options e + html_select_date são exemplos de funções customizadas. + + + + + Atributos + + A maioria das funções levam atributos que especificam ou modificam o seu + funcionamento. Atributos para funções Smarty são muito parecidos como + atributos HTML. Valores estáticos são precisam estar entre aspas, + mas é recomendados para strings literais. Variáveis também podem ser + usadas, e não precisam estar entre aspas. + + + Alguns atributos requerem valores booleanos (true ou false). Estes podem + ser especificados sem aspas true, + on, e yes, ou + false, off, e + no. + + + Sintaxe de atributos de funções + +{include file="header.tpl"} + +{include file=$includeFile} + +{include file=#includeFile#} + +{html_select_date display_days=yes} + +<SELECT name=company> +{html_options values=$vals selected=$selected output=$output} +</SELECT> + + + + Colocando Variáveis em Aspas Duplas + + Smarty irá reconhecer variáveis entre aspas duplas enquanto + as variáveis conterem apenas números, letras, sublinhados e conchetes + []. Com qualquer outro caractere (pontos, referencia de objetos, etc.) as variáveis + devem estar entre apóstrofos. + + + Sintaxe entre aspas + +EXEMPLOS DE SINTAXE: +{func var="test $foo test"} <-- vê $foo +{func var="test $foo_bar test"} <-- vê $foo_bar +{func var="test $foo[0] test"} <-- vê $foo[0] +{func var="test $foo[bar] test"} <-- vê $foo[bar] +{func var="test $foo.bar test"} <-- vê $foo (not $foo.bar) +{func var="test `$foo.bar` test"} <-- vê $foo.bar + +EXEMPLOS PRATICOS: +{include file="subdir/$tpl_name.tpl"} <-- irá substituir $tpl_name com o valor +{cycle values="one,two,`$smarty.config.myval`"} <-- deve ter apóstrofos + + + + Matemática + + Matemática pode ser aplicada diretamente em valores de variáveis. + + + Exemplos de matemática + +{$foo+1} + +{$foo*$bar} + +{* alguns exemplos mais complicados *} + +{$foo->bar-$bar[1]*$baz->foo->bar()-3*7} + +{if ($foo+$bar.test%$baz*134232+10+$b+10)} + +{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"} + +{assign var="foo" value="`$foo+$bar`"} + + + + + + + Variáveis + + O Smarty tem vários tipos diferentes de variáveis. O tipo de variável depende de + de qual símbolo esta prefixada(ou cercada). + + + + Variáveis no Smarty podem ser mostradas diretamente ou usada como argumentos para + atributos de funções e modificadores, dentro de expressões condicionais, etc. + Para mostrar uma variável, simplesmente coloque ela entre delimitadores sendo que + ela seja a única coisa entre eles. Exemplos: + +{$Name} + +{$Contacts[row].Phone} + +<body bgcolor="{#bgcolor#}"> + + + + Variáveis definidas do PHP + + Variáveis que são definidas do PHP são referenciadas precedendo elas + com um sinal de sifrão $. Variáveis definidas dentro do template + com a função assign + também são mostradas desta maneira. + + + + Variáveis definidas + +Hello {$firstname}, glad to see you could make it. +<p> +Your last login was on {$lastLoginDate}. + +MOSTRA: + +Hello Doug, glad to see you could make it. +<p> +Your last login was on January 11th, 2001. + + + + Associative arrays + + Você também pode referenciar matrizes associativas que são definidas no PHP + especificando a chave depois do símbolo '.' + (ponto). + + +Acessando variáveis de matriz associativa + +index.php: + +$smarty = new Smarty; +$smarty->assign('Contacts', + array('fax' => '555-222-9876', + 'email' => 'zaphod@slartibartfast.com', + 'phone' => array('home' => '555-444-3333', + 'cell' => '555-111-1234'))); +$smarty->display('index.tpl'); + +index.tpl: + +{$Contacts.fax}<br> +{$Contacts.email}<br> +{* you can print arrays of arrays as well *} +{$Contacts.phone.home}<br> +{$Contacts.phone.cell}<br> + +MOSTRA: + +555-222-9876<br> +zaphod@slartibartfast.com<br> +555-444-3333<br> +555-111-1234<br> + + + + Índices de Matrizes + + Você pode referencia matrizes pelo seu índice, muito + parecido com a sintaxe nativa do PHP. + + +Acesando matrizes por seus índices + +index.php: + +$smarty = new Smarty; +$smarty->assign('Contacts', + array('555-222-9876', + 'zaphod@slartibartfast.com', + array('555-444-3333', + '555-111-1234'))); +$smarty->display('index.tpl'); + +index.tpl: + +{$Contacts[0]}<br> +{$Contacts[1]}<br> +{* you can print arrays of arrays as well *} +{$Contacts[2][0]}<br> +{$Contacts[2][1]}<br> + +MOSTRA: + +555-222-9876<br> +zaphod@slartibartfast.com<br> +555-444-3333<br> +555-111-1234<br> + + + + Objetos + + Propriedades de objetos definidos do PHP podem ser referenciados + especificando-se o nome da propriedade depois do símbolo '->'. + + +Acessando propriedades de objetos + +name: {$person->name}<br> +email: {$person->email}<br> + +MOSTRA: + +name: Zaphod Beeblebrox<br> +email: zaphod@slartibartfast.com<br> + + + + + + Variáveis carregadas de arquivos de configuração + + Variáveis que são carregadas de arquivos de configuração são referenciadas + colocando-se elas entre cancelas (#), ou com a variável smarty + $smarty.config. + A segunda sintaxe é útil para coloca-las + entre aspas em um atributo. + + + +Variáveis de configuração + +foo.conf: + +pageTitle = "This is mine" +bodyBgColor = "#eeeeee" +tableBorderSize = "3" +tableBgColor = "#bbbbbb" +rowBgColor = "#cccccc" + +index.tpl: + +{config_load file="foo.conf"} +<html> +<title>{#pageTitle#}</title> +<body bgcolor="{#bodyBgColor#}"> +<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"> +<tr bgcolor="{#rowBgColor#}"> + <td>First</td> + <td>Last</td> + <td>Address</td> +</tr> +</table> +</body> +</html> + +index.tpl: (sintaxe alternativa) + +{config_load file="foo.conf"} +<html> +<title>{$smarty.config.pageTitle}</title> +<body bgcolor="{$smarty.config.bodyBgColor}"> +<table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}"> +<tr bgcolor="{$smarty.config.rowBgColor}"> + <td>First</td> + <td>Last</td> + <td>Address</td> +</tr> +</table> +</body> +</html> + + +SAÍDA: (mesma para ambos exemplos) + +<html> +<title>This is mine</title> +<body bgcolor="#eeeeee"> +<table border="3" bgcolor="#bbbbbb"> +<tr bgcolor="#cccccc"> + <td>First</td> + <td>Last</td> + <td>Address</td> +</tr> +</table> +</body> +</html> + + + Variáveis de um arquivo de configuração não podem ser usadas até + que sejam carregadas de um arquivo de configuração. Este procedimento + é explicado posteriormente neste documento em + config_load. + + + + + A variável reservada {$smarty} + + A variável reservada {$smarty} pode ser utilizada para acessar variáveis + especiais do template. Segue uma lista completa. + + + + Variáveis Request + + Variáveis request como get, post, cookies, server, + environment, e session podem ser acessadas como mostrado + nos exemplos abaixo: + + + + Mostrando váriáveis request + +{* mostra o valor de page da URL (GET) http://www.domain.com/index.php?page=foo *} +{$smarty.get.page} + +{* mostra a variável "page" de um formulário (POST) *} +{$smarty.post.page} + +{* mostra o valor do cookie "username" *} +{$smarty.cookies.username} + +{* mostra a variável do servidor "SERVER_NAME" *} +{$smarty.server.SERVER_NAME} + +{* mostra a variável de ambiente do sistema "PATH" *} +{$smarty.env.PATH} + +{* mostra a variável de session do php "id" *} +{$smarty.session.id} + +{* mostra a variável "username" da união de get/post/cookies/server/env *} +{$smarty.request.username} + + + + + {$smarty.now} + + O timestamp atual pode ser acessado com {$smarty.now}. + O número reflete o número de segundos passados desde o assim chamado + Epoch (1 de Janeiro de 1970) e pode ser passado diretamente para o + modificador date_format para mostrar a data. + + + +Usando {$smarty.now} + +{* usa o modificador date_format para mostrar a data e hora atuais *} +{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"} + + + + {$smarty.const} + + Você pode acessar o valor de constantes PHP diretamente. + + + +Usando {$smarty.const} + +{$smarty.const._MY_CONST_VAL} + + + + + {$smarty.capture} + + A saída capturada via {capture}..{/capture} pode ser acessada usando a variável + {$smarty}. Veja a a seção sobre + capture para um exemplo. + + + + + {$smarty.config} + + A variável {$smarty} pode ser usada para referir variáveis de configuração carregadas. + {$smarty.config.foo} é um sinonimo para {#foo#}. Veja a seção sobre + config_load para um exemplo. + + + + + {$smarty.section}, {$smarty.foreach} + + A variável {$smarty} pode ser usada para se referir a propriedades 'section' e + 'foreach' de loop. Veja a documentação sobre + section e + foreach. + + + + + {$smarty.template} + + Esta variável contém o nome do template + atual que esta sendo processado. + + + + + + + + Modificadores de variáveis + + Modificadores de variáveis podem ser aplicados a variáveis, funções customizadas + 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 funcionamento. Estes parâmetros seguem + o nome do modificador e são separados por : (dois pontos). + + + Exemplo de modificador + +{* Transforma para maiúsculas *} +<h2>{$title|upper}</h2> + +{* Trunca o $topic para 40 caracteres usa ... no final *} +Topic: {$topic|truncate:40:"..."} + +{* formata uma string literal *} +{"now"|date_format:"%Y/%m/%d"} + +{* aplica um modificador para uma função customizada *} +{mailto|upper address="me@domain.dom"} + + + Se você aplicar um modificador para uma matriz ao invés de o valor de uma variável, + o modificador vai ser aplicado em cada valor desta matriz. Se você realmente quiser + que o funciona em uma matriz inteira, você deve colocar um simbolo + @ antes do nome do modificador, assim como: + {$articleTitle|@count} (isto irá mostrar o número de elementos + na matriz $articleTitle.) + + + Modificadores podem ser carregados automaticamente a partir do seu $plugins_dir (veja também: + Naming + Conventions) ou podem ser registrados explicitamente (veja: register_modifier). + Adicionalmente, todas as funções do php podem ser utilizadas como + modificadores implicitamente. (O exemplo + @count acima usa atualmente 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, algumas + vezes a ordem dos parâmetros da função não é a desejavel + ({"%2.f"|sprintf:$float} atualmente funciona, mas pede algo + mais intuitivo {Por exemplo: + $float|string_format:"%2.f"} que é provido pela distribuição + do Smarty). Segundo: com $security ativado, todas as funções do + php que sejam utilizados como modificadores devem ser declaradas como + confiáveis na matriz + $security_settings['MODIFIER_FUNCS']. + + + + capitalize + + Isto é usado para converter para maiúsculas a primeira letra de todas as palavras em uma variável. + + + 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. + + + + count_characters + + + + + + + + + + Posição do Parâmetro + Tipo + Requerido + Padrão + Descrição + + + + + 1 + boolean + Não + false + Isto determina quando incluir ou não os espaços em + branco na contagem. + + + + + + Isto é usado para contar o número de caracteres em uma variável. + + +count_characters + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.'); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle} +{$articleTitle|count_characters} +{$articleTitle|count_characters:true} +MOSTRA: + +Cold Wave Linked to Temperatures. +29 +32 + + + + cat + + + + + + + + + + Posição do Parâmetro + Tipo + Requerido + cat + Descrição + + + + + 1 + string + Não + empty + Este é o valor para concatenar com a variável dada. + + + + + + Este valor é concatenado com a variável dada. + + +cat + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', "Psychics predict world didn't end"); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle|cat:" yesterday."} + +MOSTRA: + +Psychics predict world didn't end yesterday. + + + + count_paragraphs + + Isto é usado para contar o número de paragrafos em uma variável. + + +count_paragraphs + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', "War Dims Hope for Peace. Child's Death Ruins +Couple's Holiday.\n\nMan is Fatally Slain. Death Causes Loneliness, Feeling of Isolation."); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle} +{$articleTitle|count_paragraphs} + +MOSTRA: + +War Dims Hope for Peace. Child's Death Ruins Couple's Holiday. + +Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation. +2 + + + + count_sentences + + Isto é usado para contar o número de sentenças em uma variável. + + +count_sentences + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', 'Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.'); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle} +{$articleTitle|count_sentences} + +MOSTRA: + +Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe. +2 + + + + count_words + + Isto é usado para contar o número de palavras em uma variável. + + +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 + + + + 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. + + +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 + + +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. + + + + + 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. + + +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 + Tipo + Requerido + Valores Possíveis + Padrão + Descrição + + + + + 1 + string + Não + html,htmlall,url,quotes,hex,hexentity,javascript + html + 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. + + +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' +&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039; +&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039; +&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039; +%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">&#x62;&#x6f;&#x62;&#x40;&#x6d;&#x65;&#x2e;&#x6e;&#x65;&#x74;</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 "\t" para tabs.) + + +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:"\t"} + +MOSTRA: + +NJ judge to rule on nude beach. +Sun or rain expected today, dark tonight. +Statistics show that teen pregnancy drops off significantly after 25. + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + NJ judge to rule on nude beach. + Sun or rain expected today, dark tonight. + Statistics show that teen pregnancy drops off significantly after 25. + + + + lower + + Isto é usado para converter para minúsculas uma variável. + + +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. + + + + nl2br + + Todas as quebras de linha serão convertidas para <br /> na variável + data. Isto é equivalente a função nl2br() do PHP. + + +nl2br + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', "Sun or rain expected\ntoday, dark tonight"); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle|nl2br} + +MOSTRA: + +Sun or rain expected<br />today, dark tonight + + + + regex_replace + + + + + + + + + + Posição do Parâmetro + Tipo + Requerido + Padrão + Descrição + + + + + 1 + string + Sim + n/a + Esta é a expressão regular a ser substituída. + + + 2 + string + Sim + n/a + Esta é a string que irá substituir a expressão regular. + + + + + + Uma expressão regular para localizar e substituir na variável. Use a sintaxe + para preg_replace() do manual do PHP. + + +regex_replace + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', "Infertility unlikely to\nbe passed on, experts say."); +$smarty->display('index.tpl'); + +index.tpl: + +{* replace each carriage return, tab & new line with a space *} + +{$articleTitle} +{$articleTitle|regex_replace:"/[\r\t\n]/":" "} + +MOSTRA: + +Infertility unlikely to + be passed on, experts say. +Infertility unlikely to be passed on, experts say. + + + + replace + + + + + + + + + + Posição do Parâmetro + 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. + + +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. + + + + spacify + + + + + + + + + + Posição do Parâmetro + 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. + + +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:"^^"} + +OUTPUT: + +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 . +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^^. + + + + 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. + + +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 + + 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. + + + +strip + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', "Grandmother of\neight makes\t hole in one."); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle} +{$articleTitle|strip} +{$articleTitle|strip:"&nbsp;"} + +MOSTRA: + +Grandmother of +eight makes hole in one. +Grandmother of eight makes hole in one. +Grandmother&nbsp;of&nbsp;eight&nbsp;makes&nbsp;hole&nbsp;in&nbsp;one. + + + + strip_tags + + Isto retira as tags de marcação, basicamente tudo entre < e >. + + +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. + + + + truncate + + + + + + + + + + Posição do Parâmetro + 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. + + +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... + + + + upper + + Isto é usado para converter para maiúsculas uma variável. + + +upper + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', "If Strike isn't Settled Quickly it may Last a While."); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle} +{$articleTitle|upper} + +MOSTRA: + +If Strike isn't Settled Quickly it may Last a While. +IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE. + + + + wordwrap + + + + + + + + + + Posição do Parâmetro + Tipo + Requerido + Padrão + Descrição + + + + + 1 + integer + Não + 80 + Isto determina em + quantas colunas quebrar. + + + 2 + string + Não + \n + 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 \n). + 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. + + +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>\n"} + +{$articleTitle|wordwrap:30:"\n":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. + + + + + + + Combinando Modificadores + + Você pode aplicar qualquer número de modificadores para uma variável. Eles serão + aplicados na ordem que eles foram combinados, da esquerda para a direita. Eles + devem ser separados com um caractere | (pipe). + + + Combinando Modificadores + +index.php: + +$smarty = new Smarty; +$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.'); +$smarty->display('index.tpl'); + +index.tpl: + +{$articleTitle} +{$articleTitle|upper|spacify} +{$articleTitle|lower|spacify|truncate} +{$articleTitle|lower|truncate:30|spacify} +{$articleTitle|lower|spacify|truncate:30:". . ."} + + +MOSTRA: + +Smokers are Productive, but Death Cuts Efficiency. +S M O K E R S A R E P R O D U C T I V E , B U T D E A T H C U T S E F F I C I E N C Y . +s m o k e r s a r e p r o d u c t i v e , b u t d e a t h c u t s... +s m o k e r s a r e p r o d u c t i v e , b u t . . . +s m o k e r s a r e p. . . + + + + + + Funções Embutidas + + O Smarty vem com várias funções embutidas. Funções embutidas fazem parte + da linguagem de template. Você não pode criar funções personalizadas com + o mesmo nome, nem pode modificar as funções embutidas. + + + capture + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + name + string + Não + default + O nome do bloco capturado + + + assign + string + Não + n/a + O nome da variável para dar o valor da saída capturada + + + + + + capture é usado para coletar toda a saída do template em uma variável ao invés + de mostra-lo. Qualquer conteúdo entre {capture + name="foo"} e {/capture} coletado na variável especificada no atributo name. + O conteúdo capturado pode ser usado no template a apertir da variável especial + $smarty.capture.foo aonde foo é o valor passado para o atributo name. Se você não + passar um atributo name, então será usado "default". Todos os comandos + {capture} devem ter o seu {/capture}. Você pode aninhar(colocar um dentro de outro) + comandos capture. + + + Nota Tecnica + + Smarty 1.4.0 - 1.4.4 coloca o conteúdo capturado dentro da variável + chamada $return. A partir do 1.4.5, este funcionamento foi mudado + para usar o atributo name, então atualize os seus templates de acordo. + + + + + Tenha cuidado quando capturar a saída do comando insert. + Se você tiver o cache em on e você tiver comandos insert + que você espera que funcione com conteúdo do cache, + não capture este conteúdo. + + + + + capturando conteúdo do template + +{* we don't want to print a table row unless content is displayed *} +{capture name=banner} +{include file="get_banner.tpl"} +{/capture} +{if $smarty.capture.banner ne ""} + <tr> + <td> + {$smarty.capture.banner} + </td> + </tr> +{/if} + + + + + config_load + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + file + string + Sim + n/a + O nome do arquivo de configuração para incluir + + + section + string + Não + n/a + O nome da seção a carregar + + + scope + string + Não + local + + Como o escopo das variáveis carregadas é tratado, + o qual deve ser um entre local, parent ou global. local + indica que as variáveis são carregadas no contexto do + template local apenas. parent indica que as variáveis são carregadas + no contexto atual e no template que o chamou. global indica + que as variáveis estão + disponíveis para todos os templates. + + + + global + boolean + No + No + + Quando ou não as variáveis são visiveis para o template + superior(aquele que chamou este), o mesmo que scope=parent. + NOTA: este atributo esta obsoleto pelo atributo scope, mas + ainda é suportado. Se scope for indicado, este valor é ignorado. + + + + + + + Esta função é usada para carregar as variáveis de um arquivo de configuração + dentro de um template. Veja Config Files + para maiores + informações. + + +Função config_load + + +{config_load file="colors.conf"} + +<html> +<title>{#pageTitle#}</title> +<body bgcolor="{#bodyBgColor#}"> +<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"> + <tr bgcolor="{#rowBgColor#}"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> +</table> +</body> +</html> + + + Arquivos de configuração podem conter seções também. Voce pode carregar + variáveis de uma seção adicionando o atributo + section. + + + NOTA: Config file sections e a função embutida de + template section não tem nada a ver um com o outro, + eles apenas tem uma mesma + convenção de nomes. + + +Função config_load com seções + +{config_load file="colors.conf" section="Customer"} + +<html> +<title>{#pageTitle#}</title> +<body bgcolor="{#bodyBgColor#}"> +<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"> + <tr bgcolor="{#rowBgColor#}"> + <td>First</td> + <td>Last</td> + <td>Address</td> + </tr> +</table> +</body> +</html> + + + + foreach,foreachelse + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + from + string + Sim + n/a + O nome da matriz que você estará pegando os elementos + + + item + string + Yes + n/a + O nome da variável + que é o elemento atual + + + key + string + Não + n/a + O nome da variável que é a chave atual + + + name + string + Não + n/a + O nome do loop foreach para acessar as + propriedades foreach + + + + + + Loops foreach são uma alternativa para loops + section. foreach é usado + para pegar cada elemento de uma matriz associativa simples. + A sintaxe para foreach é muito mais simples do que + section, mas tem a desvantagem de poder ser usada + apenas para uma única matriz. Tags foreach devem ter + seu par /foreach. Os parâmetros requeridos são + from e item. O nome do loop + foreach pode ser qualquer coisa que você queira, feito de letras, números + e sublinhados. Loops foreach + podem ser aninhados, e o nome dos loops aninhados devem ser diferentes + um dos outros. A variável from (normalmente uma + matriz de valores) determina o número de vezes do loop + foreach. + foreachelse é executado quando não houverem mais valores + na variável from. + + +foreach + + +{* este exemplo irá mostrar todos os valores da matriz $custid *} +{foreach from=$custid item=curr_id} + id: {$curr_id}<br> +{/foreach} + +MOSTRA: + +id: 1000<br> +id: 1001<br> +id: 1002<br> + + + +foreach key + +{* A key contém a chave para cada valor do loop + +A definição é alo assim: + +$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"), + array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234"))); + +*} + +{foreach name=outer item=contact from=$contacts} + {foreach key=key item=item from=$contact} + {$key}: {$item}<br> + {/foreach} +{/foreach} + +MOSTRA: + +phone: 1<br> +fax: 2<br> +cell: 3<br> +phone: 555-4444<br> +fax: 555-3333<br> +cell: 760-1234<br> + + + + Loop foreach também tem as suas próprias variáveis para manipilar a as propriedades + foreach. Estas são indicadas assim: {$smarty.foreach.foreachname.varname} com + foreachname sendo o nome especificado no atributo + name do foreach. + + + + + iteration + + iteration é usado para mostrar a interação atual do loop. + + + Iteration sempre começa em 1 e + é incrementado um a um em cada interação. + + + + + first + + first é definido como true se a interação atual + do foreach for a primeira. + + + + + last + + last é definido como true se a interação atual + do foreach for a última. + + + + + show + + show é usado como parâmetro para o foreach. + show é um valor booleano, true ou false. Se + false, o foreach não será mostrado. Se tiver um foreachelse + presente, este será alternativamente mostrado. + + + + + total + + total é usado para mostrar o número de interações do + foreach. Isto pode ser usado dentro ou depois do foreach. + + + + + + + + + + include + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + file + string + Sim + n/a + O nome do arquivo de template a incluir + + + assign + string + Não + n/a + O nome de uma variável que irá + conter toda a saída do template + + + [var ...] + [var type] + Não + n/a + Variável para passar localmente para o template + + + + + + Tags include são usados para incluir outros templates no template + atual. Quaisquer variáveis disponíveis no template atual também esta + disponível dentro do template incluido. A tag include deve ter o atributo + "file", o qual contém o caminho do arquivo a incluir. + + + Você pode opcionalmente passar o atributo assign, + o qual irá especificar o nome de uma variável de template para a qual + conterá toda a saída de include ao + invés de mostra-la. + + +function include + +{include file="header.tpl"} + +{* O corpo do template vai aqui *} + +{include file="footer.tpl"} + + + Você pode também passar variáveis para o template incluído como atributos. + Quaisquer variáveis passadas para um template incluído como atributos + estão disponíveis somente dentro do escopo do template incluído. + As variáveis passadas como atributos sobrescrevem as variáveis de + template atuais, no caso de ambas terem o mesmo nome. + + +Função include passando variáveis + +{include file="header.tpl" title="Main Menu" table_bgcolor="#c0c0c0"} + +{* O corpo de template vai aqui *} + +{include file="footer.tpl" logo="http://my.domain.com/logo.gif"} + + + Use a sintaxe para template resources para + incluir arquivos fora do diretório $template_dir. + + +Exemplos de recursos para a função include + +{* caminho absoluto *} +{include file="/usr/local/include/templates/header.tpl"} + +{* caminho absoluto (mesma coisa) *} +{include file="file:/usr/local/include/templates/header.tpl"} + +{* caminho absoluto do windows (DEVE usar o prefixo "file:") *} +{include file="file:C:/www/pub/templates/header.tpl"} + +{* incluir a partir do recurso de template chamado "db" *} +{include file="db:header.tpl"} + + + + include_php + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + file + string + Sim + n/a + O nome do arquivo php a incluir + + + once + boolean + Não + true + Quando incluir ou não o arquivo php mais de uma vez se + incluído várias vezes + + + assign + string + Não + n/a + O nome da variável + que receberá a saída do arquivo php + + + + + + Tags include_php são usadas para incluir um script php no seu template. + Se a segurança estiver ativada, então o script php deve estar localizado + no caminho $trusted_dir. A tag include_php deve ter o atributo + "file", o qual contém o caminho para o arquivo php a ser incluído, + ou relativo a $trusted_dir, ou um caminho absoluto. + + + include_php é um bom meio de manipular templates com componentes, + e mante o código PHP separado dos arquivos de template. Vamos dizer + que você tenha um template que mostre a navegação do seu site, o qual + é prenchido automaticamente a partir de um banco de dados. Você pode + manter a sua lógica PHP que obtém os dados em um diretório separado, + e inclui-la no topo do template. Agora você pode incluir este template + em qualquer lugar sem se preocupar se a informação do banco de dados foi + obtida antes de usar. + + + Por padrão, os arquivos php são incluídos apenas uma vez mesmo + se incluídos várias vezes no template. Você pode especificar que ele + seja incluído todas as vezes com o atributo once. + Definindo once para false irá incluir o script php a cada vez que + ele seja incluído no template. + + + Você pode opcionalmente passar o atributo assign, + o qual irá especificar uma variável de template a qual irá conter + toda a saída de + include_php em vez de mostra-la. + + + O objeto smarty esta disponível como $this dentro do + script php que você incluiu. + + +Função include_php + +load_nav.php +------------- + +<?php + + // carrega variáveis de um banco de dados mysql e define ela para o template + require_once("MySQL.class.php"); + $sql = new MySQL; + $sql->query("select * from site_nav_sections order by name",SQL_ALL); + $this->assign('sections',$sql->record); + +?> + + +index.tpl +--------- + +{* caminho absoluto ou relativo a $trusted_dir *} +{include_php file="/path/to/load_nav.php"} + +{foreach item="curr_section" from=$sections} + <a href="{$curr_section.url}">{$curr_section.name}</a><br> +{/foreach} + + + + insert + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + name + string + Sim + n/a + O nome da função insert (insert_name) + + + assign + string + Não + n/a + O nome da variável que + irá receber a saída + + + script + string + Não + n/a + O nome de um script php que será incluido + antes que a função insert seja chamada + + + [var ...] + [var type] + Não + n/a + Variável para passar para a função insert + + + + + + Tags insert funcionam parecido com as tags include, exceto que as tags + insert não vão para o cache quando caching esta ativado. Ela será + executada a cada invocação do template. + + + Vamos dizer que você tenha um template com um banner em cima. O + banner pode conter qualquer mistura de html, imagens, flash, etc. + Assin nós não podemos usar uma ligação estatica aqui, e nós não + queremos que este conteúdo fique no cache com a página. Aqui vem a tag + insert: o template conhece os valores #banner_location_id# e + #site_id# (obtidos de um arquivo de configuração), e precisa chamar + uma função para obter o conteúdo do banner. + + +function insert + +{* example of fetching a banner *} +{insert name="getBanner" lid=#banner_location_id# sid=#site_id#} + + + Neste exemplo, nós estamos usando o nome "getBanner" e passando os parâmetros + #banner_location_id# e #site_id#. O Smarty irá procurar por uma função chamada + insert_getBanner() na sua aplicação PHP, passando os valores de + #banner_location_id# e #site_id# como primeiro argumento em uma + matriz associativa. Todos os nomes de função insert em sua + aplicação devem ser precedidas por "insert_" para prevenir possíveis + problemas com nomes de funções repetidos. Sua função insert_getBanner() + deve fazer alguma coisa com os valores passados e retornar os resultados. + Estes resultados são mostrados no template em lugar da tag insert. + Neste exemplo, o Smarty irá chamar esta função: + insert_getBanner(array("lid" => "12345","sid" => "67890")); + e mostrar o resultado retornado no lugar da tag insert. + + + Se você der o atributo "assign", a saída da tag insert será + dada para esta variável ao invés de ser mostrada + no template. Nota: definir a saída para uma variável não é + útil quando o cache esta ativo. + + + Se você der o atributo "script", este script php será incluido + (apenas uma vez) antes da execução da função insert. Este + é o caso onde a função insert não existe ainda, e um script + php deve ser incluído antes para faze-la funcionar. O caminho pode + ser absoluto ou relativo a $trusted_dir. Quando a segurança esta + ativada, o script deve estar em $trusted_dir. + + + O objeto Smarty é passado como segundo argumento. Desde modo + pocê pode refenciar o objeto Smarty + de dentro da função. + + + Nota Tecnica + + É possível ter partes do template fora do cache. + se você tiver caching + ativado, tags insert não estarão no cache. Ela será executada + dinamicamente a cada vez que a página seja criada, mesmo com + páginas em cache. Isto funciona bem para coisas como banners, pesquisa, + clima, resultados de pesquisa, areas de opnião do usuário, etc. + + + + + if,elseif,else + + Comandos if no Smarty tem muito da mesma flexibilidade do php, + com algumas adições para a ferramenta de template. + Todo if deve ter o seu + /if. else e + elseif também são permitidos. "eq", "ne","neq", + "gt", "lt", "lte", "le", "gte" "ge","is even","is odd", "is not + even","is not odd","not","mod","div by","even by","odd + by","==","!=",">", "<","<=",">=" são todos os qualificadores + de condição válidos, e ddevem estar separados + dos elementos em roda por espaço. + + +comandos if + +{if $name eq "Fred"} + Welcome Sir. +{elseif $name eq "Wilma"} + Welcome Ma'am. +{else} + Welcome, whatever you are. +{/if} + +{* um exemplo com "or" *} +{if $name eq "Fred" or $name eq "Wilma"} + ... +{/if} + +{* o mesmo que acima *} +{if $name == "Fred" || $name == "Wilma"} + ... +{/if} + +{* a seguinte sintaxe não irá funcionar, qualificadores de condição + devem estar separados dos elementos em torno por espaços *} +{if $name=="Fred" || $name=="Wilma"} + ... +{/if} + + +{* parenteses são permitidos *} +{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#} + ... +{/if} + +{* você pode também colocar funções php *} +{if count($var) gt 0} + ... +{/if} + +{* testa se o valor é par ou impar *} +{if $var is even} + ... +{/if} +{if $var is odd} + ... +{/if} +{if $var is not odd} + ... +{/if} + +{* test if var is divisible by 4 *} +{if $var is div by 4} + ... +{/if} + +{* test if var is even, grouped by two. i.e., +0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc. *} +{if $var is even by 2} + ... +{/if} + +{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *} +{if $var is even by 3} + ... +{/if} + + + + ldelim,rdelim + + ldelim e rdelim são usados para mostrar os delimitadores literalmente, + no nosso caso "{" ou "}". A ferramente de template sempre + tenta interpretar os delimitadores, então este é o meio de contornar isso. + + +ldelim, rdelim + +{* isto irá mostrar os delimitadore no template *} + +{ldelim}funcname{rdelim} is how functions look in Smarty! + + +MOSTRA: + +{funcname} is how functions look in Smarty! + + + + literal + + Tags literal permitem que um bloco de dados seja tomado literalmente, + não sendo interpretado pelo smarty. Isto é útil + para coisas como seções javascript, aonde podem haver + chaves("{}") e coisas assim que possam confundir + o interpretador do template. + Qualquer coisa dentro das {literal}{/literal} não será interpretado, mas mostrado como estiver. + + +Tags literal + +{literal} + <script language=javascript> + + <!-- + function isblank(field) { + if (field.value == '') + { return false; } + else + { + document.loginform.submit(); + return true; + } + } + // --> + + </script> +{/literal} + + + + php + + Tags php permitem que você adicione código php diretamente no template. + Não será escapado, não importando a definição de $php_handling. Isto + é apenas para usuários avançados e normalmente não é necessário. + + +Tags php + +{php} + // incluindo um script php + // diretamente no template. + include("/path/to/display_weather.php"); +{/php} + + + + section,sectionelse + + + + + + + + + + Nome do atributo + Tipo + Requerido + Padrão + Descrição + + + + + name + string + Sim + n/a + O nome da seção + + + loop + [$variable_name] + Sim + n/a + O nome da variável para determinar o + número de interações + + + start + integer + Não + 0 A posição + do índice que a seção vai começar. Se o valor + é negativo, a posição de inicio é calculada a partir + do final da matriz. For exemplo, se houverem + sete valores na matriz e start for -2, o + índice inicial é 5. Valores inválidos (valores fora do + tamanho da matriz) são automaticamente truncados + para o valor válido mais próximo. + + + step + integer + Não + 1 + O valor do passo que será usado para o loop + na matriz. Por exemplo, step=2 irá realizar o loop com + os índices 0,2,4, etc. Se step for negativo, ele irá caminhar + pela matriz de trás para frente. + + + max + integer + Não + 1 + Define o número máximo de loops + para a section. + + + show + boolean + Não + true + Determina quando mostrar ou não esta section + + + + + + sections de template são usada para realizar um loop por uma matriz. Todas as tags + section devem ter as suas + /section. Parâmetros requeridos são + name e loop. O nome + de section pode ser o que você quiser, feito de letras, + números e sublinhados. Sections podem ser aninhadas, e os nomes das section + aninhadas devem ser diferentes um dos outros. A variável do loop + (normalmente uma matriz de valores) determina o número de vezes do + loop da section. Quando estiver mostrando uma variável dentro de uma section, + o nome da section deve estar ao lado da variável dentro de conchetes + []. sectionelse é + executado quando não houverem valores para a variável de loop. + + +section + + +{* este exemplo irá mostrar todos os valores de $custid array *} +{section name=customer loop=$custid} + id: {$custid[customer]}<br> +{/section} + +MOSTRA: + +id: 1000<br> +id: 1001<br> +id: 1002<br> + + + +loop de variável section + +{* a variável de loo´p determina o número de vezes do loop. + Vocâ pode acessar qualquer variável do template dentro da section. + Este exemplo assume que $custid, $name e $address são todas + matrizes contendo o mesmo número de valores *} +{section name=customer loop=$custid} + id: {$custid[customer]}<br> + name: {$name[customer]}<br> + address: {$address[customer]}<br> + <p> +{/section} + + +MOSTRA: + +id: 1000<br> +name: John Smith<br> +address: 253 N 45th<br> +<p> +id: 1001<br> +name: Jack Jones<br> +address: 417 Mulberry ln<br> +<p> +id: 1002<br> +name: Jane Munson<br> +address: 5605 apple st<br> +<p> + + + +Nomes de section + +{* o nome de section pode ser o que você quiser, + e é usado para referenciar os dados dentro da section *} +{section name=mydata loop=$custid} + id: {$custid[mydata]}<br> + name: {$name[mydata]}<br> + address: {$address[mydata]}<br> + <p> +{/section} + + + +sections aninhadas + +{* sections podem ser aninhadas tão profundamente quanto você quiser. Com sections aninhadas, + você pode acessar estruturas de dados complexas, como matriz multi-dimensionais. + Neste exemplo, $contact_type[customer] é uma matriz de + tipos de contato para o custumer atual. *} +{section name=customer loop=$custid} + id: {$custid[customer]}<br> + name: {$name[customer]}<br> + address: {$address[customer]}<br> + {section name=contact loop=$contact_type[customer]} + {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br> + {/section} + <p> +{/section} + + +MOSTRA: + +id: 1000<br> +name: John Smith<br> +address: 253 N 45th<br> +home phone: 555-555-5555<br> +cell phone: 555-555-5555<br> +e-mail: john@mydomain.com<br> +<p> +id: 1001<br> +name: Jack Jones<br> +address: 417 Mulberry ln<br> +home phone: 555-555-5555<br> +cell phone: 555-555-5555<br> +e-mail: jack@mydomain.com<br> +<p> +id: 1002<br> +name: Jane Munson<br> +address: 5605 apple st<br> +home phone: 555-555-5555<br> +cell phone: 555-555-5555<br> +e-mail: jane@mydomain.com<br> +<p> + + + +sections e matrizes associativas + +{* Este é um exemplo de mostrar os dados de matriz associativa + dentro da section *} +{section name=customer loop=$contacts} + name: {$contacts[customer].name}<br> + home: {$contacts[customer].home}<br> + cell: {$contacts[customer].cell}<br> + e-mail: {$contacts[customer].email}<p> +{/section} + + +MOSTRA: + +name: John Smith<br> +home: 555-555-5555<br> +cell: 555-555-5555<br> +e-mail: john@mydomain.com<p> +name: Jack Jones<br> +home phone: 555-555-5555<br> +cell phone: 555-555-5555<br> +e-mail: jack@mydomain.com<p> +name: Jane Munson<br> +home phone: 555-555-5555<br> +cell phone: 555-555-5555<br> +e-mail: jane@mydomain.com<p> + + + + + +sectionelse + +{* sectionelse irá executar se não houverem mais valores $custid *} +{section name=customer loop=$custid} + id: {$custid[customer]}<br> +{sectionelse} + there are no values in $custid. +{/section} + + + Sections também tem as suas próprias variáveis que manipulam as propriedaes section. + Estas são indicadas assim: {$smarty.section.sectionname.varname} + + + NOTA: a partir do Smarty 1.5.0, a sintaxe para as variáveis de propriedades de section + mudou de {%sectionname.varname%} para + {$smarty.section.sectionname.varname}. A sintaxe antiga ainda é suportada, + mas você irá ver referencias apenas a nova sintaxe nos + exemplos do manual. + + + index + + index é usado para mostrar o índice atual do loop, começando em zero + (ou pelo atributo start se dado), e incrementando por um (ou pelo + atributo step se dado). + + + Nota Técnica + + Se as propriedades section não for modificada, + então isto funciona igual a propriedade iteration da section, + exceto que começa em 0 ao invés de 1. + + + + section property index + + {section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}<br> + {/section} + + + MOSTRA: + + 0 id: 1000<br> + 1 id: 1001<br> + 2 id: 1002<br> + + + + + index_prev + + index_prev é usado para mostrar o índice anterior do loop. + No primeiro loop, isto é definido como -1. + + + section property index_prev + + {section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}<br> + {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *} + {if $custid[customer.index_prev] ne $custid[customer.index]} + The customer id changed<br> + {/if} + {/section} + + + MOSTRA: + + 0 id: 1000<br> + The customer id changed<br> + 1 id: 1001<br> + The customer id changed<br> + 2 id: 1002<br> + The customer id changed<br> + + + + + index_next + + index_next é usado para mostrar o próximo indice do loop. No último loop, + isto ainda é um mais o índice atual( respeitando a definição + do atributo step, se dado.) + + + section property index_next + + {section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}<br> + {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *} + {if $custid[customer.index_next] ne $custid[customer.index]} + The customer id will change<br> + {/if} + {/section} + + + MOSTRA: + + 0 id: 1000<br> + The customer id will change<br> + 1 id: 1001<br> + The customer id will change<br> + 2 id: 1002<br> + The customer id will change<br> + + + + + iteration + + iteration é usado para mostrar a interação atual do loop. + + + NOTA: isto não é afetado pelas propriedades start, step e + max, diferentemente das propriedade index. Iteration também começa com 1 + ao invés de 0 como index. rownum é um apelido para iteration, + elas funcionam de modo identico. + + + section property iteration + + {section name=customer loop=$custid start=5 step=2} + current loop iteration: {$smarty.section.customer.iteration}<br> + {$smarty.section.customer.index} id: {$custid[customer]}<br> + {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *} + {if $custid[customer.index_next] ne $custid[customer.index]} + The customer id will change<br> + {/if} + {/section} + + + MOSTRA: + + current loop iteration: 1 + 5 id: 1000<br> + The customer id will change<br> + current loop iteration: 2 + 7 id: 1001<br> + The customer id will change<br> + current loop iteration: 3 + 9 id: 1002<br> + The customer id will change<br> + + + + + first + + first é definido como true se a interação atual da section + é a primeira. + + + section property first + + {section name=customer loop=$custid} + {if $smarty.section.customer.first} + <table> + {/if} + + <tr><td>{$smarty.section.customer.index} id: + {$custid[customer]}</td></tr> + + {if $smarty.section.customer.last} + </table> + {/if} + {/section} + + + MOSTRA: + + <table> + <tr><td>0 id: 1000</td></tr> + <tr><td>1 id: 1001</td></tr> + <tr><td>2 id: 1002</td></tr> + </table> + + + + + last + + last é definido como true de a interação atual da + section é a última. + + + section property last + + {section name=customer loop=$custid} + {if $smarty.section.customer.first} + <table> + {/if} + + <tr><td>{$smarty.section.customer.index} id: + {$custid[customer]}</td></tr> + + {if $smarty.section.customer.last} + </table> + {/if} + {/section} + + + MOSTRA: + + <table> + <tr><td>0 id: 1000</td></tr> + <tr><td>1 id: 1001</td></tr> + <tr><td>2 id: 1002</td></tr> + </table> + + + + + rownum + + rownum é usado para mostrar a interação atual do loop, + começando em um. É um apelido para iteration, + elas funcionam de modo identico. + + + section property rownum + + {section name=customer loop=$custid} + {$smarty.section.customer.rownum} id: {$custid[customer]}<br> + {/section} + + + MOSTRA: + + 1 id: 1000<br> + 2 id: 1001<br> + 3 id: 1002<br> + + + + + loop + + loop é usado para mostrar o último número do índice do loop desta + section. Isto pode ser usado dentro ou depois de section. + + + section property index + + {section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}<br> + {/section} + + There were {$smarty.section.customer.loop} customers shown above. + + MOSTRA: + + 0 id: 1000<br> + 1 id: 1001<br> + 2 id: 1002<br> + + There were 3 customers shown above. + + + + + show + + show é usado como parâmetro para section. + show é um valor booleano, true ou false. Se + false, a section não será mostrada. Se existir um sectionelse + presente, esta será alternativamente mostrado. + + + section attribute show + + {* $show_customer_info deve ser passada da aplicação PHP, + para regular quando mostrar ou não mostrar esta section *} + {section name=customer loop=$custid show=$show_customer_info} + {$smarty.section.customer.rownum} id: {$custid[customer]}<br> + {/section} + + {if $smarty.section.customer.show} + the section was shown. + {else} + the section was not shown. + {/if} + + + MOSTRA: + + 1 id: 1000<br> + 2 id: 1001<br> + 3 id: 1002<br> + + the section was shown. + + + + + total + + total é usado para mostrar o número de interações que esta section terá. + Isto pode ser usado dentro ou depois da section. + + + section property total + + {section name=customer loop=$custid step=2} + {$smarty.section.customer.index} id: {$custid[customer]}<br> + {/section} + + There were {$smarty.section.customer.total} customers shown above. + + MOSTRA: + + 0 id: 1000<br> + 2 id: 1001<br> + 4 id: 1002<br> + + There were 3 customers shown above. + + + + + + strip + + Várias vezes web designers tem problemas com espaços em branco e + carriage returns afetam a saída do HTML (browser + "features"), assim você tem que colocar todas as suas tags juntas para ter + os resultados desejados. Isto normalmente termina em um + template ilegível ou que não se consegue ler. + + + Tudo dentro de {strip}{/strip} no Smarty tem retirados os espaços em branco + e carriage returns no inicio e final das linhas + antes que sejam mostrados. Deste modo você pode manter seu template + legível, e não se preocupar com o espaço estra causando + problemas. + + + Nota Técnica + + {strip}{/strip} não afeta o conteúdo das variáveis de template. + Veja strip modifier + function. + + + +strip tags + +{* o seguinte estará tudo junto em uma linha na saída *} +{strip} +<table border=0> + <tr> + <td> + <A HREF="{$url}"> + <font color="red">This is a test</font> + </A> + </td> + </tr> +</table> +{/strip} + + +MOSTRA: + +<table border=0><tr><td><A HREF="http://my.domain.com"><font color="red">This is a test</font></A></td></tr></table> + + + Note que no exemplo acima, todas as linhas começam e terminam + com tags HTML. Tenha cuidado que todas as linhas ficam juntas. + Se você tiver texto simples no inicio ou no final de uma linha, + ele estará junto, e pode não ser o resultado desejado. + + + + + + Funções Personalizadas + + Smarty vem com várias funções personalizadas que você + pode usar em seus templates. + + + assign + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + var + string + Sim + n/a + O nome da variável que esta ganhando valor + + + value + string + Yes + n/a + O valor que esta sendo dado + + + + + + assign é usado para definir valores para variável + de template durante a execução do template. + + +assign + +{assign var="name" value="Bob"} + +The value of $name is {$name}. + +MOSTRA: + +The value of $name is Bob. + + + + counter + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + name + string + Não + default + O nome do contador + + + start + number + Não + 1 + O número inicial para contar a partir de + + + skip + number + Não + 1 + O intervalo para contar + + + direction + string + Não + up + A direção para contar (up/down) + + + print + boolean + Não + true + Quando mostrar ou não o valor + + + assign + string + Não + n/a + A variável de template que vai + receber a saída + + + + + + counter é usada para mostrar uma contagem. counter irá se lembrar de + count em cada interação. Você pode ajustar o número, o intervalo + e a direção da contagem, assim como detrminar quando + mostrar ou não a contagem. Você pode ter varios contadores ao + mesmo tempo, dando um nome único para cada um. Se você não der um nome, + o nome 'default' será usado. + + + Se você indicar o atributo especial "assign", a saída da função counter + irá para essa variável de template ao invés de + ser mostrada no template. + + +counter + +{* inicia a contagem *} +{counter start=0 skip=2 print=false} + +{counter}<br> +{counter}<br> +{counter}<br> +{counter}<br> + +MOSTRA: + +2<br> +4<br> +6<br> +8<br> + + + + cycle + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + name + string + Não + default + O nome do ciclo + + + values + mixed + Sim + N/A + Os valores do ciclo, ou uma lista delimitada + por vírgula (veja o atributo delimiter), + ou uma matriz de valores. + + + print + boolean + Não + true + Quando mostrar ou não o valor + + + advance + boolean + Não + true + Quando avançar ou não para o próximo valor + + + delimiter + string + Não + , + O delimitador para usar no atributo values. + + + assign + string + Não + n/a + A variável de template que + receberá a saída + + + + + + Cycle é usado para fazer um clico através de um conjunto de valores. + Isto torna fácil alternar entre duas ou mais cores em uma tabela, + ou entre uma matriz de valores. + + + Você pode usar o cycle em mais de um conjunto de valores + no seu template. Dê a cada conjunto de valores + um nome único. + + + Você pode fazer com que o valor atual não seja mostrado + definindo o atributo print para false. Isto é útil para + pular um valor. + + + O atributo advance é usado para repetir um valor. Quando definido + para false, a próxima chamada para cycle irá mostrar o mesmo valor. + + + Se você indicar o atributo especial "assign", a saída da função + cycle irá para a variável de template ao invés de ser + mostrado diretamente no template. + + +cycle + +{section name=rows loop=$data} +<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}"> + <td>{$data[rows]}</td> +</tr> +{/section} + +MOSTRA: + +<tr bgcolor="#eeeeee"> + <td>1</td> +</tr> +<tr bgcolor="#d0d0d0"> + <td>2</td> +</tr> +<tr bgcolor="#eeeeee"> + <td>3</td> +</tr> + + + + + debug + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + output + string + Não + html + Tipo de saída, html ou javascript + + + + + + {debug} mostra o console de debug na página. Isto funciona independente + da definição de debug. + Já que isto é executado em tempo de execução, isto é capaz apenas de + mostrar as variáveis definidas, e não os templates + que estejam em uso. Mas você pode ver todas as variáveis + disponíveis no escopo do template. + + + + eval + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + var + mixed + Sim + n/a + Variável (ou string) para avaliar + + + assign + string + Não + n/a + A variável de template que + receberá a saída + + + + + + eval é usado para avaliar uma variável como template. Isto pode ser usado para + coisas como embutir tags/variáveis de template dentro de variáveis + ou tags/variáveis dentro de variáveis em um arquivo de configuração. + + + Se você indicar o atributo especial "assign", a saída da função + eval irá para esta variável de template ao + invés de aparecer no template. + + + Nota Técnica + + Variáveis avaliadas são tratadas igual a templates. Elas seguem + o mesmo funcionamento para escapar e para segurança como + se fossem templates. + + + + Nota Técnica + + Variáveis avaliadas são compiladas a cada invocação, as versões + compiladas não são salvas. Entretando, se você tiver o cache ativado, + a saída vai ficar no cache junto com o resto do template. + + + +eval + +setup.conf +---------- + +emphstart = <b> +emphend = </b> +title = Welcome to {$company}'s home page! +ErrorCity = You must supply a {#emphstart#}city{#emphend#}. +ErrorState = You must supply a {#emphstart#}state{#emphend#}. + + +index.tpl +--------- + +{config_load file="setup.conf"} + +{eval var=$foo} +{eval var=#title#} +{eval var=#ErrorCity#} +{eval var=#ErrorState# assign="state_error"} +{$state_error} + +MOSTRA: + +This is the contents of foo. +Welcome to Foobar Pub & Grill's home page! +You must supply a <b>city</b>. +You must supply a <b>state</b>. + + + + + + fetch + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + file + string + Sim + n/a + O arquivo, site http ou ftp para obter + + + assign + string + Não + n/a + A variável de template + que vai receber a saída + + + + + + fetch é usado para obter arquivos do sistema de arquivos local, + http ou ftp, e mostrar o seu conteúdo. Se o nome do arquivo começar + com "http://", a página do web site será obtidae mostrada. Se o + nome do arquivo começar com "ftp://", o arquivo será obtido do servidor + ftp e mostrado. Para arquivos locais, o caminho completo do sistema de + arquivos deve ser dado, ou um caminho relativo ao script php executado. + + + Se você indicar o atributo especial "assign", a saída da função + fetch irá para uma variável de template ao ivés de + ser mostrado no template. (novo no Smarty 1.5.0) + + + Nota Técnica + + Isto não suporta redirecionamento http, tenha + certesa de incluir a barra no final aonde necessário. + + + + Nota Técnica + + Se a segurança do template esta ativada e você + estiver obtendo um arquivo do sistema de arquivos local, isto + irá permitir apenas arquivos de um dos diretórios + definidos como seguros. ($secure_dir) + + + +fetch + +{* inclui algum javascript no seu template *} +{fetch file="/export/httpd/www.domain.com/docs/navbar.js"} + +{* embute algum texto sobre o tempo de outro web site *} +{fetch file="http://www.myweather.com/68502/"} + +{* obtém um arquivo de notícias via ftp *} +{fetch file="ftp://user:password@ftp.domain.com/path/to/currentheadlines.txt"} + +{* coloca o conteúdo obtido para uma varável de template *} +{fetch file="http://www.myweather.com/68502/" assign="weather"} +{if $weather ne ""} + <b>{$weather}</b> +{/if} + + + + html_checkboxes + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + name + string + Não + checkbox + O nome da lista checkbox + + + values + array + Sim, a menos que estaja usando o atributo options + n/a + Uma matriz de valores para os botões checkbox + + + output + array + Sim, a menos que estaja usando o atributo options + n/a + uma matriz de saída para os botões checkbox + + + selected + string/array + Não + empty + O(s) elemento(s) checkbox marcado(s) + + + options + matriz + Sim, a mesnos que esteja usando values e output + n/a + Uma matriz associativa de valores e saída + + + separator + string + Não + empty + string de texto para separar cada checkbox + + + labels + boolean + Não + true + Adicionar tags <label> para na saída + + + + + + html_checkboxes é uma função personalizada que cria um grupo de + checkbox com os dados providos. Ela cuida de qual(is) item(s) + estão selecionado(s) por padrão. Os atributos requeridos são + values e output, a menos que você use options. + Toda a saída é compatível com XHTML. + + + Todos os parâmetro que não estejam na lista acima são mostrados + como pares nome/valor dentro de cada tag <input> criada. + + +html_checkboxes + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('cust_ids', array(1000,1001,1002,1003)); +$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Charlie Brown')); +$smarty->assign('customer_id', 1001); +$smarty->display('index.tpl'); + + +index.tpl: + +{html_checkboxes values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"} + + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('cust_checkboxes', array( + 1000 => 'Joe Schmoe', + 1001 => 'Jack Smith', + 1002 => 'Jane Johnson', + 1003 => 'Charlie Brown')); +$smarty->assign('customer_id', 1001); +$smarty->display('index.tpl'); + +index.tpl: + +{html_checkboxes name="id" options=$cust_checkboxes checked=$customer_id separator="<br />"} + + +MOSTRA: (ambos os exemplos) + +<label><input type="checkbox" name="checkbox[]" value="1000" />Joe Schmoe</label><br /> +<label><input type="checkbox" name="checkbox[]" value="1001" checked="checked" />Jack Smith</label><br /> +<label><input type="checkbox" name="checkbox[]" value="1002" />Jane Johnson</label><br /> +<label><input type="checkbox" name="checkbox[]" value="1003" />Charlie Brown</label><br /> + + + + html_image + + + + + + + + + + Nome do Atributo + Tipo + Exigido + Padrão + Descrição + + + + + file + string + Sim + n/a + name/path para a imagem + + + border + string + Não + 0 + tamanho da borda de contorno da imagem + + + height + string + Não + altura atual da imagem + altura com a qual a imagem deve ser mostrada + + + width + string + Não + largura atual da imagem + largura com a qual a imagem deve ser mostrada + + + basedir + string + Não + doc root do servidor + diretório de base a caminhos relativos + + + alt + string + Não + "" + descrição alternativa da imagem + + + href + string + Não + n/a + valor href para aonde a imagem será ligada + + + + + + html_image é uma função customizada que gera uma tag HTML para uma imagem. + A altura e a largura são automaticamente calculadas a partir do arquivo de imagem se + nenhum valor é fornecido. + + + basedir é o diretório base do qual caminhos relativos de imagens estão baseados. + Se não fornecido, o document root do servidor (variável de ambiente DOCUMENT_ROOT) é usada + como o diretório base. Se a segurança está habilitada, o caminho para a imagem deve estar dentro + de um diretório seguro. + + + href é o valor href para onde a imagem será ligada. Se um link é fornecido, + uma tag <a href="LINKVALUE"><a> é posta em volta da tag da imagem. + + + Nota Técnica + + html_image requer uma ação ao disco para ler a imagem e calcular + a altura e a largura. Se você não usa caching de template, normalmente é + melhor evitar html_image e deixar as tags de imagem estáticas para performance + otimizada. + + + +html_image + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->display('index.tpl'); + +index.tpl: + +{html_image file="pumpkin.jpg"} +{html_image file="/path/from/docroot/pumpkin.jpg"} +{html_image file="../path/relative/to/currdir/pumpkin.jpg"} + +OUTPUT: (possível) + +<img src="pumpkin.jpg" alt="" border="0" width="44" height="68" /> +<img src="/path/from/docroot/pumpkin.jpg" alt="" border="0" width="44" height="68" /> +<img src="../path/relative/to/currdir/pumpkin.jpg" alt="" border="0" width="44" height="68" /> + + + + + + + + html_options + + + + + + + + + + Nome do Atributo + Tipo + Exigido + Padrão + Descrição + + + + + values + array + Sim, a menos que usando atributos de opções + n/a + um array de valores para o menu dropdown + + + output + array + Sim, a menos que usando atributos de opções + n/a + um array de saída para o menu dropdown + + + selected + string/array + Não + empty + o elemento do option selecionado + + + options + associative array + Sim, a menos que usando valores e saída + n/a + um array associativo de valores e saída + + + name + string + Não + empty + nome do grupo selecionado + + + + + + html_options é uma função customizada que cria um grupo html option com os dados fornecidos. + Ela está atenta de quais itens são selecionados por definição. Atributos exigidos são valores e + saída, a menos que você use options + no lugar. + + + Se um valor dado é um array, ele será tratado como um OPTGROUP html, + e mostrará os grupos. + Recursion é suportado com OPTGROUP. Todas as saídas estão compatíveis com XHTML. + + + Se o atributo opcional name é dado, as tags + <select name="groupname"></select> irão enclausurar a lista de opções. + Caso contrário apenas a lista de opções é gerada. + + + Todos os parâmetros que não estão na lista acima são exibidos como + name/value-pairs dentro de <select>-tag. Eles são ignorados se o opcional + namenão é dado. + + +html_options + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('cust_ids', array(1000,1001,1002,1003)); +$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane +Johnson','Carlie Brown')); +$smarty->assign('customer_id', 1001); +$smarty->display('index.tpl'); + +index.tpl: + +<select name=customer_id> + {html_options values=$cust_ids selected=$customer_id output=$cust_names} +</select> + + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('cust_options', array( + 1001 => 'Taniel Franklin', + 1002 => 'Fernando Correa', + 1003 => 'Marcelo Pereira', + 1004 => 'Charlie Brown')); +$smarty->assign('customer_id', 1001); +$smarty->display('index.tpl'); + +index.tpl: + +<select name=customer_id> + {html_options options=$cust_options selected=$customer_id} +</select> + + +OUTPUT: (both examples) + +<select name=customer_id> + <option value="1000">Taniel Franklin</option> + <option value="1001" selected="selected">Fernando Correa</option> + <option value="1002">Marcelo Pereira</option> + <option value="1003">Charlie Brown</option> +</select> + + + + html_radios + + + + + + + + + + Nome do Atributo + Tipo + Exigido + Padrão + Descrição + + + + + name + string + Não + radio + nome da radio list + + + values + array + Sim, a menos que utilizando atributo de opções + n/a + um array de valores para radio buttons + + + output + array + Sim, a menos que utilizando atributo de opções + n/a + um array de saída pra radio buttons + + + checked + string + Não + empty + O elemento do radio assinalado + + + options + associative array + Sim, a menos que utilizando valores e saída + n/a + um array associativo de valores e saída + + + separator + string + Não + empty + string de texto para separae cada item de radio + + + + + + html_radios é uma função customizada que cria grupo de botões de radio html + com os dados fornecidos. Ele está atento para qual item está selecionado por definição. + Atributos exigidos são valores e saídas, a menos que você use opções no lugar disso. Toda + saída é compatível com XHTML. + + + Todos os parâmetros que não estão na lista acima são impressos como + name/value-pairs de dentro de cada <input>-tags criada. + + + +html_radios + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('cust_ids', array(1000,1001,1002,1003)); +$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane +Johnson','Carlie Brown')); +$smarty->assign('customer_id', 1001); +$smarty->display('index.tpl'); + + +index.tpl: + +{html_radios values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"} + + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('cust_radios', array( + 1001 => 'Joe Schmoe', + 1002 => 'Jack Smith', + 1003 => 'Jane Johnson', + 1004 => 'Charlie Brown')); +$smarty->assign('customer_id', 1001); +$smarty->display('index.tpl'); + + +index.tpl: + +{html_radios name="id" options=$cust_radios checked=$customer_id separator="<br />"} + + +OUTPUT: (both examples) + +<input type="radio" name="id[]" value="1000">Taniel Fraklin<br /> +<input type="radio" name="id[]" value="1001" checked="checked"><br /> +<input type="radio" name="id[]" value="1002">Marcelo Pereira<br /> +<input type="radio" name="id[]" value="1003">Charlie Brown<br /> + + + + html_select_date + + + + + + + + + + Nome do Atributo + Tipo + Exigido + Padrão + Descrição + + + + + prefix + string + Não + Date_ + Com o que prefixar o nome da variável + + + time + timestamp/YYYY-MM-DD + Não + tempo atual no timestamp do unix ou YYYY-MM-DD + format + qual date/time para usar + + + start_year + string + Não + ano atual + o primeiro ano no menu dropdown, ou o + número do ano, ou relativo ao ano atual (+/- N) + + + end_year + string + Não + da mesma forma que start_year + o último ano no menu dropdown, ou o + número do ano, ou relativo ao ano atual (+/- N) + + + display_days + boolean + Não + true + se mostra os dias ou não + + + display_months + boolean + No + true + whether to display months or not + + + display_years + boolean + Não + true + se mostra os anos ou não + + + month_format + string + Não + %B + qual seria o formato do mês (strftime) + + + day_format + string + Não + %02d + a saída do dia seria em qual formato (sprintf) + + + day_value_format + string + No + %d + o valor do dia seria em qual formato (sprintf) + + + year_as_text + booleano + Não + false + se mostra ou não o ano como texto + + + reverse_years + booleano + Não + false + mostra os anos na ordem reversa + + + field_array + string + Não + null + + se um nome é dado, as caixas de seleção serão exibidos assim que os resultados + forem devolvidos ao PHP + na forma de name[Day], name[Year], name[Month]. + + + + day_size + string + No + null + adiciona o atributo de tamanho para a tag select se for dada + + + month_size + string + Não + null + adiciona o atributo de tamanho para a tag de select se for dada + + + year_size + string + Não + null + adiciona o atributo de tamanho para a tag de select se for dada + + + all_extra + string + No + null + adiciona atributos extras para todas as tags select/input se + forem dadas + + + day_extra + string + Não + null + adiciona atributos + extras para todas as tags select/input se forem dadas + + + month_extra + string + Não + null + adiciona atributos extras + para todas as tags select/input se forem dadas + + + year_extra + string + Não + null + adiciona atributos extras + para todas as tags select/input se forem dadas + + + field_order + string + Não + MDY + a ordem para se mostrar os campos + + + field_separator + string + Não + \n + string exibida entre os diferentes campos + + + month_value_format + string + Não + %m + formato strftime dos valores do mês, o padrão é + %m para número de mês. + + + + + + html_select_date é uma função customizada que cria menus dropdowns + de data para você. Ele pode mostrar algo ou tudo de ano, mês e dia. + + +html_select_date + +{html_select_date} + + +OUTPUT: + +<select name="Date_Month"> +<option value="1">January</option> +<option value="2">February</option> +<option value="3">March</option> +<option value="4">April</option> +<option value="5">May</option> +<option value="6">June</option> +<option value="7">July</option> +<option value="8">August</option> +<option value="9">September</option> +<option value="10">October</option> +<option value="11">November</option> +<option value="12" selected>December</option> +</select> +<select name="Date_Day"> +<option value="1">01</option> +<option value="2">02</option> +<option value="3">03</option> +<option value="4">04</option> +<option value="5">05</option> +<option value="6">06</option> +<option value="7">07</option> +<option value="8">08</option> +<option value="9">09</option> +<option value="10">10</option> +<option value="11">11</option> +<option value="12">12</option> +<option value="13" selected>13</option> +<option value="14">14</option> +<option value="15">15</option> +<option value="16">16</option> +<option value="17">17</option> +<option value="18">18</option> +<option value="19">19</option> +<option value="20">20</option> +<option value="21">21</option> +<option value="22">22</option> +<option value="23">23</option> +<option value="24">24</option> +<option value="25">25</option> +<option value="26">26</option> +<option value="27">27</option> +<option value="28">28</option> +<option value="29">29</option> +<option value="30">30</option> +<option value="31">31</option> +</select> +<select name="Date_Year"> +<option value="2001" selected>2001</option> +</select> + + + + +html_select_date + + +{* ano de começo e fim pode ser relativo ao ano atual *} +{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false} + +OUTPUT: (o ano atual é 2000) + +<select name="StartDateMonth"> +<option value="1">January</option> +<option value="2">February</option> +<option value="3">March</option> +<option value="4">April</option> +<option value="5">May</option> +<option value="6">June</option> +<option value="7">July</option> +<option value="8">August</option> +<option value="9">September</option> +<option value="10">October</option> +<option value="11">November</option> +<option value="12" selected>December</option> +</select> +<select name="StartDateYear"> +<option value="1999">1995</option> +<option value="1999">1996</option> +<option value="1999">1997</option> +<option value="1999">1998</option> +<option value="1999">1999</option> +<option value="2000" selected>2000</option> +<option value="2001">2001</option> +</select> + + + + html_select_time + + + + + + + + + + Nome do Atributo + Tipo + Exigido + Padrão + Descrição + + + + + prefix + string + Não + Time_ + com o que prefixar o nome da variável + + + time + timestamp + Não + tempo atual + qual date/time para usar + + + display_hours + booleano + Não + true + Exibir ou não as horas + + + display_minutes + booleano + Não + true + Exibir ou não os minutos + + + display_seconds + booleano + Não + true + Exibir ou não os segundos + + + display_meridian + booleano + Não + true + Exibir ou não da forma (am/pm) + + + use_24_hours + booleano + Não + true + Usar ou não relógio de 24 horas + + + minute_interval + inteiro + Não + 1 + intervalo dos números dos minutos do menu dropdown + + + second_interval + integer + Não + 1 + intervalo dos números dos segundos do menu dropdown + + + field_array + string + Não + n/a + exibe valores para o array deste nome outputs values to array of this name + + + all_extra + string + Não + null + adiciona atributos + extras para tags select/input se fornecidas + + + hour_extra + string + Não + null + adiciona atributos + extras para tags select/input se fornecidas + + + minute_extra + string + Não + null + adiciona atributos + extras para tags select/input tags se fornecidas + + + second_extra + string + No + null + adiciona atributos + extras para tags select/input se fornecidas + + + meridian_extra + string + Não + null + adiciona atributos + extras para tags select/input se fornecidas + + + + + + html_select_time é uma função cusomizada que cria menus dropdowns de hora para você. Ela pode mostrar + alguns valores, ou tudo de hora, + minuto, segundo e ainda formato am/pm + + +html_select_time + +{html_select_time use_24_hours=true} + + +OUTPUT: + +<select name="Time_Hour"> +<option value="00">00</option> +<option value="01">01</option> +<option value="02">02</option> +<option value="03">03</option> +<option value="04">04</option> +<option value="05">05</option> +<option value="06">06</option> +<option value="07">07</option> +<option value="08">08</option> +<option value="09" selected>09</option> +<option value="10">10</option> +<option value="11">11</option> +<option value="12">12</option> +<option value="13">13</option> +<option value="14">14</option> +<option value="15">15</option> +<option value="16">16</option> +<option value="17">17</option> +<option value="18">18</option> +<option value="19">19</option> +<option value="20">20</option> +<option value="21">21</option> +<option value="22">22</option> +<option value="23">23</option> +</select> +<select name="Time_Minute"> +<option value="00">00</option> +<option value="01">01</option> +<option value="02">02</option> +<option value="03">03</option> +<option value="04">04</option> +<option value="05">05</option> +<option value="06">06</option> +<option value="07">07</option> +<option value="08">08</option> +<option value="09">09</option> +<option value="10">10</option> +<option value="11">11</option> +<option value="12">12</option> +<option value="13">13</option> +<option value="14">14</option> +<option value="15">15</option> +<option value="16">16</option> +<option value="17">17</option> +<option value="18">18</option> +<option value="19">19</option> +<option value="20" selected>20</option> +<option value="21">21</option> +<option value="22">22</option> +<option value="23">23</option> +<option value="24">24</option> +<option value="25">25</option> +<option value="26">26</option> +<option value="27">27</option> +<option value="28">28</option> +<option value="29">29</option> +<option value="30">30</option> +<option value="31">31</option> +<option value="32">32</option> +<option value="33">33</option> +<option value="34">34</option> +<option value="35">35</option> +<option value="36">36</option> +<option value="37">37</option> +<option value="38">38</option> +<option value="39">39</option> +<option value="40">40</option> +<option value="41">41</option> +<option value="42">42</option> +<option value="43">43</option> +<option value="44">44</option> +<option value="45">45</option> +<option value="46">46</option> +<option value="47">47</option> +<option value="48">48</option> +<option value="49">49</option> +<option value="50">50</option> +<option value="51">51</option> +<option value="52">52</option> +<option value="53">53</option> +<option value="54">54</option> +<option value="55">55</option> +<option value="56">56</option> +<option value="57">57</option> +<option value="58">58</option> +<option value="59">59</option> +</select> +<select name="Time_Second"> +<option value="00">00</option> +<option value="01">01</option> +<option value="02">02</option> +<option value="03">03</option> +<option value="04">04</option> +<option value="05">05</option> +<option value="06">06</option> +<option value="07">07</option> +<option value="08">08</option> +<option value="09">09</option> +<option value="10">10</option> +<option value="11">11</option> +<option value="12">12</option> +<option value="13">13</option> +<option value="14">14</option> +<option value="15">15</option> +<option value="16">16</option> +<option value="17">17</option> +<option value="18">18</option> +<option value="19">19</option> +<option value="20">20</option> +<option value="21">21</option> +<option value="22">22</option> +<option value="23" selected>23</option> +<option value="24">24</option> +<option value="25">25</option> +<option value="26">26</option> +<option value="27">27</option> +<option value="28">28</option> +<option value="29">29</option> +<option value="30">30</option> +<option value="31">31</option> +<option value="32">32</option> +<option value="33">33</option> +<option value="34">34</option> +<option value="35">35</option> +<option value="36">36</option> +<option value="37">37</option> +<option value="38">38</option> +<option value="39">39</option> +<option value="40">40</option> +<option value="41">41</option> +<option value="42">42</option> +<option value="43">43</option> +<option value="44">44</option> +<option value="45">45</option> +<option value="46">46</option> +<option value="47">47</option> +<option value="48">48</option> +<option value="49">49</option> +<option value="50">50</option> +<option value="51">51</option> +<option value="52">52</option> +<option value="53">53</option> +<option value="54">54</option> +<option value="55">55</option> +<option value="56">56</option> +<option value="57">57</option> +<option value="58">58</option> +<option value="59">59</option> +</select> +<select name="Time_Meridian"> +<option value="am" selected>AM</option> +<option value="pm">PM</option> +</select> + + + + html_table + + + + + + + + + + Nome do atributo + Tipo + Exigido + Padrão + Descrição + + + + + loop + array + Sim + n/a + array de dados para ser feito o loop + + + cols + inteiro + Não + 3 + número de colunas na tabela + + + table_attr + string + Não + border="1" + atributos para a tag table + + + tr_attr + string + Não + empty + atributos para a tag tr (arrays estão em ciclo) + + + td_attr + string + Não + empty + atributos para a tag (arrays estão em ciclo) + + + trailpad + string + Não + &nbsp; + values to pad the trailing cells on last row with + (se algum) + + + + hdir + string + Não + right + direçao de uma linha para ser representada. Possíveis valores: left/right + + + vdir + string + Não + down + direção das colunas para serem representadas. Possíveis valores: up/down + + + + + + html_table é uma função customizada que transforma um array de dados + em uma tabela HTML. O atributo cols determina com quantas colunas estarão + na tabela. Os valores table_attr, tr_attr e + td_attr determinam os atributos dados para a tabela, tags tr e td. Se tr_attr ou + td_attr são arrays, eles entrarão em ciclo. + trailpad é o + alor colocado dentro do trailing + cells na última linha da tabela + se há alguma presente. + + +html_table + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->assign('data',array(1,2,3,4,5,6,7,8,9)); +$smarty->assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"')); +$smarty->display('index.tpl'); + +index.tpl: + +{html_table loop=$data} +{html_table loop=$data cols=4 table_attr='border="0"'} +{html_table loop=$data cols=4 tr_attr=$tr} + +MOSTRA: + +<table border="1"> +<tr><td>1</td><td>2</td><td>3</td></tr> +<tr><td>4</td><td>5</td><td>6</td></tr> +<tr><td>7</td><td>8</td><td>9</td></tr> +</table> +<table border="0"> +<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr> +<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr> +<tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr> +</table> +<table border="1"> +<tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr> +<tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr> +<tr bgcolor="#eeeeee"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr> +</table> + + + + math + + + + + + + + + + Nome do atributo + Tipo + Exigido + Padrão + Descrição + + + + + equation + string + Sim + n/a + a equação para executar + + + format + string + Não + n/a + o formato do resultado (sprintf) + + + var + numérico + Sim + n/a + valor da variável da equação + + + assign + string + Não + n/a + variável de template cuja saída será atribuida + + + [var ...] + numérica + Sim + n/a + valor da variável da equação + + + + + + math permite o desenhista de template fazer equações matemáticas no template. + Qualquer variável de template numérica pode ser usada nas equações, e o resultado + é exibido no lugar da tag. As variáveis usadas na equação são passadas como parâmetros, + que podem ser variáveis de template + ou valores estáticos. +, -, /, *, abs, ceil, cos, + exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, + srans and tan são todos os operadores válidos. Verifique a documentação do PHP para + mais informações acerca destas funções matemáticas. + + + Se você fornece o atributo especial "assign", a saída da função matemática será + atribuído para esta variável + de template ao invés de ser exibida para o template. + + + Nota Técnica + + math é uma função de performance cara devido ao uso da função do php eval(). + Fazendo a matemática no PHP é muito mais eficiente, então sempre é possível fazer + os cálculos matemáticos no PHP e lançar os resultados para o template. Definitivamente + evite chamadas de funções de + matemáticas repetitivamente, como dentro de loops de section. + + + +math + +{* $height=4, $width=5 *} + +{math equation="x + y" x=$height y=$width} + +OUTPUT: + +9 + + +{* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *} + +{math equation="height * width / division" + height=$row_height + width=$row_width + division=#col_div#} + +OUTPUT: + +100 + + +{* Você pode usar parenteses *} + +{math equation="(( x + y ) / z )" x=2 y=10 z=2} + +OUTPUT: + +6 + + +{* você pode fornecer um parâmetro de formato em sprintf *} + +{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"} + +OUTPUT: + +9.44 + + + + mailto + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + address + string + Sim + n/a + O endereço de email + + + text + string + Não + n/a + O texto para mostrar, o padrão + é o endereço de email + + + encode + string + Não + none + Como codificar o e-mail. + Pode ser none, + hex ou javascript. + + + cc + string + Não + n/a + Endereço de e-mail para mandar uma cópia carbono(cc). + Separe os endereços por vírgula. + + + bcc + string + Não + n/a + Endereço de e-mail para mandar uma cópia carbono cega(bcc). + Separe os endereços por vírgula. + + + subject + string + Não + n/a + Assunto do e-mail. + + + newsgroups + string + Não + n/a + newsgroup para postar. + Separe os endereços por vírgula. + + + followupto + string + Não + n/a + Endereço para acompanhar. + Separe os endereços por vírgula. + + + extra + string + Não + n/a + Qualquer outra informação que você + queira passar para o link, como + classes de planilhas de estilo + + + + + + mailto automatiza o processo de criação de links de e-mail e opcionalmente + codifica eles. Codificar e-mail torna mais difícil para + web spiders pegarem endereços no seu site. + + + Nota Técnica + + javascript é provavelmente o meio de codificação mais + utilizado, entretanto você pode usar codificação hexadecimal também. + + + +mailto + +{mailto address="me@domain.com"} +{mailto address="me@domain.com" text="send me some mail"} +{mailto address="me@domain.com" encode="javascript"} +{mailto address="me@domain.com" encode="hex"} +{mailto address="me@domain.com" subject="Hello to you!"} +{mailto address="me@domain.com" cc="you@domain.com,they@domain.com"} +{mailto address="me@domain.com" extra='class="email"'} + +MOSTRA: + +<a href="mailto:me@domain.com" >me@domain.com</a> +<a href="mailto:me@domain.com" >send me some mail</a> +<SCRIPT language="javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6 +9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d% +61%69%6e%2e%63%6f%6d%22%20%3e%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%3c%2f%61%3e +%27%29%3b'))</SCRIPT> +<a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" >&#x6d;&#x65;&#x40;&#x64;& +#x6f;&#x6d;&#x61;&#x69;&#x6e;&#x2e;&#x63;&#x6f;&#x6d;</a> +<a href="mailto:me@domain.com?subject=Hello%20to%20you%21" >me@domain.com</a> +<a href="mailto:me@domain.com?cc=you@domain.com%2Cthey@domain.com" >me@domain.com</a> +<a href="mailto:me@domain.com" class="email">me@domain.com</a> + + + + popup_init + + popup é uma integração com overLib, uma biblioteca usada para janelas + popup. Esta é usada para informações sensíveis ao contexto, como + janelas de ajuda ou dicas. popup_init deve ser usada uma vez ao + topo de cada página que você planeje usar a função popup. overLib + foi escrita por Erik Bosrup, e a página esta localizada em + http://www.bosrup.com/web/overlib/. + + + A partir da versão 2.1.2 do Smarty, overLib NÃO vem com a distribuição. + Baixe o overLib, coloque o arquivo overlib.js dentro da sua arvore de + documentos e indique o caminho relativo para o parâmetro "src" + de popup_init. + + +popup_init + +{* popup_init deve ser utilizada uma vez no topo da página *} +{popup_init src="/javascripts/overlib.js"} + + + + popup + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + text + string + Sim + n/a + O text/html para mostrar na janela popup + + + trigger + string + Não + onMouseOver + O que é usado para fazer a janela aparecer. Pode ser + onMouseOver ou onClick + + + sticky + boolean + Não + false + Faz a janela colar até que seja fechada + + + caption + string + Não + n/a + Define o texto para o título + + + fgcolor + string + Não + n/a + A cor usada dentro da caixa popup + + + bgcolor + string + Não + n/a + A cor da borda da caixa popup + + + textcolor + string + Não + n/a + Define a cor do texto dentro da caixa popup + + + capcolor + string + Não + n/a + Define a cor do título da caixa + + + closecolor + string + Não + n/a + Define a cor do texto para fechar + + + textfont + string + Não + n/a + Define a cor do texto para ser usado no texto principal + + + captionfont + string + Não + n/a + Define a fonte para ser usada no Título + + + closefont + string + Não + n/a + Define a fonte para o texto "Close" + + + textsize + string + Não + n/a + Define a fonte do texto principa + + + captionsize + string + Não + n/a + Define o tamanho da fonte do título + + + closesize + string + Não + n/a + Define o tamanho da fonte do texto "Close" + + + width + integer + Não + n/a + Define a largura da caixa + + + height + integer + Não + n/a + Define a altura da caixa + + + left + boolean + Não + false + Faz os popups irem para a esquerda do mouse + + + right + boolean + Não + false + Faz os popups ir para a diresita do mouse + + + center + boolean + Não + false + Faz os popups ir para o centro do mouse + + + above + boolean + Não + false + Faz os popups irem para acima do mouse. NOTA: somente + possível se height foi definido + + + below + boolean + Não + false + Faz os popups irem abaixo do mouse + + + border + integer + Não + n/a + Torna as bordas dos popups grossas ou finas + + + offsetx + integer + Não + n/a + A que distancia do mouse o popup irá + aparecer, horizontalmente + + + offsety + integer + Não + n/a + A que distancia do mouse o popup irá + aparecer, verticalmente + + + fgbackground + url para imagem + Não + n/a + Define uma imagem para usar ao invés de uma + cor dentro do popup. + + + bgbackground + url to image + Não + n/a + define uma imagem para ser usada como borda + ao invés de uma cor para o popup. Nota: você deve definir bgcolor + como "" ou a cor irá aparecer também. NOTA: quando tiver um + link "Close", o Netscape irá redesenhar as células da tabela, + fazendo as coisas aparecerem incorretamente + + + closetext + string + Não + n/a + Define o texto "Close" para qualquer outra coisa + + + noclose + boolean + Não + n/a + Não mostra o texto "Close" em coladas + com um título + + + status + string + Não + n/a + Define o texto na barra de status do browser + + + autostatus + boolean + Não + n/a + Define o texto da barra de status para o texto do popup. + NOTA: sobrescreve a definição de status + + + autostatuscap + string + Não + n/a + define o texto da barra de status como o texto do título + NOTA: sobrescreve o status e autostatus + + + inarray + integer + Não + n/a + Indica ao overLib para ler o texto deste índice + na matriz ol_text array, localizada em overlib.js. Este + parâmetro pode ser usado ao invés do texto + + + caparray + integer + Não + n/a + diz para overLib ler o título a partir deste índice + na matriz ol_caps + + + capicon + url + Não + n/a + Mostra a imagem antes do título + + + snapx + integer + Não + n/a + snaps the popup to an even position in a + horizontal grid + + + snapy + integer + Não + n/a + snaps the popup to an even position in a + vertical grid + + + fixx + integer + No + n/a + locks the popups horizontal position Note: + overrides all other horizontal placement + + + fixy + integer + No + n/a + locks the popups vertical position Note: + overrides all other vertical placement + + + background + url + Não + n/a + Define uma imagem para ser usada como + fundo ao invés da tabela + + + padx + integer,integer + Não + n/a + Prenche a imagem de fundo com espaços em branco horizontal + para colocação do texto. Nota: este é um comando + de dois parâmetros + + + pady + integer,integer + Não + n/a + Prenche a imagem de fundo com espaços em branco vertical + para colocação do texto. Nota: este é um comando + de dois parâmetros + + + fullhtml + boolean + Não + n/a + Permite a você controlar o html sobre a figura + de fundo completamente. O código HTML é esperado + no atributo "text" + + + frame + string + Não + n/a + Controla popups em frames diferentes. Veja a página da + overlib para maiores informações sobre esta função + + + timeout + string + Não + n/a + Utiliza uma função e pega o valor de retorno + como texto que deva ser mostrado + na janela popup + + + delay + integer + Não + n/a + Faz com que o popup funcione como um tooltip. Irá + aparecer apenas após um certo atraso em milésimos de segundo + + + hauto + boolean + Não + n/a + Determina automaticamente se o popup deve aparecer + a esquerda ou direita do mouse. + + + vauto + boolean + Não + n/a + Determina automaticamente se o popup deve aparecer + abaixo ou acima do mouse. + + + + + + popup é usado para criar janelas popup com javascript. + + +popup + +{* popup_init deve ser utilizada uma vez no topo da página *} +{popup_init src="/javascripts/overlib.js"} + +{* cria um link com uma janela popup que aparece quando se passa o mouse sobre ele *} +<A href="mypage.html" {popup text="This link takes you to my page!"}>mypage</A> + +{* você pode usar html, links, etc no texto do popup *} +<A href="mypage.html" {popup sticky=true caption="mypage contents" +text="<UL><LI>links<LI>pages<LI>images</UL>" snapx=10 snapy=10}>mypage</A> + + + + textformat + + + + + + + + + + Nome do Atributo + Tipo + Requerido + Padrão + Descrição + + + + + style + string + Não + n/a + estilo pré-definido + + + indent + number + Não + 0 + O número de caracteres para endentar cada linha. + + + indent_first + number + Não + 0 + O número de caracteres para endentar a primeira linha + + + indent_char + string + Não + (single space) + O caractere (ou string de caracteres) para indenta + + + wrap + number + Não + 80 + Em quantos caracteres quebrar cada linha + + + wrap_char + string + Não + \n + O caractere (ou string de caracteres) para usar + para quebrar cada linha + + + wrap_cut + boolean + Não + false + Se true, wrap irá quebrar a linha no caractere + exato em vez de quebrar ao final da palavra + + + assign + string + No + n/a + A variável de template que irá + receber a saída + + + + + + textformat é uma função de bloco usada para formatar texto. Basicamente + limpa espaços e caracteres especiais, e formata os paragrafos + quebrando o texto ao final de palavras e identando linhas. + + + Você pode definir os parâmetros explicitamente, ou usar um estilo pré-definido. + Atualmente o único estilo disponível é "email". + + +textformat + +{textformat wrap=40} + +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. + +This is bar. + +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. + +{/textformat} + +MOSTRA: + +This is foo. This is foo. This is foo. +This is foo. This is foo. This is foo. + +This is bar. + +bar foo bar foo foo. bar foo bar foo +foo. bar foo bar foo foo. bar foo bar +foo foo. bar foo bar foo foo. bar foo +bar foo foo. bar foo bar foo foo. + + +{textformat wrap=40 indent=4} + +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. + +This is bar. + +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. + +{/textformat} + +MOSTRA: + + This is foo. This is foo. This is + foo. This is foo. This is foo. This + is foo. + + This is bar. + + bar foo bar foo foo. bar foo bar foo + foo. bar foo bar foo foo. bar foo + bar foo foo. bar foo bar foo foo. + bar foo bar foo foo. bar foo bar + foo foo. + +{textformat wrap=40 indent=4 indent_first=4} + +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. + +This is bar. + +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. + +{/textformat} + +MOSTRA: + + This is foo. This is foo. This + is foo. This is foo. This is foo. + This is foo. + + This is bar. + + bar foo bar foo foo. bar foo bar + foo foo. bar foo bar foo foo. bar + foo bar foo foo. bar foo bar foo + foo. bar foo bar foo foo. bar foo + bar foo foo. + +{textformat style="email"} + +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. +This is foo. + +This is bar. + +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. +bar foo bar foo foo. + +{/textformat} + +MOSTRA: + +This is foo. This is foo. This is foo. This is foo. This is foo. This is +foo. + +This is bar. + +bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo +bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo +foo. + + + + + + + + Arquivos de Configuração + + Arquivos de configuração são úteis para designers gerenciarem váriaveis + globais para os templates a partir de um arquivo. Um exemplo são as cores do template. Normalmente se + se você quer mudar o tema de cores para uma aplicação, você deve ir + em cada um dos arquivos de template e mudar as cores. Com + um arquivo de configuração, as cores podem ser mantidas em um lugar, e apenas + um arquivo precisa ser atualizado. + + + Examplo de sintaxe de um arquivo de configuração + +# global variables +pageTitle = "Main Menu" +bodyBgColor = #000000 +tableBgColor = #000000 +rowBgColor = #00ff00 + +[Customer] +pageTitle = "Customer Info" + +[Login] +pageTitle = "Login" +focus = "username" +Intro = """este é um valor + que se divide m mais de uma linha. deve + estar dentro de três aspas.""" + +# hidden section +[.Database] +host=my.domain.com +db=ADDRESSBOOK +user=php-user +pass=foobar + + + Valores de variáveis podem estar entre aspas, mas não é necessário. + Você pode usar aspas simples ou duplas. Se você tiver um valor que + ocupe mais de uma linha, coloque todo o valor entre três aspas + ("""). Você pode colocar comentários em um arquivo de configuração com qualquer sintaxe + que não seja válida em um arquivo de configuração. Nós recomendamos usar um # + (cancela) no ínicio de cada linha. + + + Este arquivo de onfiguração tem duas seções. Nomes de seções devem estar entre conchetes + []. Nomes de seção podem ser string arbritraria que não contenham os símbolos + [ ou ]. As quatro variáveis no top são + variáveis globais, ou variáveis sem seção. + Estas variáveis são sempre carregadas do arquivo de configuração. Se uma seção em + particular for carregada, então as variáveis globais e as variáveis desta seção são carregadas. + Se uma variável existir como global e dentro de uma seção, + a variável da seção será utilizada. Se você tiver duas variáveis na mesma seção com o mesmo nome, + a última será utilizada. + + + Arquivos de configuração são carregados no template com a função embutida + config_load. + + + Você pode esconder variáveis ou seções inteiras colocando um ponto + antes do nome da variável. Isto é útil se a sua aplicação + se arquivos de configuração e lê dados sensíveis a partir deles + que a ferramenta de template não precisa. Se você tem terceiros fazendo a edição de templates, + você terá certesa que eles não leiam dados sensíveis + do arquivo de configuração carregando ele no template. + + + + + Debugging Console + + Há um console para debug incluso no Smarty. O console informa a você de + todos os templates incluídos, variáveis definidas e variáveis de arquivos de configuração + da chamada atual do template. Um template chamado "debug.tpl" + é incluso com a distribuição do Smarty o qual controla a formatação + do console. Defina $debugging para true no Smarty, e se necessário defina $debug_tpl + para o caminho de recurso de debug.tpl (isto é SMARTY_DIR por + padrão.) Quando você carrega uma página, um console em javascript irá abrir uma + janela popup e dar a você o nome de todos os templates incluídos e as variáveis definidas + para a página atual. Para ver as variáveis disponíveis para um template + em particular, veja a função {debug}. + Para desabilitar o console de debug, defina $debugging para + false. Você pode ativar temporariamente o console de debug colocando + SMARTY_DEBUG na URL se você ativou esta opção com $debugging_ctrl. + + + Nota Técnica + + O console de debug não funciona quando você usa a API fetch(), + apenas quando estiver usando display(). É um conjunto de comandos javascript + adicionados ao final do template gerado. Se você não gosta de javascript, + você pode editar o template debug.tpl para formatar a saída como você quiser. + Dados de debug não são guardados em cache e os dados de debug.tpl + não são incluídos no console de debug. + + + + + Os tempos de carregamento de cada template e arquivo de cofiguração são em segundos, + ou então frações. + + + + diff --git a/docs/pt_BR/getting-started.sgml b/docs/pt_BR/getting-started.sgml new file mode 100644 index 00000000..fbbb0fc4 --- /dev/null +++ b/docs/pt_BR/getting-started.sgml @@ -0,0 +1,398 @@ + + Iniciando + + + O que é o Smarty? + + Smarty uma ferramenta de template para PHP. Mais especificamente, ela facilita + uma forma controlável de separar a aplicação lógica e o conteúdo de sua apresentação. + Isto é melhor descrito em uma situação onde o programador da aplicação e o designer + do template executam diferentes funções, ou na maioria dos casos não são a mesma pessoa. + Por exemplo, digamos que você está criando uma página que está mostrando um artigo de + jornal. O autor, a manchete, a conclusão e o corpo do artigo são elementos de conteúdo, eles + não contém informação sobre como eles serão apresentados. Eles são passados para o Smarty + pela aplicação, então o designer de template edita o template e usa uma combinação de tags + HTML e tags de template para formatar a apresentação destes elementos (tabelas HTML, cores + de planos de fundo, tamanhos da fonte, folhas de estilos, etc.). + Quando o programador necessita + mudar a forma em que o conteúdo do artigo é + devolvido (uma mudança da lógica da aplicação.) Esta + mudança não afeta o designer do template, o conteúdo ainda chegará no template exatamente da + mesma forma. De modo semelhante, se o designer de template quer redesenhar completamente + o template, isto não requer mudanças na lógica da aplicação. Então o programador pode fazer + mudanças na lógica da aplicação sem precisar reestruturar os templates, + e o designer de template + pode fazer mudanças no template sem quebrar a lógica da aplicação. + + + Agora um resumo sobre o que o Smarty faz e NÃO faz. O Smarty não tenta separar completamente + a lógica dos templates. Não há problema com a lógica em seus templates sob a condição de que + esta lógica seja estritamente para apresentação. Uma palavra de aviso: mantenha a lógica + fora dos templates, e a lógica da apresentação fora da aplicação. Isto definitivamente + manterá as coisas mais manipuláveis + e escaláveis para o futuro próximo. + + + Um dos aspectos únicos sobre o Smarty é a compilação do template. Isto significa que o + Smarty lê os arquivos de template e cria scripts PHP a partir deles. Uma vez criados, eles + são executados. Então não há interpretação de arquivo de + template custosa para cada pedido, e + cada template pode levar total vantagem de soluções de cache de compiladores PHP tais como + Zend Accelerator (http://www.zend.com) ou PHP Accelerator + (http://www.php-accelerator.co.uk). + + + Algumas das características do Smarty: + + + Ele é extremamente rápido. + Ele é eficiente visto que + o interpretador de PHP faz o trabalho mais chato. + Sem elevadas interpretações de template, apenas compila uma vez. + Ele está atento para só recompilar os arquivos de template que + foram mudados. + Você pode criar funções customizadas + e modificadores de variáveis + customizados, de modo que a linguagem de template é extremamente extensível. + Sintaxe de tag delimitadora de template configurável, assim você pode usar + {}, {{}}, <!--{}-->, etc. + Os construtoress if/elseif/else/endif são passados para o interpretador de PHP, + assim a sintaxe de expressão {if ...} pode ser tanto simples quanto complexa da forma que você + queira. + Aninhamento ilimitado de sections, ifs, etc. permitidos. + É possível embutir o código PHP diretamente em seus arquivos de template, + apesar de que isto pode não ser necessário (não recomendado) + visto que a ferramenta é tão customizável. + Suporte de caching embutido + Fontes de template arbitrárias + Funções de manipulação de cache customizadas + Arquitetura de Plugin + + + + Instalação + + + Requerimentos + + Smarty requer um servidor web rodando o PHP 4.0.6 superior. + + + + + Instalação Básica + + Instale os arquivos da biblioteca do Smarty que estão no diretório /libs/ da + distribuição. Estes são os arquivos PHP que você NÃO EDITARIA. Eles são comuns + a todas as aplicações e eles só são atualizados quando você atualiza para uma nova + versão do Smarty. + + + Arquivos da biblioteca do Smarty + +Smarty.class.php +Smarty_Compiler.class.php +Config_File.class.php +debug.tpl +/core/*.php (todos eles) +/plugins/*.php (todos eles) + + + + O Smarty utiliza uma constante do PHP chamada SMARTY_DIR que é o caminho para diretório da + biblioteca do Smarty. Basicamente, se sua aplicação pode encontrar o arquivo + Smarty.class.php, você não precisa definir o + SMARTY_DIR, Smarty encontrará-lo. Então, se Smarty.class.php não está + em seu include_path, ou você não fornece um caminho absoluto para ele em sua aplicação, então + você deve definir o SMARTY_DIR manualmente. + SMARTY_DIR deve incluir uma + barra de seguimento. + + + Aqui está um exemplo de como você cria uma instância do Smarty em seus scripts PHP: + + + + Cria uma instância Smarty do Smarty + +require('Smarty.class.php'); +$smarty = new Smarty; + + + + Tente rodar o script acima. Se você obtiver um erro dizendo que o arquivo + Smarty.class.php file could not be found, você tem que fazer uma + das coisas a seguir: + + + + Fornecer um caminho absoluto para o arquivo da biblioteca + +require('/usr/local/lib/php/Smarty/Smarty.class.php'); +$smarty = new Smarty; + + + + Adicionar o diretório da biblioteca para o include_path do PHP + +// Edite o seu arquivo php.ini, adicione o diretório da biblioteca do Smarty +// para o include_path e reinicie o servidor web. +// Então o código a seguir funcionaria: +require('Smarty.class.php'); +$smarty = new Smarty; + + + + Defina a constante SMARTY_DIR manualmente + +define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); +require(SMARTY_DIR.'Smarty.class.php'); +$smarty = new Smarty; + + + + Agora que os arquivos da biblioteca estão no lugar, chegou a hora de configurar os + diretórios do Smarty para a sua aplicação. O Smarty requer quatro diretórios que são + (por definição) chamados de templates, + templates_c, configs e + cache. Cada um destes são definíveis pelas propriedades da classe do Smarty + $template_dir, + $compile_dir, $config_dir, e + $cache_dir respectivamente. É altamente recomendado que você configure + um grupo separado destes diretórios + para cada aplicação que utilizará o Smarty. + + + Certifique-se que você sabe a localização do document root do seu servidor web. Em nosso exemplo, + o document root é "/web/www.mydomain.com/docs/". Os diretórios do Smarty + só são acessados pela biblioteca do Smarty e nunca acessados diretamente pelo navegador. Então para + evitar qualquer preocupação com segurança, + é recomendado colocar estes diretórios + fora do document root. + + + Para o nosso exemplo de instalação, nós estaremos configurando o ambiente do Smarty + para uma aplicação de livro de visitas. Nós escolhemos uma aplicação só para o propósito + de uma convenção de nomeação de diretório. Você pode usar o mesmo ambiente para qualquer + aplicação, apenas substitua "guestbook" com o nome de sua aplicação. Nós colocaremos nossos + diretórios do Smarty dentro de + "/web/www.mydomain.com/smarty/guestbook/". + + + Você precisará pelo menos de um arquivo dentro de seu document root, e que seja acessado pelo + navegador. Nós chamamos nosso + script de "index.php", e o colocamos em um subdiretório dentro + do document root chamado "/guestbook/". + + + + Nota Técnica + + É conveniente configurar o servidor de forma que "index.php" possa ser identificado + como o índice de diretório padrão, desta forma se você acessa + "http://www.mydomain.com/guestbook/", o script index.php será executado + sem "index.php" na URL. No Apache você pode definir isto adicionando + "index.php" no final de sua configuração + DirectoryIndex (separe cada entrada com um espaço.) + + + + + Vamos dar uma olhada na estrutura de arquivos até agora: + + + + Exemple de estrutura de arquivo + +/usr/local/lib/php/Smarty/Smarty.class.php +/usr/local/lib/php/Smarty/Smarty_Compiler.class.php +/usr/local/lib/php/Smarty/Config_File.class.php +/usr/local/lib/php/Smarty/debug.tpl +/usr/local/lib/php/Smarty/core/*.php +/usr/local/lib/php/Smarty/plugins/*.php + +/web/www.mydomain.com/smarty/guestbook/templates/ +/web/www.mydomain.com/smarty/guestbook/templates_c/ +/web/www.mydomain.com/smarty/guestbook/configs/ +/web/www.mydomain.com/smarty/guestbook/cache/ + +/web/www.mydomain.com/docs/guestbook/index.php + + + + O Smarty precisará escrever para o $compile_dir e + $cache_dir, então garanta que o usuário do servidor web possa + escrever neles. Este é geralmente o usuário "nobody" e o grupo "nobody" (ninguém). Para + SO com X usuários, o usuário padrão é "www" e o grupo "www". Se você está usando Apache, você + pode olhar em seu arquivo httpd.conf (normalmente em "/usr/local/apache/conf/") para ver + qual o usuário e grupo estão sendo usados. + + + + Configurando permissões de arquivos + + +chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/ +chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/ + +chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/ +chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/ + + + + Nota Técnica + + chmod 770 será a segurança correta suficientemente restrita, só permite ao usuário "nobody" e + o grupo "nobody" acesso de leitura/escrita aos diretórios. Se você gostaria de abrir o acesso de leitura + para qualquer um (na maioria das vezes para sua própria conveniência de querer ver estes + arquivos), você pode usar o 775 ao invés do 770. + + + + + Nós precisamos criar o arquivoindex.tpl que o Smarty vai ler. Ele estará localizado em seu + $template_dir. + + + + Editando /web/www.mydomain.com/smarty/guestbook/templates/index.tpl + + +{* Smarty *} + +Olá, {$nome}! + + + + + Nota Técnica + + {* Smarty *} é um comentário de template. Ele não é exigido, mas é uma prática boa + iniciar todos os seus arquivos de template com este com este comentário. Isto faz com + que o arquivo seja reconhecido sem levar em consideração a sua extensão. Por exemplo, + editores de texto poderiam reconhecer + o arquivo e habilitar iluminação de sintaxe especial. + + + + + Agora vamos editar index.php. Nós criaremos uma instância do Smarty, daremos valor às variáveis + de template e mostraremos o arquivo index.tpl. Em nosso ambiente de exemplo, + "/usr/local/lib/php/Smarty" é o nosso include_path. Certifique-se de ter feito o mesmo, ou use + caminhos absolutos. + + + + Editando /web/www.mydomain.com/docs/guestbook/index.php + +// ler a biblioteca do Smarty +require('Smarty.class.php'); + +$smarty = new Smarty; + +$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/'; +$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/'; +$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/'; +$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/'; + +$smarty->assign('nome','Taniel'); + +$smarty->display('index.tpl'); + + + + Nota Técnica + + Em nosso exemplo, nós estamos configurando caminhos absolutos para todos os diretórios + do Smarty. Se '/web/www.mydomain.com/smarty/guestbook/' está dentro de seu include_path + do PHP, então estas configurações não são necessárias. Entretanto, isto é mais eficiente + e (a experiência mostra) tem menos tendência a erros em relação à definição de caminhos + absolutos. Isto garante que o + Smarty está pegando arquivos do diretório que você deseja. + + + + + Agora lê o arquivo index.php de seu navegador. + Você veria "Olá, Taniel!" + + + Você completou a configuração básica para o Smarty! + + + + Expandindo a configuração + + + Esta é uma continuação da instalação básica, + por favor leia ela primeiro! + + + Uma forma um pouco mais flexível de configurar o Smarty é expandir a classe e inicializar seu ambiente de + Smarty. Então, ao invés de configurar caminhos de diretórios repetidamente, preencher as mesmas variáveis, + etc., nós podemos fazer isso para facilitar. Vamos criar um novo diretório "/php/includes/guestbook/" e criar um + novo arquivo chamado "setup.php". Em nosso ambiente de exemplo, "/php/includes" está em nosso + include_path. Certifique-se de que você + também definiu isto, ou use caminhos de arquivos absolutos. + + + + Editando /php/includes/guestbook/setup.php + + +// lê a biblioteca do Smarty +require('Smarty.class.php'); + +// O arquivo setup.php é uma boa forma para ler +// arquivos de bibliotecas da aplicação exigida, e você pode fazer +// isso corretamente aqui. Um exemplo: +// require('guestbook/guestbook.lib.php'); + +class Smarty_GuestBook extends Smarty { + + function Smarty_GuestBook() { + + // Construtor da Classe. Estes automaticamente são definidos a cada nova instância. + + $this->Smarty(); + + $this->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/'; + $this->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/'; + $this->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/'; + $this->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/'; + + $this->caching = true; + $this->assign('app_name','Guest Book'); + } + +} + + + + Agora vamos alterar o arquivo index.php para usar o setup.php: + + + + Editando /web/www.mydomain.com/docs/guestbook/index.php + + +require('guestbook/setup.php'); + +$smarty = new Smarty_GuestBook; + +$smarty->assign('nome','Taniel'); + +$smarty->display('index.tpl'); + + + + Agora você ver que é completamente simples criar uma instância do Smarty, apenas use + Smarty_GuestBook que automaticamente inicializa tudo para a nossa aplicação. + + + + + + diff --git a/docs/pt_BR/html-common.dsl b/docs/pt_BR/html-common.dsl new file mode 100644 index 00000000..7fd772c5 --- /dev/null +++ b/docs/pt_BR/html-common.dsl @@ -0,0 +1,382 @@ +;; -*- Scheme -*- +;; +;; $Id$ +;; + +;; Returns the depth of the auto-generated TOC (table of contents) that +;; should be made at the nd-level +(define (toc-depth nd) + (if (string=? (gi nd) (normalize "book")) + 3 ; the depth of the top-level TOC + 1 ; the depth of all other TOCs + )) + + + + + + +(element (funcdef function) + ($bold-seq$ + (make sequence + (process-children) + ) + ) + ) + + +(define (is-true-optional nl) + (and (equal? (gi (parent nl)) (normalize "parameter")) + (equal? 0 (string-length (strip (data (preced nl))))) + (equal? 0 (string-length (strip (data (follow nl))))) + ) + ) + + +(define (has-true-optional nl) + (is-true-optional + (node-list-first-element + (select-elements + (descendants nl) + (normalize "optional")) + ) + ) + ) + + +(define (count-true-optionals nl) + (let loop + ((result 0) + (nl (select-elements (descendants nl) (normalize "optional"))) + ) + (if(node-list-empty? nl) + result + (if(is-true-optional(node-list-first nl)) + (loop (+ result 1) (node-list-rest nl)) + (loop result (node-list-rest nl)) + ) + ) + ) + ) + + +;; there are two different kinds of optionals +;; optional parameters and optional parameter parts +;; an optional parameter is identified by an optional tag +;; with a parameter tag as its parent +;; and only whitespace between them +(element optional + ;;check for true optional parameter + (if (is-true-optional (current-node)) + ;; yes - handle '[...]' in paramdef + (process-children-trim) + ;; no - do '[...]' output + (make sequence + (literal %arg-choice-opt-open-str%) + (process-children-trim) + (literal %arg-choice-opt-close-str%) + ) + ) + ) + +;; now this is going to be tricky +(element paramdef + (make sequence + ;; special treatment for first parameter in funcsynopsis + (if (equal? (child-number (current-node)) 1) + ;; is first ? + (make sequence + ;; start parameter list + (literal "(") + ;; is optional ? + ( if (has-true-optional (current-node)) + (literal %arg-choice-opt-open-str%) + (empty-sosofo) + ) + ) + ;; not first + (empty-sosofo) + ) + + ;; + (process-children-trim) + + ;; special treatment for last parameter + (if (equal? (gi (ifollow (current-node))) (normalize "paramdef")) + ;; more parameters will follow + (make sequence + ;; next is optional ? + ( if (has-true-optional (ifollow (current-node))) + ;; optional + (make sequence + (literal " ") + (literal %arg-choice-opt-open-str%) + ) + ;; not optional + (empty-sosofo) + ) + (literal ", " ) + ) + ;; last parameter + (make sequence + (literal + (let loop ((result "")(count (count-true-optionals (parent (current-node))))) + (if (<= count 0) + result + (loop (string-append result %arg-choice-opt-close-str%)(- count 1)) + ) + ) + ) + ( literal ")" ) + ) + ) + ) + ) + + +(element function + (let* ((function-name (data (current-node))) + (linkend + (string-append + "function." + (string-replace + (string-replace function-name "_" "-") + "::" "."))) + (target (element-with-id linkend)) + (parent-gi (gi (parent)))) + (cond + ;; function names should be plain in FUNCDEF + ((equal? parent-gi "funcdef") + (process-children)) + + ;; if a valid ID for the target function is not found, or if the + ;; FUNCTION tag is within the definition of the same function, + ;; make it bold, add (), but don't make a link + ((or (node-list-empty? target) + (equal? (case-fold-down + (data (node-list-first + (select-elements + (node-list-first + (children + (select-elements + (children + (ancestor-member (parent) (list "refentry"))) + "refnamediv"))) + "refname")))) + function-name)) + ($bold-seq$ + (make sequence + (process-children) + (literal "()")))) + + ;; else make a link to the function and add () + (else + (make element gi: "A" + attributes: (list + (list "HREF" (href-to target))) + ($bold-seq$ + (make sequence + (process-children) + (literal + ) + (literal "()")))))))) + +(element command + (let* ((command-name (data (current-node))) + (linkend + (string-append + "language.function." + (string-replace + (string-replace command-name "_" ".") + "::" "."))) + (target (element-with-id linkend)) + (parent-gi (gi (parent)))) + (cond + ;; function names should be plain in FUNCDEF + ((equal? parent-gi "funcdef") + (process-children)) + + ;; if a valid ID for the target function is not found, or if the + ;; FUNCTION tag is within the definition of the same function, + ;; make it bold, add (), but don't make a link + ((or (node-list-empty? target) + (equal? (case-fold-down + (data (node-list-first + (select-elements + (node-list-first + (children + (select-elements + (children + (ancestor-member (parent) (list "refentry"))) + "refnamediv"))) + "refname")))) + command-name)) + ($bold-seq$ + (make sequence + (literal "{") + (process-children) + (literal "}")))) + + ;; else make a link to the function and add () + (else + (make element gi: "A" + attributes: (list + (list "HREF" (href-to target))) + ($bold-seq$ + (make sequence + (literal "{") + (process-children) + (literal "}")))))))) + +(element classname + (let* ((class-name (data (current-node))) + (linkend + (string-append + "class." + (string-replace + (case-fold-down class-name) "_" "-"))) + (target (element-with-id linkend)) + (parent-gi (gi (parent)))) + (cond + ;; function names should be plain in SYNOPSIS + ((equal? parent-gi "synopsis") + (process-children)) + + ;; if a valid ID for the target class is not found, or if the + ;; CLASSNAME tag is within the definition of the same class, + ;; make it bold, but don't make a link + ((or (node-list-empty? target) + (equal? (case-fold-down + (data (node-list-first + (select-elements + (node-list-first + (children + (select-elements + (children + (ancestor-member (parent) (list "refentry"))) + "refnamediv"))) + "refname")))) + class-name)) + ($bold-seq$ + (process-children))) + + ;; else make a link to the function and add () + (else + (make element gi: "A" + attributes: (list + (list "HREF" (href-to target))) + ($bold-seq$ + (process-children))))))) + + +(element constant + (let* ((constant-name (data (current-node))) + (linkend + (string-append "constant." + (case-fold-down + (string-replace constant-name "_" "-")))) + (target (element-with-id linkend)) + (parent-gi (gi (parent)))) + (cond +; ;; constant names should be plain in FUNCDEF +; ((equal? parent-gi "funcdef") +; (process-children)) + + ;; if a valid ID for the target constant is not found, or if the + ;; CONSTANT tag is within the definition of the same constant, + ;; make it bold, add (), but don't make a link + ((or (node-list-empty? target) + (equal? (case-fold-down + (data (node-list-first + (select-elements + (node-list-first + (children + (select-elements + (children + (ancestor-member (parent) (list "refentry"))) + "refnamediv"))) + "refname")))) + constant-name)) + ($bold-mono-seq$ + (process-children))) + + ;; else make a link to the function and add () + (else + (make element gi: "A" + attributes: (list + (list "HREF" (href-to target))) + ($bold-mono-seq$ + (process-children))))))) + + +(element example + (make sequence + (make element gi: "TABLE" + attributes: (list + (list "WIDTH" "100%") + (list "BORDER" "0") + (list "CELLPADDING" "0") + (list "CELLSPACING" "0") + (list "CLASS" "EXAMPLE")) + (make element gi: "TR" + (make element gi: "TD" + ($formal-object$)))))) + + +(element (paramdef parameter) + (make sequence + font-posture: 'italic + (process-children-trim) + ) + ) + +(mode book-titlepage-recto-mode + (element authorgroup + (process-children)) + + (element author + (let ((author-name (author-string)) + (author-affil (select-elements (children (current-node)) + (normalize "affiliation")))) + (make sequence + (make element gi: "DIV" + attributes: (list (list "CLASS" (gi))) + (literal author-name)) + (process-node-list author-affil)))) + ) + +(define (chunk-element-list) + (list (normalize "preface") + (normalize "chapter") + (normalize "appendix") + (normalize "article") + (normalize "glossary") + (normalize "bibliography") + (normalize "index") + (normalize "colophon") + (normalize "setindex") + (normalize "reference") + (normalize "refentry") + (normalize "part") + (normalize "sect1") + (normalize "sect2") + (normalize "section") + (normalize "book") ;; just in case nothing else matches... + (normalize "set") ;; sets are definitely chunks... + )) + +(define ($section-body$) + (make element gi: "DIV" + attributes: (list (list "CLASS" (gi))) + ($section-separator$) + ($section-title$) + + (if (or (not (node-list-empty? (select-elements (children (current-node)) + (normalize "sect2")))) + (not (node-list-empty? (select-elements (children (current-node)) + (normalize "sect3"))))) + (build-toc (current-node) 1) + (empty-sosofo)) + + (process-children))) + diff --git a/docs/pt_BR/html.dsl b/docs/pt_BR/html.dsl new file mode 100644 index 00000000..7f059479 --- /dev/null +++ b/docs/pt_BR/html.dsl @@ -0,0 +1,21 @@ + + + +]> + + + + + +(define %html-ext% ".html") + +&html-common.dsl; +&common.dsl; + + + + + + + diff --git a/docs/pt_BR/manual.sgml b/docs/pt_BR/manual.sgml new file mode 100644 index 00000000..753ba938 --- /dev/null +++ b/docs/pt_BR/manual.sgml @@ -0,0 +1,45 @@ + + + + + +]> + + + + Smarty - a ferramenta para compilar templates para PHP + + + MonteOhrt <monte@ispi.net> + + + AndreiZmievski <andrei@php.net> + + + + + FernandoCorrea da Conceição <fernandoc@php.net> + + + MarceloPerreira Fonseca da Silva <marcelo@php.net> + + + TanielFranklin <taniel@ig.com.br> + + Versão 2.0 + + 2001 + 2002 + 2003 + ispi of Lincoln, Inc. + + + + &preface; + &getting.started; + &smarty.for.designers; + &smarty.for.programmers; + &appendixes; + + diff --git a/docs/pt_BR/php.dsl b/docs/pt_BR/php.dsl new file mode 100644 index 00000000..d02c4f2e --- /dev/null +++ b/docs/pt_BR/php.dsl @@ -0,0 +1,21 @@ + + + +]> + + + + + +(define %html-ext% ".php") + +&html-common.dsl; +&common.dsl; + + + + + + + diff --git a/docs/pt_BR/preface.sgml b/docs/pt_BR/preface.sgml new file mode 100644 index 00000000..12bb7f44 --- /dev/null +++ b/docs/pt_BR/preface.sgml @@ -0,0 +1,69 @@ + + Prefácio + + Esta é uma das dúvidas mais frenquentes na "mailing list" do PHP: + Como eu posso fazer PHP scripts independentes do layout ? Enquanto + PHP está contado como "HTML linguagem de blocos dinâmicos", após estar + escrevendo alguns projetos que misturavam PHP e HTML livremente alguém veio com a + idéia que a separação do form e conteúdo é uma boa prática [TM]. Além disso, + em muitas empresas os papéis de web designer e programador são separados. + Consequentemente, a procura por + uma solução de template continua. + + + Na minha própria empresa por exemplo, o desenvolvimento de uma aplicação + continua como segue: Após a documentação necessária estar pronta, o web designer + faz a maquete da interface e entrega isso ao programador. O programador implementa + as regras de negócio no PHP e usa a maquete para criar o "esqueleto" do template. + O projeto está então nas mãos da pessoa responsável pelo layout HTML designer/web page + que produz o template para sua glória completa. O projeto deve ir e voltar + entre programação/HTML várias vezes. Desta maneira, é importante para ter + um bom suporte de template porque programadores não querem fazer nada + com HTML e não querem HTML designers fazendo besteiras no código PHP. + Designers precisam de suporte para arquivos de configuração, blocos dinâmicos e + outras interfaces usadas, mas eles não querem ocupar-se com + as complexidades da linguagem + de programação PHP. + + + Olhando para muitas soluções de template para PHP disponíveis atualmente, + a maioria destes disponibiliza uma forma rudimentar de substituição de variáveis + dentro de templates e fazem um form limitado de blocos dinâmicos de funcionalidades. + Mas minhas necessidades próprias requisitam um pouco mais do que isso. + Nós não queremos programadores mexendo com layout HTML em tudo, mas isso foi quase inevitável. + Por exemplo, se um designer quiser cores no background alternando-se em blocos dinâmicos, + isso tem que ser feito pelo programador antecipadamente. Nós também + precisamos que designers estejam habilitados a usar seus próprios arquivos de configuração, + e colocar variáveis deles dentro dos templates. A lista continua. + + + Nós iniciamos escrevendo por acaso um template engine por volta de 1999. + Após o término, nós começamos a trabalhar num template engine + escrito em C que esperançosamente foi aceito para ser incluso com PHP. + Nós não somente encontramos algumas complicadas barreiras técnicas, mas + houve também calorosos debates sobre exatamente o que um template engine devia + e não devia fazer. Desta experiência, nós decidimos que o template + engine deveria ser escrito em PHP como uma classe, para qualquer um usar da mesma forma + como eles vêem. Então nós escrevemos um engine que o + SmartTemplate nunca veio a existir (note: essa + classe nunca foi enviada ao público). Ela foi uma classe que + fazia quase tudo que gostaríamos: substituição de variáveis regular, suporte à + inclusão de outros templates, integração com arquivos de configuração, código PHP + embutido, funcionalidade 'if' limitada e muito mais blocos dinâmicos robustos + que poderia ser aninhados muitas vezes. Tudo isso com expressões regulares + e o código produzido será melhor, como nós diremos, + impenetrável. Isso era também notoriamente lento em grandes aplicações para todos + as interpretações e expressões regulares trabalhando em cada requisição. + O maior problema do ponto de vista de um programador foi toda a + necessidade de trabalhar no processamento de scripts PHP e processamento + de blocos dinâmicos de templates. Como nós fazemos isso facilmente? + + + Então vem a visão do que ultimamente virou a Smarty. Nós sabemos quão rápido + é um código PHP sem o overhead da interpretação do template. Nós também sabemos + quão meticuloso e autoritária a linguagem PHP deve ser ao olhar de um designer, + e isso poderia ser mascarado com uma simples sintaxe de template. + Então o que acontece se nós combinarmos + estas duas forças? Desta maneira, Smarty nasceu... + + diff --git a/docs/pt_BR/programmers.sgml b/docs/pt_BR/programmers.sgml new file mode 100644 index 00000000..d47be7ee --- /dev/null +++ b/docs/pt_BR/programmers.sgml @@ -0,0 +1,3275 @@ + + Smarty para Programadores + + + + Constantes + + + + SMARTY_DIR + + Isso deve ser o caminho completo do path para a localização dos arquivos de classe da Smarty. + Se isso não for definido, então a Smarty irá tentar determinar + o valor apropriado automaticamente. Se definido, o path + deve finalizar com uma barra. + + + SMARTY_DIR + +// set path to Smarty directory +define("SMARTY_DIR","/usr/local/lib/php/Smarty/"); + +require_once(SMARTY_DIR."Smarty.class.php"); + + + + + + Variáveis + + + $template_dir + + Este é o nome padrão do diretório de template. Se você não fornecer + um tipo de recurso quando incluir arquivos, então ele irá ser encontrado aqui. + Por padrão isso é "./templates", significando que isso irá + olhar para o diretório de templates no mesmo diretório que está executando + o script PHP. + + + Notas Técnicas + + Não é recomendado colocar este diretório sob um diretório + document root do seu webserver. + + + + + $compile_dir + + Esse é o nome do diretório onde os template compilados estão localizados + Por padrão isso é "./templates_c", significando que isso irá + olhar para o diretório de templates no mesmo diretório que está executando + o script PHP. + + + Notas Técnicas + + Essa configuração deve ser um path relativo ou um path absoluto. + include_path não é usado para escrever em arquivos. + + + + Notas Técnicas + + Não é recomendado colocar este diretório sob um diretório + document root do seu webserver. + + + + + $config_dir + + Este é o diretório usado para armazenar arquivos de configuração usados nos + templates. O padrão é "./configs", significando que isso irá + olhar para o diretório de templates no mesmo diretório que está executando + o script PHP. + + + Notas Técnicas + + Não é recomendado colocar este diretório sob um diretório + document root do seu webserver. + + + + + $plugins_dir + + Esse é o diretório onde Smarty irá procurar por plugins que são necessários. + O Padrão é "plugins" sob o SMARTY_DIR. Se vocêes especificar um + path relativo, Smarty irá primeiro procurar sob o SMARTY_DIR, então + relativo para o cwd (current working directory), então relativo para cada + entrada no seu PHP include path. + + + Notas técnicas + + Para uma melhor performance, não configure seu plugins_dir para ter que usar o + PHP include path. Use um path absoluto, ou um path relativo para + SMARTY_DIR ou o cwd. + + + + + $debugging + + Isso habilita o debugging console. + O console é uma janela de javascript que informa à você + sobre os arquivos de template incluídos e variáveis + destinadas para a página de template atual. + + + + $debug_tpl + + Este é o nome do arquivo de template usado para o console de debug. + Por padrão, é nomeado como debug.tpl e está localizado no SMARTY_DIR. + + + + $debugging_ctrl + + Isso permite caminhos alternativos de habilitar o debug. NONE não significa + que métodos alternativos são permitidos. URL significa quando a palavra + SMARTY_DEBUG foi encontrado na QUERY_STRING, que o debug está habilitado + para a chamada do script. + Se $debugging é true, esse valor é ignorado. + + + + $global_assign + + Essa é a lista de variáveis que estão sempre implicitamente fixadas + para o template engine. Isso está acessível para fazer variáveis + globais ou variáveis do servidor disponíveis para todo o template + sem ter que fixá-las manualmente. Cada elemento em + $global_assign deve ser um nome de uma variável global, + ou um par de chave/valor, onde a chave é o nome do array global + array e o valor é o array de variáveis fixadas deste array global. $SCRIPT_NAME é + globalmente fixado por padrão + para $HTTP_SERVER_VARS. + + + Notas Técnicas + + Variáveis de servidor podem ser acessadas através da variável + $smarty, como {$smarty.server.SCRIPT_NAME}. Veja a seção + da variável + $smarty. + + + + + $undefined + + Isso seta o valor de $undefined para Smarty, o padrão é null. + Atualmente isso é somente usado para setar variáveis indefinidas em + $global_assign para o valor padrão. + + + + $autoload_filters + + Se há algum filtro que você deseja carregar em cada chamada de template, + você pode especificar-lhes usando essa variável e a Smarty irá + automaticamente carregá-los para você. A variável é um array associativo + onde as chaves são tipos de filtro e os valores são arrays de nomes de filtros. + Por exemplo: + + +$smarty->autoload_filters = array('pre' => array('trim', 'stamp'), + 'output' => array('convert')); + + + + + + $compile_check + + Em cima de cada requisição da aplicação PHP , Smarty testa para ver se o + template atual foi alterado (diferentes time stamp) desde a última + compilação. Se isso foi alterado, ele irá recompilar o template. Se o template + não foi compilado, ele irá compilar de qualquer maneira dessa configuração. + Por padrão esta variável é setada como true. Uma vez que a aplicação está + em produção (templates não serão alterados), o passo compile_check + não é necessário. Tenha certeza de setar $compile_check para "false" para + maior performance. Note que se você alterar isso para "false" e o + arquivo de template está alterado, você *não* irá ver a alteração desde que + o template seja recompilado. Se caching está habilitado e + compile_check está habilitado, então os arquivos de cache não serão regerados se + um complexo arquivo de ou um arquivo de configuração foi atualizado. Veja $force_compile ou clear_compiled_tpl. + + + + $force_compile + + Isso força Smarty para (re)compilar templates a cada requisição. + Essa configuração sobreescreve $compile_check. Por padrão + isso está desabilitado. Isso é útil para desenvolvimento e debug. + Isso nunca deve ser usado em ambiente de produção. Se caching + está habilitado, os arquivo(s) de cache serão regerados à todo momento. + + + + $caching + + Isto diz à Smarty se há ou não saída de cache para o template. + Por padrão isso está setado para 0, ou desabilitado. Se seu template gerar + conteúdo redundante, é necessário ligar o caching. Isso + irá resultar num ganho significativo de performance. Você pode também ter múltiplos + caches para o mesmo template. Um valor de 1 ou 2 caching habilitados. 1 diz + à Smarty para usar a variável atual $cache_lifetime para determinar se o + cache expirou. Um valor 2 diz à Smarty para usar o valor cache_lifetime + então para quando o cache foi gerado. Desta maneira você pode setar o + cache_lifetime imediatamente antes de buscar o template para ter controle + sobre quando este cache em particular expira. Veja também is_cached. + + + Se $compile_check está habilitado, o conteúdo do cache irá ser regerado se + algum dos templates ou arquivos de configuração que são parte deste cache estiverem + alterados. Se $force_compile está habilitado, o conteúdo do cache irá sempre ser + regerado. + + + + $cache_dir + + Isso é o nome do diretório onde os caches do template são + armazenados. Por padrão isso é "./cache", significando que isso irá olhar + para o diretório de cache no mesmo diretório que executar scripts PHP. + Você pode tambe usar sua própria função customizada de manuseamento de cache + para manipular arquivos de cache, + que irão ignorar esta configuração. + + + Notas Técnicas + + Essa configuração deve ser ou um relativo + ou absoluto path. include_path não é usado para escrever em arquivos. + + + + Notas Técnicas + + Não é recomendado colocar este diretório sob um diretório + document root do seu webserver. + + + + + $cache_lifetime + + Isso é o comprimento de tempo em segundos que um cache de template é válido. + Uma vez que este tempo está expirado, o cache irá ser regerado. $caching deve + ser configurado para "true" para $cache_lifetime para ter algum propósito. Um valor de -1 + irá forçar o cache a nunca expirar. Um valor de 0 irá fazer com que o cache seja sempre regerado + (bom somente para testes, o método mais eficiente de desabilitar caching é setá-lo para + $caching = false.) + + + Se $force_compile está + habilitado, os arquivos de cache serão regerados todo o tempo, eficazmente + desativando caching. Você pode limpar todos os arquivos de cache com a função clear_all_cache(), ou + arquivos individuais de cache (ou grupos) com a função clear_cache(). + + + Notas Técnicas + + Se você quiser dar para certos templates seu próprio tempo de vida de um cache, + você poderia fazer isso configurando $caching = 2, + então configure $cache_lifetime para um único valor somente antes de chamar display() + ou fetch(). + + + + + $cache_handler_func + + Você pode fornecer uma função padrão para manipular arquivos de cache ao invés de + usar o método built-in usando o $cache_dir. Veja a + seção cache + handler function section para obter detalhes. + + + + $cache_modified_check + + Se configurado para true, Smarty irá respeitar o If-Modified-Since + header enviado para o cliente. Se o timestamp do arquivo de cache + não foi alterado desde a última visita, então um header "304 Not Modified" + irá ser enviado ao invés do conteúdo. Isso funciona somente em arquivos + de cache sem tags insert. + + + + $config_overwrite + + Se configurado para true, variáveis lidas no arquivo de configurações irão sobrescrever + uma a outra. Do contrário, as variáveis serão guardadas em um array. Isso é + útil se você quer armazenar arrays de dados em arquivos de configuração, somente lista + tempos de cada elemento múltiplo. true por padrão. + + + + $config_booleanize + + Se setado para true, os valores do arquivo de configuração de on/true/yes e off/false/no + ficará convertido para valores booleanos automaticamente. Desta forma você pode usar os + valores em um template como: {if #foobar#} ... {/if}. Se foobar estiver + on, true ou yes, a condição {if} irá executar. true por padrão. + + + + $config_read_hidden + + Se configurado para true, esconde seções (nomes de seções começados com um período) + no arquivo de configuração podem ser lidos do template. Tipicamente você deixaria + isto como false, desta forma você pode armazenar dados sensitivos no arquivo de configuração + como um parâmetro de banco de + dados e sem preocupar-se sobre o template carregá-los. false é o padrão. + + + + $config_fix_newlines + + Se setado para true, mac e dos newlines (\r e \r\n) no arquivo de configuração serão + convertidos para \n quando eles forem interpretados. true é o padrão. + + + + $default_template_handler_func + + Essa função é chamada quando um template não pode ser obtido + de seu recurso. + + + + $php_handling + + Isso diz à Smarty como manipular códigos PHP contido nos + templates. Há quatro possíveis configurações, padrão sendo + SMARTY_PHP_PASSTHRU. Note que isso NÃO fará efeito com códigos php + dentro de tags {php}{/php} + no template. + + + SMARTY_PHP_PASSTHRU - Smarty echos tags as-is. + SMARTY_PHP_QUOTE - Smarty quotes the + tags as html entities. + SMARTY_PHP_REMOVE - Smarty + irá remover as tags do template. + SMARTY_PHP_ALLOW - Smarty irá executar as + tags como códigos PHP. + + + NOTE: Usando códigos PHP code dentro de templates é altamente desencorajado. + Use custom functions ou + modifiers ao invés disso. + + + + $security + + $security true/false, o padrão é false. Security é bom para situações + quando você tem partes inconfiáveis editando o template + (via ftp por exemplo) e você quer reduzir os riscos de comprometimento + da segurança do sistema através da linguagem de template. + Habilitando-o faz-se cumprir as regras da linguagem de template, + a menos que especificamente cancelada com $security_settings: + + + Se $php_handling está setado para SMARTY_PHP_ALLOW, isso é implicitamente + alterado para SMARTY_PHP_PASSTHRU + Funçõs PHP não são permitidas em blocos IF, + exceto estes especificados no $security_settings + templates podem ser somente incluidos no diretório + listado em $secure_dir array + Arquivos locais podem ser somente trazidos do diretório + listado em $secure_dir usando no array {fetch} + Estas tags {php}{/php} não são permitidas + Funções PHP não são permitidas como modificadores, exceto + estes especificados no $security_settings + + + + $secure_dir + + Isso é um array de todos os diretórios locais que são considerados + seguros. {include} e {fetch} usam estes (diretórios) quando security está habilitado. + + + + $security_settings + + Essas configurações são usadas para cancelar ou especificar configurações + de segurança quando security está habilitado. Estas possuem as seguintes configurações possíveis: + + + PHP_HANDLING - true/false. Se setado para true, + a configuração de $php_handling não é checada para security. + IF_FUNCS - Isso é um array de nomes de funções PHP permitidas + nos blocos IF. + INCLUDE_ANY - true/false. Se setado para true, algum + template pode ser incluído para um arquivo do sistema, apesar de toda a lista de + $secure_dir. + PHP_TAGS - true/false. Se setado para true, as tags {php}{/php} + são permitidas nos templates. + MODIFIER_FUNCS - Isso é um array de nomes de funções PHP permitidas + usadas como modificadores de variável. + + + + $trusted_dir + + $trusted_dir somente usado quando $security está habilitado. Isso é um array + de todos os diretórios que são considerados confiáveis. Diretórios confiáveis + são onde você irá deixar seus scripts php que são executados diretamente para o + template com {include_php}. + + + + $left_delimiter + + Este é o delimitador esquerdo usado para a linguagem de template. + O padrão é "{". + + + + $right_delimiter + + Este é o delimitador direito usado para a linguagem de template. + O padrão é "}". + + + + $compiler_class + + Especifica o nome do compilador de classes que + Smarty irá usar para compilar templates. O padrão é 'Smarty_Compiler'. + Para usuários avançados somente. + + + + $request_vars_order + + A ordem na qual as variáveis requeridas serão registradas, similar ao + variables_order no php.ini + + + + $request_use_auto_globals + + Especifica se a Smarty deve usar variáveis globais do php $HTTP_*_VARS[] + ($request_use_auto_globals=false que é o valor padrão) ou + $_*[] ($request_use_auto_globals=true). Isso afeta templates + que fazem uso do {$smarty.request.*}, {$smarty.get.*} etc. . + Atenção: Se você setar $request_use_auto_globals para true, variable.request.vars.order + não terão efeito mas valores de configurações do php + gpc_order são usados. + + + + $compile_id + + Identificador de compilação persistente. Como uma alternativa + para passar o mesmo compile_id para cada chamada de função, você + pode setar este compile_id e isso irá ser usado implicitamente após isso. + + + + $use_sub_dirs + + Configure isso para false se seu ambiente de PHP não permite a criação de + subdiretórios pela Smarty. Subdiretórios são muito eficientes, então use-os se você + conseguir. + + + + $default_modifiers + + Isso é um array de modificadores implicitamente aplicados par cada + variável no template. Por Exemplo, para cada variável HTML-escape por padrão, + use o array('escape:"htmlall"'); Para fazer a variável isenta para modificadores + padrão, passe o modificador especial "smarty" com um valor de parâmetro "nodefaults" + modificando isso, como + {$var|smarty:nodefaults}. + + + + $default_resource_type + + Isso diz à Smarty qual tipo de recurso usar implicitamente. + O valor padrão é 'file', significando que $smarty->display('index.tpl'); e + $smarty->display('file:index.tpl'); são idênticos no significado. + Veja o capítulo resource para detalhes. + + + + + + Métodos + + append + + + void append + mixed var + + + void append + string varname + mixed var + + + void append + string varname + mixed var + boolean merge + + + + Isso é usado para adicionar um elemento para um array fixado. Se você adicionar + uma string como valor, isso irá converter-se para um valor de array e então adicioná-lo. + Você pode explicitamente passar pares nomes/valores, ou arrays associativos + contendo o par nome/valor. Se você passar o terceiro parâmetro opcional para true, + o valor unir-se ao array atual + ao invés de ser adicionado. + + + Notas Técnicas + + O parâmetro de união respeita a chave do array, então se você + mesclar dois índices númericos de um array, eles devem sobrescrever-se + um ao outro ou em resultados não sequências de chave. Isso é diferente da função de PHP array_merge() + que apaga as chaves e as renumera. + + + + append + +// passing name/value pairs +$smarty->append("Name","Fred"); +$smarty->append("Address",$address); + +// passing an associative array +$smarty->append(array("city" => "Lincoln","state" => "Nebraska")); + + + + append_by_ref + + + void append_by_ref + string varname + mixed var + + + void append_by_ref + string varname + mixed var + boolean merge + + + + Isso é usado para adicionar vlaores para o template por referência. + Se você adicionar uma variável por referência e então alterar este valor + o valor adicionado enxergará a alteração também. Para objetos, + append_by_ref() também evita uma cópia em memória do objeto adicionado. + Veja o manual do PHP em referenciando variáveis para uma melhor explanação sobre o assunto. + Se você passar o terceiro parâmetro opcional para true, + o valor irá ser mesclado com o array atual ao invés de adicioná-lo. + + + Notas Técnicas + + O parâmetro de união respeita a chave do array, então se você mesclar + dois índices númericos de arrays, eles devem sobrescrever-se um ao outro ou + em resultados não sequências de chave. Isso é diferente da função de PHP array_merge() + que apaga as chaves numéricas e as renumera. + + + + append_by_ref + +// appending name/value pairs +$smarty->append_by_ref("Name",$myname); +$smarty->append_by_ref("Address",$address); + + + + assign + + + void assign + mixed var + + + void assign + string varname + mixed var + + + + Isso é usado para fixar valores para o template. Você pode + explicitamente passar pares de nomes/valores, ou um array associativo + contendo o par de nome/valor. + + + assign + +// passing name/value pairs +$smarty->assign("Name","Fred"); +$smarty->assign("Address",$address); + +// passing an associative array +$smarty->assign(array("city" => "Lincoln","state" => "Nebraska")); + + + + assign_by_ref + + + void assign_by_ref + string varname + mixed var + + + + Isso é usado para fixar valores para o template por referência ao invés de fazer uma cópia. + Veja o manual do PHP na parte sobre referência de variáveis para uma explanação mais detalhada. + + + Notas Técnicas + + Isso é usado para fixar valores para o template por referência. + Se você fixar uma variável por referência e então alterar o valor dela, + o valor fixado enxergará o valor alterado também. + Para objetos, assign_by_ref() também restringe uma cópia de objetos fixados + em memória. + Veja o manual do php em refereciando variáveis para uma melhor explanação. + + + + assign_by_ref + +// passing name/value pairs +$smarty->assign_by_ref("Name",$myname); +$smarty->assign_by_ref("Address",$address); + + + + clear_all_assign + + + void clear_all_assign + + + + + Isso limpa o valor de todas as variáveis fixadas. + + +clear_all_assign + +// clear all assigned variables +$smarty->clear_all_assign(); + + + + clear_all_cache + + + void clear_all_cache + int expire time + + + + Isso limpa completamente o cache de template. Como um parâmetro + opcional, você pode fornecer um ano mínimo em segundos + que o arquivo de cache deve ter antes deles serem apagados. + + +clear_all_cache + +// clear the entire cache +$smarty->clear_all_cache(); + + + + clear_assign + + + void clear_assign + string var + + + + Isso limpa o valor de uma variável fixada. Isso + pode ser um valor simples, ou um array de valores. + + +clear_assign + +// clear a single variable +$smarty->clear_assign("Name"); + +// clear multiple variables +$smarty->clear_assign(array("Name","Address","Zip")); + + + + clear_cache + + + void clear_cache + string template + string cache id + string compile id + int expire time + + + + Isso limpa o cache de um template específico. Se você tem + múltiplos caches para este arquivo, você limpa o cache + específico fornecendo o cache id como o segundo parâmetro. + Você pode também passar um compile id como um terceiro parâmetro. + Você pode "agrupar" templates juntos e então eles podem ser removidos + como um grupo. Veja o caching section para maiores informações. Como um quarto + parâmetro opcional, você pode fornecer um ano mínimo em segundos + que o arquivo de cache deve + ter antes dele ser apagado. + + +clear_cache + +// clear the cache for a template +$smarty->clear_cache("index.tpl"); + +// clear the cache for a particular cache id in an multiple-cache template +$smarty->clear_cache("index.tpl","CACHEID"); + + + + clear_compiled_tpl + + + void clear_compiled_tpl + string tpl_file + + + + Isso limpa a versão compilada do recurso de template especificado, + ou todos os arquivos de templates compilados se nenhum for especificado. + Essa função é para uso avançado somente, não normalmente necessária. + + +clear_compiled_tpl + +// clear a specific template resource +$smarty->clear_compiled_tpl("index.tpl"); + +// clear entire compile directory +$smarty->clear_compiled_tpl(); + + + + clear_config + + + void clear_config + string var + + + + Isso limpa todas as variáveis de configuração fixadas. Se um nome de variável + é fornecido, somente esta variável é apagada. + + +clear_config + +// clear all assigned config variables. +$smarty->clear_config(); + +// clear one variable +$smarty->clear_config('foobar'); + + + + config_load + + + void config_load + string file + string section + + + + Isso carrega o arquivo de configuração de dados e fixa-o para o + template. Isso funciona idêntico a função + config_load. + + + Notas Técnicas + + À partir da Smarty 2.4.0, variáveis de template fixadas são + mantidas através de fetch() e display(). Variáveis de configuração carregadas + de config_load() são sempre de escopo global. Arquivos de configuração + também são compilados para execução rápida, e repeita o force_compile e compile_check parâmetros de configuração. + + + +config_load + +// load config variables and assign them +$smarty->config_load('my.conf'); + +// load a section +$smarty->config_load('my.conf','foobar'); + + + + display + + + void display + string template + string cache_id + string compile_id + + + + Isso mostra o template. Fornecendo um válido template resource + tipo e path. Como um segundo parâmetro opcional, você pode passar + um cache id. Veja o caching + section para maiores informações. + + + Como um terceiro parâmetro opcional, você pode passar um compile id. + Isso está no evento que você quer compilar diferentes versões do + mesmo template, como ter templates compilados separadamente para diferentes linguagens. + Outro uso para compile_id é quando você usa mais do que um $template_dir + mas somente um $compile_dir. Seta um compile_id em separado para cada $template_dir, + de outra maneira templates com mesmo nome irão sobrescrever-se um ao outro. + Você pode também setar a variável $compile_id ao invés de + passar isso para cada chamada + de display(). + + +display + +include("Smarty.class.php"); +$smarty = new Smarty; +$smarty->caching = true; + +// only do db calls if cache doesn't exist +if(!$smarty->is_cached("index.tpl")) +{ + + // dummy up some data + $address = "245 N 50th"; + $db_data = array( + "City" => "Lincoln", + "State" => "Nebraska", + "Zip" = > "68502" + ); + + $smarty->assign("Name","Fred"); + $smarty->assign("Address",$address); + $smarty->assign($db_data); + +} + +// display the output +$smarty->display("index.tpl"); + + + Use a sintaxe para template resources para + mostrar arquivos fora do $template_dir directory. + + +Exemplos de recursos da função display + +// absolute filepath +$smarty->display("/usr/local/include/templates/header.tpl"); + +// absolute filepath (same thing) +$smarty->display("file:/usr/local/include/templates/header.tpl"); + +// windows absolute filepath (MUST use "file:" prefix) +$smarty->display("file:C:/www/pub/templates/header.tpl"); + +// include from template resource named "db" +$smarty->display("db:header.tpl"); + + + + + fetch + + + string fetch + string template + string cache_id + string compile_id + + + + Isso retorna a saída do template ao invés de mostrá-lo. + Fornecendo um tipo ou path válido template resource. + Como um segundo parâmetro opcional, você pode passar o cache id. + Veja o caching + section para maiores informações. + + + Como um terceiro parâmetro opcional, você pode passar um compile id. + Isso está no evento que você quer compilar diferentes versões do + mesmo template, como ter templates compilados separadamente para + diferentes linguagens. Outro uso para compile_id é quando você + usa mais do que um $template_dir mas somente um $compile_dir. Seta + um compile_id em separado para cada $template_dir, de outra maneira + templates com mesmo nome irão sobrescrever-se uns aos outros. Você + pode também setar a variável $compile_id ao invés + de passá-la para cada chamada de fetch(). + + +fetch + +include("Smarty.class.php"); +$smarty = new Smarty; + +$smarty->caching = true; + +// only do db calls if cache doesn't exist +if(!$smarty->is_cached("index.tpl")) +{ + + // dummy up some data + $address = "245 N 50th"; + $db_data = array( + "City" => "Lincoln", + "State" => "Nebraska", + "Zip" = > "68502" + ); + + $smarty->assign("Name","Fred"); + $smarty->assign("Address",$address); + $smarty->assign($db_data); + +} + +// capture the output +$output = $smarty->fetch("index.tpl"); + +// do something with $output here + +echo $output; + + + + get_config_vars + + + array get_config_vars + string varname + + + + Isso retorna o valor da variável de configuração dada. + Se nenhum parâmetro é dado, um array de todas as variáveis dos arquivos de configurações é retornado. + + +get_config_vars + +// get loaded config template var 'foo' +$foo = $smarty->get_config_vars('foo'); + +// get all loaded config template vars +$config_vars = $smarty->get_config_vars(); + +// take a look at them +print_r($config_vars); + + + + get_registered_object + + + array get_registered_object + string object_name + + + + Isso retorna uma referência para um objeto registrado. + Isso é útil para dentro de uma função customizada quando você + precisa acessar diretamente um objeto registrado. + + +get_registered_object + +function smarty_block_foo($params, &$smarty) { + if (isset[$params['object']]) { + // get reference to registered object + $obj_ref =& $smarty->&get_registered_object($params['object']); + // use $obj_ref is now a reference to the object + } +} + + + + get_template_vars + + + array get_template_vars + string varname + + + + Isso retorna o valor de uma variável fixada. Se nenhum parâmetro + é dado, um array de todas as variávels fixadas é retornado. + + +get_template_vars + +// get assigned template var 'foo' +$foo = $smarty->get_template_vars('foo'); + +// get all assigned template vars +$tpl_vars = $smarty->get_template_vars(); + +// take a look at them +print_r($tpl_vars); + + + + is_cached + + + void is_cached + string template + [string cache_id] + + + + Isso retorna true se há um cache válido para esse template. + Isso somente funciona se caching está setado para true. + + +is_cached + +$smarty->caching = true; + +if(!$smarty->is_cached("index.tpl")) { + // do database calls, assign vars here +} + +$smarty->display("index.tpl"); + + + Você pode também passar um cache id como um segundo parâmetro opcional + no caso você quer múltiplos caches para o template dado. + + +is_cached with multiple-cache template + +$smarty->caching = true; + +if(!$smarty->is_cached("index.tpl","FrontPage")) { + // do database calls, assign vars here +} + +$smarty->display("index.tpl","FrontPage"); + + + + load_filter + + + void load_filter + string type + string name + + + + Essa função pode ser usada para carregar um filtro de plugin. O primeiro + argumento especifica o tipo do filtro para carregar e pode ser um + dos seguintes: 'pre', 'post', ou 'output'. O segundo argumento + especifica o nome do filtro de plugin, por exemplo, 'trim'. + + +Carregando filtros de plugins + +$smarty->load_filter('pre', 'trim'); // load prefilter named 'trim' +$smarty->load_filter('pre', 'datefooter'); // load another prefilter named 'datefooter' +$smarty->load_filter('output', 'compress'); // load output filter named 'compress' + + + + register_block + + + void register_block + string name + mixed impl + bool cacheable + array or null cache_attrs + + + + Use isso para registrar dinamicamente blocos de funções de plugins. + Passe no bloco de nomes de função, seguido por uma chamada de função PHP + que implemente isso. + + + + A chamada de uma função-php impl pode ser (a) + uma string contendo o nome da função ou (b) um array no formato + array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo um + método desta classe. + + +$cacheable e $cache_attrs podem ser omitidos na maior parte dos casos. Veja Controlando modos de Saída de Cache dos Plugins para obter informações apropriadas. + + +register_block + +/* PHP */ +$smarty->register_block("translate", "do_translation"); + +function do_translation ($params, $content, &$smarty, &$repeat) { + if (isset($content)) { + $lang = $params['lang']; + // do some translation with $content + return $translation; + } +} + +{* template *} +{translate lang="br"} + Hello, world! +{/translate} + + + + register_compiler_function + + + void register_compiler_function + string name + mixed impl + bool cacheable + + + + Use isso para registrar dinamicamente uma função de plugin compilador. + Passe no nome da função compilador, seguido pela função + PHP que implemente isso. + + + A chamada para função-php impl + pode ser uma string contendo o nome da função ou (b) um array + no formato array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo o método + desta classe. + + + $cacheable pode ser omitido na maioria + dos casos. Veja Controlando modos de Saída de Cache dos Plugins + para obter informações apropriadas. + + + + register_function + + + void register_function + string name + mixed impl + bool cacheable + array or null cache_attrs + + + + Use isso para registrar funções de plugins dinamicamente para o template. + Passe no template o nome da função, + seguido pelo nome da função PHP que implemente isso. + + + A chamada para função-php impl pode ser (a) + uma string contendo o nome da função ou (b) um array no formato + array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo um método + desta classe. + + +$cacheable e $cache_attrs podem ser omitidos na maioria dos casos. Veja Controlando modos de Saída Cache dos Plugins para obter informações apropriadas. + + +register_function + +$smarty->register_function("date_now", "print_current_date"); + +function print_current_date ($params) { + extract($params); + if(empty($format)) + $format="%b %e, %Y"; + return strftime($format,time()); +} + +// agora você pode usar isso no Smarty para mostrar a data atual: {date_now} +// ou, {date_now format="%Y/%m/%d"} para formatar isso. + + + + register_modifier + + + void register_modifier + string name + mixed impl + + + + Use isso para modificar dinamicamente plugins registrados. + Passe no template o nome do modificador, seguido da função PHP + que implemente isso. + + + A chamada da função-php impl + pode ser (a) uma strin contendo o nome da função + ou (b) um array no formato + array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo um método desta classe. + + + +register_modifier + +// let's map PHP's stripslashes function to a Smarty modifier. + +$smarty->register_modifier("sslash","stripslashes"); + +// now you can use {$var|sslash} to strip slashes from variables + + + + register_object + + + void register_object + string object_name + object $object + array allowed methods/properties + boolean format + array block methods + + + + Isso é para registrar um objeto para uso no template. Veja a + seção de objetos + do manual para examplos. + + + + register_outputfilter + + + void register_outputfilter + mixed function + + + + Use isso para registrar dinamicamente filtros de saída para operações + na saída do template antes de mostrá-lo. Veja + Filtros de Saída de Templates + para maiores informações de como configurar uma + função de filtro de saída. + + + A chamada da função-php function pode + ser (a) uma string contendo um nome de função ou (b) um array no formato + array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo um método + desta classe. + + + + register_postfilter + + + void register_postfilter + mixed function + + + + Use isso para registrar dinamicamente pósfiltros para rodar templates + após eles terem sido compilados. Veja + pósfiltros de template para + maiores informações de como configurar funções de pósfiltragem. + + + A chamada da função-php function pode + ser (a) uma string contendo um nome de função ou (b) um array no formato + array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo um método + desta classe. + + + + register_prefilter + + + void register_prefilter + mixed function + + + + Use isso para registrar préfiltros dinamicamente para rodar + templates antes deles serem compilados. Veja template prefilters para + maiores informações de como configurar uma função de préfiltragem. + + + A chamada da função-php function pode + ser (a) uma string contendo um nome de função ou (b) um array no formato + array(&$object, $method) com + &$object sendo uma referência para um + objeto e $method sendo uma string + contendo o nome do método ou (c) um array no formato + array(&$class, $method) com + $class sendo um nome de classe e + $method sendo um método + desta classe. + + + + register_resource + + + void register_resource + string name + array resource_funcs + + + + Use isso para registrar dinamicamente um recurso de plugin com a Smarty. + Passe no nome o recurso e o array de funções + PHP que implementam isso. Veja + template resources + para maiores informações de como configurar uma função para retornar + templates. + + + Notas Técnicas + + Um nome de recurso deve ter ao menos dois caracteres de comprimento. + Um caracter do nome de recurso irá ser ignorado e usado como parte do + path do arquivo como, $smarty->display('c:/path/to/index.tpl'); + + + + A função-php-array resource_funcs + deve ter 4 ou 5 elementos. Com 4 elementos os elementos são + as functions-callbacks para as respectivas funções "source", + "timestamp", "secure" e "trusted" de recurso. + Com 5 elementos o primeiro elemento tem que ser um objeto por referência + ou um nome de classe do objeto ou uma classe implementando o recurso e os 4 + elementos seguintes tem que ter os nomes de métodos + implementando "source", "timestamp", + "secure" e "trusted". + + +register_resource + +$smarty->register_resource("db", array("db_get_template", + "db_get_timestamp", + "db_get_secure", + "db_get_trusted")); + + + + trigger_error + + + void trigger_error + string error_msg + [int level] + + + + Essa função pode ser usada para saída de uma mensagem de erro usando Smarty. + O parâmetro level pode ser um dos valores usados + para a função de php trigger_error(), ex.: E_USER_NOTICE, + E_USER_WARNING, etc. Por padrão é E_USER_WARNING. + + + + + template_exists + + + bool template_exists + string template + + + + Essa função checa se o template especificado existe. Isso pode + aceitar um path para o template no filesystem ou um recurso de string + especificando o template. + + + + unregister_block + + + void unregister_block + string name + + + + Use isso para desregistrar dinamicamente um bloco de funções de plugin. + Passe no bloco o nome da função. + + + + unregister_compiler_function + + + void unregister_compiler_function + string name + + + + Use essa função para desregistrar uma função de compilador. Passe + o nome da função de compilador. + + + + unregister_function + + + void unregister_function + string name + + + + Use isso para desregistrar dinamicamente uma função de plugin do template. + Passe no template o nome da função. + + +unregister_function + +// nós não queremos que designers template tenham acesso aos nossos arquivos do sistema + +$smarty->unregister_function("fetch"); + + + + unregister_modifier + + + void unregister_modifier + string name + + + + Use isso para desregistrar dincamimente um modificador de plugin. + Passe no template o nome do modificador. + + +unregister_modifier + +// nós não queremos que designers de template usem strip tags para os elementos + +$smarty->unregister_modifier("strip_tags"); + + + + unregister_object + + + void unregister_object + string object_name + + + + Use isso para desregistrar um objeto. + + + + unregister_outputfilter + + + void unregister_outputfilter + string function_name + + + + Use isso para desregistrar dinamicamente um filtro de saída. + + + + unregister_postfilter + + + void unregister_postfilter + string function_name + + + + Use isso para dinamicamente desregistrar um pósfiltro. + + + + unregister_prefilter + + + void unregister_prefilter + string function_name + + + + Use isso para dinamicamente desregistrar um préfiltro. + + + + unregister_resource + + + void unregister_resource + string name + + + + Use isso para dinamicamente desregistrar um recurso de plugin. + Passe no parâmetro nome o nome do recurso. + + +unregister_resource + +$smarty->unregister_resource("db"); + + + + + + Caching + + Caching é usado para aumentar a velocidade de chamada para display() ou fetch() salvando isso num arquivo de saída. Se há uma versão + de cache disponível para a chamada, isso é mostrado ao invés de regerar a saída de dados. + Caching pode fazer coisas tremendamente rápidas, + especialmente templates com longo tempo computacional. Desde a saída de dados do + display() ou fetch() está em cache, um arquivo de cache poderia ser composto por + diversos arquivos de templates, arquivos de configuração, etc. + + + Desde que templates sejam dinâmicos, é importante isso ter cuidado com + o que você está fazendo cache e por quanto tempo. Por exemplo, se você está mostrando + a página principal do seu website na qual as alterações de conteúdo são muito frequentes, + isso funciona bem para cache dessa por uma hora ou mais. Um outro modo, se você está + mostrando uma página com um mapa do tempo contendo novas informações por minuto, não + faz sentido fazer cache nesta página. + + + Configurando Caching + + A primeira coisa a fazer é habilitar o caching. Isso é feito pela configuração $caching = true (or 1.) + + + Habilitando Caching + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +$smarty->display('index.tpl'); + + + Com caching habilitado, a chamada para a função display('index.tpl') irá trazer + o template como usual, mas também + salva uma cópia disso para o arquivo de saída (uma cópia de cache) in the $cache_dir. + Na próxima chamada de display('index.tpl'), a cópia em cache será usada + ao invés de trazer novamente o template. + + + Notas Técnicas + + Os arquivos no $cache_dir são nomeados com similaridade ao nome do arquivo de template. + Embora eles terminem com a extensão ".php", eles não são realmente scripts executáveis de php. + Não edite estes arquivos! + + + + Cada página em cache tem um período de tempo limitado determinado por $cache_lifetime. O padrão do valor é + 3600 segundos, ou 1 hora. Após o tempo expirar, o cache é regerado. + É possível dar tempos individuais para caches com seu próprio tempo + de expiração pela configuração $caching = 2. Veja a documentação em $cache_lifetime para detalhes. + + + Configurando cache_lifetime por cache + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = 2; // lifetime is per cache + +// set the cache_lifetime for index.tpl to 5 minutes +$smarty->cache_lifetime = 300; +$smarty->display('index.tpl'); + +// set the cache_lifetime for home.tpl to 1 hour +$smarty->cache_lifetime = 3600; +$smarty->display('home.tpl'); + +// NOTE: the following $cache_lifetime setting will not work when $caching = 2. +// The cache lifetime for home.tpl has already been set +// to 1 hour, and will no longer respect the value of $cache_lifetime. +// The home.tpl cache will still expire after 1 hour. +$smarty->cache_lifetime = 30; // 30 seconds +$smarty->display('home.tpl'); + + + Se $compile_check está habilitado, + cada arquivo de template e arquivo de configuração que está envolvido com o arquivo em cache + é checado por modificações. Se algum destes arquivos foi modificado desde que o último cache + foi gerado, o cache é imediatamente regerado. + Isso é ligeiramente uma forma de optimização de performance de overhead, deixe $compile_check setado para false. + + + Habilitando $compile_check + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; +$smarty->compile_check = true; + +$smarty->display('index.tpl'); + + + Se $force_compile está habilitado, + os arquivos de cache irão sempre ser regerados. Isso é efetivamente desativar caching. + $force_compile é usualmente para propósitos de debug somente, um caminho mais + eficiente de desativar caching é setar o $caching = false (ou 0.) + + + A função is_cached() + pode ser usada para testar se um template tem um cache válido ou não. + Se você tem um template com cache que requer alguma coisa como um retorno do banco de dados, + você pode usar isso para pular este processo. + + + Usando is_cached() + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +if(!$smarty->is_cached('index.tpl')) { + // No cache available, do variable assignments here. + $contents = get_database_contents(); + $smarty->assign($contents); +} + +$smarty->display('index.tpl'); + + + Você pode deixar partes da sua página dinâmica com a função de template insert. + Vamos dizer que sua página inteira pode ter cache exceto para um banner que é + mostrado abaixo do lado direito da sua página. Usando uma função insert para o banner, + você pode deixar esse elemento dinâmico dentro do conteúdo de cache. Veja a documentação + em insert para + detalhes e exemplos. + + + Você pode limpar todos os arquivos de cache com a função clear_all_cache(), ou + arquivos de cache individuais (ou grupos) com a função clear_cache(). + + + Limpando o cache + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +// clear out all cache files +$smarty->clear_all_cache(); + +// clear only cache for index.tpl +$smarty->clear_cache('index.tpl'); + +$smarty->display('index.tpl'); + + + + Multiple Caches Per Page + + Você pode ter múltiplos arquivos de cache para uma simples chamada de display() + ou fetch(). Vamos dizer que uma chamada para display('index.tpl') deve ter vários + conteúdo de saída diferentes dependendo de alguma condição, e você quer separar + os caches para cada um. Você pode fazer isso passando um cache_id como um + segundo parâmetro para a chamada da função. + + + Passando um cache_id para display() + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +$my_cache_id = $_GET['article_id']; + +$smarty->display('index.tpl',$my_cache_id); + + + Acima, nós estamos passando a variável $my_cache_id para display() com o + cache_id. Para cada valor único de $my_cache_id, um cache em separado irá ser + gerado para index.tpl. Nesse exemplo, "article_id" foi passado em URL e é usado + como o cache_id. + + + Notas Técnicas + + Tenha muito cuidado quando passar valores do cliente (web brownser) dentro + da Smarty (ou alguma aplicação PHP.) Embora o exemplo acima usando o article_id + vindo de uma URL pareça fácil, isso poderia ter consequências ruins. O + cache_id é usado para criar um diretório no sistema de arquivos, então se o usuário + decidir passar um valor extremamente largo para article_id, ou escrever um script + que envia article_ids randômicos em um ritmo rápido, isso poderia possivelmente causar + problemas em nível de servidor. Tenha certeza de limpar algum dado passado antes de usar isso. Nessa instãncia, talvez você + saiba que o article_id tem um comprimento de 10 caracteres e isso é constituído somente + de alfa-numéricos, e deve ser um + article_id válido no database. Verifique isso! + + + + Tenha certeza de passar o mesmo cache_id como o segundo + parâmetro para is_cached() e + clear_cache(). + + + Passando um cache_id para is_cached() + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +$my_cache_id = $_GET['article_id']; + +if(!$smarty->is_cached('index.tpl',$my_cache_id)) { + // No cache available, do variable assignments here. + $contents = get_database_contents(); + $smarty->assign($contents); +} + +$smarty->display('index.tpl',$my_cache_id); + + + Você pode limpar todos os caches para um cache_id em particular passando + o primeiro parâmetro null para clear_cache(). + + + Limpando todos os caches para um cache_id em particular + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +// clear all caches with "sports" as the cache_id +$smarty->clear_cache(null,"sports"); + +$smarty->display('index.tpl',"sports"); + + + Desta maneira, você pode "agrupar" seus + caches juntos dando-lhes o mesmo cache_id. + + + + Grupos de Cache + + Você pode fazer agrupamentos mais elaborados configurando grupos de cache_id. Isso é + realizado pela separação de cada sub-grupo com uma barra vertical "|" no valor do + cache_id. Você pode ter muitos sub-grupos com você desejar. + + + Grupos de cache_id + +require('Smarty.class.php'); +$smarty = new Smarty; + +$smarty->caching = true; + +// clear all caches with "sports|basketball" as the first two cache_id groups +$smarty->clear_cache(null,"sports|basketball"); + +// clear all caches with "sports" as the first cache_id group. This would +// include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..." +$smarty->clear_cache(null,"sports"); + +$smarty->display('index.tpl',"sports|basketball"); + + + Notas Técnicas + + O agrupamento de cache id NÃO use o path do template como alguma parte do cache_id. + Por exemplo, se você tem display('themes/blue/index.tpl'), você não pode limpar o cache + para tudo que estiver sob o diretório "themes/blue". Se você quiser fazer isso, você deve + agrupá-los no cache_id, como display('themes/blue/index.tpl','themes|blue'); Então + você pode limpar os caches para o + tema azul com with clear_cache(null,'themes|blue'); + + + + + + Controlling Cacheability of Plugins' Output + +Desde Smarty-2.6.0 os caches de plugins pode ser declarados +ao registrá-los. O terceiro parâmetro para register_block, +register_compiler_function e register_function é chamado +$cacheable e o padrão para true que é também +o comportamento de plugins na versão da Smarty antecessores à 2.6.0 + + + +Quando registrando um plugin com $cacheable=false o plugin é chamado todo o tempo na página que está sendo mostrada, sempre se a página vier do cache. A função de plugin tem um comportamento levemente como uma função insert. + + + +Em contraste para {insert} o atributo para o plugin não está em cache por padrão. Eles podem ser declarados para serem cacheados com o quarto parâmetro $cache_attrs. $cache_attrs é um array de nomes de atributos que devem ser cacheados, então a função de plugin pega o valor como isso sendo o tempo que a página foi escrita para o cache todo o tempo isso é buscado do cache. + + + + Prevenindo uma saída de plugin de ser cacheada + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->caching = true; + +function remaining_seconds($params, &$smarty) { + $remain = $params['endtime'] - time(); + if ($remain >=0) + return $remain . " second(s)"; + else + return "done"; +} + +$smarty->register_function('remaining', 'remaining_seconds', false, array('endtime')); + +if (!$smarty->is_cached('index.tpl')) { + // fetch $obj from db and assign... + $smarty->assign_by_ref('obj', $obj); +} + +$smarty->display('index.tpl'); + + +index.tpl: + +Tempo restante: {remain endtime=$obj->endtime} + +O número de segundos até que o endtime de $obj alcança alterações em cada display de página, mesmo que a página esteja em cache. Desde o atributo endtime esteja em cache o objeto somente tem que ser puxado do banco de dados quando a página está escrita para o cache mas não em requisições subsequentes da página. + + + + + + Prevenindo uma passagem inteira do template para o cache + +index.php: + +require('Smarty.class.php'); +$smarty = new Smarty; +$smarty->caching = true; + +function smarty_block_dynamic($param, $content, &$smarty) { + return $content; +} +$smarty->register_block('dynamic', 'smarty_block_dynamic', false); + +$smarty->display('index.tpl'); + + +index.tpl: + +Page created: {"0"|date_format:"%D %H:%M:%S"} + +{dynamic} + +Now is: {"0"|date_format:"%D %H:%M:%S"} + +... do other stuff ... + +{/dynamic} + + + +Quando recarregado a página que você irá notar que ambas as datas diferem. Uma é "dinâmica" e uma é "estática". Você pode fazer qualquer coisa entre as tags {dynamic}...{/dynamic} e ter certeza que isso não irá ficar em cache como o restante da página. + + + + + + Advanced Features + + Objetos + + O Smarty permite acesso a objetos do PHP através de seus templates. Há duas formas de acessá-los. + Uma forma é registrar objetos para o template, então os acessa via sintaxe similar a funções + customizáveis. A outra forma é atribuir objetos para os templates e acessá-los como se fossem + uma variável atribuída. O primeiro método tem uma sintaxe de template muito mais legal. E também + mais segura, à medida que um objeto registrado pode ser restrito a certos métodos e + propriedades. Entretanto, um objeto registrado não pode ser + posto em loop ou ser atribuido em arrays de + objetos, etc. O método que você escolher será determinado pelas suas necessidades, mas use o + primeiro método se possível para + manter um mínimo de sintaxe no template. + + + Se a segurança está habilitada, nenhum dos métodos privados ou funções podem acessados + (começando com "_"). Se um método e propriedade de um mesmo nome existir, o método será + usado. + + + Você pode restringir os métodos e propriedades que podem ser acessados listando os em um array + como o terceiro parâmetro de registração. + + + Por definição, parâmetros passados para objetos através dos templates são passados da mesma + forma que funções customizáveis os obtém. Um array associativo é passado como o primeiro parâmetro, + e o objeto smarty como o segundo. Se você quer que os parâmetros passados um de cada vez + por cada argumento como passagem de parâmetro de objeto tradicional, defina o quarto parâmetro + de registração para falso. + + + O quinto parâmetro opcional só tem efeito com format + sendo true e contém + uma lista de métods de ob que seriam tratados como + blocos. Isso significa que estes métodos + tem uma tag de fechamento no template + ({foobar->meth2}...{/foobar->meth2}) e + os parâmetros para os métodos tem a mesma sinopse como os parâmetros para + block-function-plugins: Eles pegam 4 parâmetros + $params, + $content, + &$smarty e + &$repeat e eles também comportam-se como + block-function-plugins. + + + usando um objeto registrado ou atribuído + +<?php +// O objeto + +class My_Object { + function meth1($params, &$smarty_obj) { + return "this is my meth1"; + } +} + +$myobj = new My_Object; +// registrando o objeto (será por referência) +$smarty->register_object("foobar",$myobj); +// Se você quer restringie acesso a certos métodos ou propriedades, liste-os +$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1')); +// Se você quer usar o formato de parâmetro de objeto tradicional, passe um booleano de false +$smarty->register_object("foobar",$myobj,null,false); + +// Você pode também atribuir objetos. Atribua por referência quando possível. +$smarty->assign_by_ref("myobj", $myobj); + +$smarty->display("index.tpl"); +?> + +TEMPLATE: + +{* accessa nosso objeto registrado *} +{foobar->meth1 p1="foo" p2=$bar} + +{* você pode também atribuir a saída *} +{foobar->meth1 p1="foo" p2=$bar assign="output"} +the output was {$output} + +{* acessa nosso objeto atribuído *} +{$myobj->meth1("foo",$bar)} + + + + Prefilters + + Os prefilters de Template são funções de PHP nas quais seus templates são rodados + antes de serem compilados. Isto é bom para preprocessamento de seus templates para remover + comentários indesejados, mantendo o olho no que as pessoas estão colocando nos seus templates, + etc. Prefilters podem ser ou registrado + ou carregado do diretório de plugins usando a função + load_filter() + ou pela configuração da variável + $autoload_filters. + O Smarty passará o código fonte do template como o + primeiro argumeto, e espera a função retornar + o código fonte do template resultante. + + + Usando um prefilter de template + +<?php +// Ponha isto em sua aplicação +function remove_dw_comments($tpl_source, &$smarty) +{ + return preg_replace("/<!--#.*-->/U","",$tpl_source); +} + +// registrar o prefilter +$smarty->register_prefilter("remove_dw_comments"); +$smarty->display("index.tpl"); +?> + +{* Smarty template index.tpl *} +<!--# esta linha será removida pelo prefilter --> + + + + + Postfilters + + Os postfilters de template são funções de PHP nas quais seus templates são rodados + imediatamente depois de serem compilados. Os postfilters podem ser ou + registradocarrgados do diretório de + plugins usando a função + load_filter() ou pela + variável de configuração + $autoload_filters. + O Smarty passará o código fonte do template compilado + como o primeiro argumento, e espera + a função retornar o resultado do processamento. + + + usando um postfilter de template + +<?php +// ponha isto em sua aplicação +function add_header_comment($tpl_source, &$smarty) +{ + return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source; +} + +// registra o postfilter +$smarty->register_postfilter("add_header_comment"); +$smarty->display("index.tpl"); +?> + +{* compiled Smarty template index.tpl *} +<!-- Created by Smarty! --> +{* rest of template content... *} + + + + + Output Filters (Filtros de Saída) + + Quando o template é invocado via display() ou fetch(), sua saída pode ser enviada + através de um ou mais filtros de saída. Estes diferem dos postfilters porque postfilters + operam em templates compilados antes de serem salvos para o disco, e os filtros de saída + operam na saída do template quando + ele é executado. + + + + Filtros de Saída podem ser ou + registrado ou carregado + do diretório de plugins usando a função + load_filter() ou configurando a variável + $autoload_filters. + O Smarty passará a saída como o primeiro argumento, + e espera a função retornar o resultado + do processamento. + + + usando um filtro de saída de template + +<?php +// ponha isto em sua aplicação +function protect_email($tpl_output, &$smarty) +{ + $tpl_output = + preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', + '$1%40$2', $tpl_output); + return $tpl_output; +} + +// registra o outputfilter +$smarty->register_outputfilter("protect_email"); +$smarty->display("index.tpl"); + +// agora qualquer ocorrência de um endereço de email na saída do template terá uma +// simples proteção contra spambots +?> + + + + + Função Manipuladora de Cache + + Como uma alternativa ao uso do mecanismo de caching padrão baseado em arquivo, você pode + especificar uma função de manipulação de cache customizada que será usada para ler, escrever + e limpar arquivos de cache. + + + Crie uma função em sua aplicação que o Smarty usará como um manipulador de cache. Defina o + nome dela na variável de classe + $cache_handler_func. + O Smarty agora usará esta para manipular dados no cache. O primeiro argumento é a ação, + que é um desses 'read', 'write' e 'clear'. O segundo parâmetro é o objeto do Smarty. O + terceiro parâmetro é o conteúdo que está no cache. + No write, o Smarty passa o conteúdo em + cache nestes parâmetros. No 'read', o Smarty espera sua função aceitar este parâmetro por + referência e preenche ele com os dados em cache. No 'clear', passa uma variável simulacra aqui + visto que ela não é usada. O quarto parâmetro + é o nome do arquivo de template (necessário para + ler/escrever), o quinto parâmetro é a cache_id (opcional), + e o sexto é a compile_id (opcional). + + + Note que: O último parâmetro ($exp_time)foi adicionado no Smarty-2.6.0. + + + exemplo usando MySQL como uma fonte de cache + +<?php +/* + +exemplo de uso: + +include('Smarty.class.php'); +include('mysql_cache_handler.php'); + +$smarty = new Smarty; +$smarty->cache_handler_func = 'mysql_cache_handler'; + +$smarty->display('index.tpl'); + + +mysql database is expected in this format: + +create database SMARTY_CACHE; + +create table CACHE_PAGES( +CacheID char(32) PRIMARY KEY, +CacheContents MEDIUMTEXT NOT NULL +); + +*/ + +function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null) +{ + // set db host, user and pass here + $db_host = 'localhost'; + $db_user = 'myuser'; + $db_pass = 'mypass'; + $db_name = 'SMARTY_CACHE'; + $use_gzip = false; + + // cria um cache id unico + $CacheID = md5($tpl_file.$cache_id.$compile_id); + + if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) { + $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database"); + return false; + } + mysql_select_db($db_name); + + switch ($action) { + case 'read': + // save cache to database + $results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'"); + if(!$results) { + $smarty_obj->_trigger_error_msg("cache_handler: query failed."); + } + $row = mysql_fetch_array($results,MYSQL_ASSOC); + + if($use_gzip && function_exists("gzuncompress")) { + $cache_contents = gzuncompress($row["CacheContents"]); + } else { + $cache_contents = $row["CacheContents"]; + } + $return = $results; + break; + case 'write': + // save cache to database + + if($use_gzip && function_exists("gzcompress")) { + // compress the contents for storage efficiency + $contents = gzcompress($cache_content); + } else { + $contents = $cache_content; + } + $results = mysql_query("replace into CACHE_PAGES values( + '$CacheID', + '".addslashes($contents)."') + "); + if(!$results) { + $smarty_obj->_trigger_error_msg("cache_handler: query failed."); + } + $return = $results; + break; + case 'clear': + // clear cache info + if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) { + // clear them all + $results = mysql_query("delete from CACHE_PAGES"); + } else { + $results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'"); + } + if(!$results) { + $smarty_obj->_trigger_error_msg("cache_handler: query failed."); + } + $return = $results; + break; + default: + // error, unknown action + $smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\""); + $return = false; + break; + } + mysql_close($link); + return $return; + +} + +?> + + + + + Recursos (Resources) + + Os templates podem vir de uma variedade de fontes. Quando você exibe (display) ou + busca (fetch) um template, ou inclui um template de dentro de outro template, você + fornece um tipo de recurso, seguido pelo + caminho e nome do template apropriado. Se um + recurso não é dado explicitamente o valor de + $default_resource_type é assumido. + + + Templates partindo do $template_dir + + Templates a partir do $template_dir não exigem um recurso de template, + apesar de você usar o arquivo: resource for consistancy. + Apenas forneça o caminho para o template que você quer usar em relação ao diretório + root $template_dir. + + + Usando templates partindo do $template_dir + +// from PHP script +$smarty->display("index.tpl"); +$smarty->display("admin/menu.tpl"); +$smarty->display("file:admin/menu.tpl"); // Igual ao de cima + +{* de dentro do template do Smarty *} +{include file="index.tpl"} +{include file="file:index.tpl"} {* igual ao de cima *} + + + + Templates partindo de qualquer diretório + + Os Templates de fora do $template_dir exigem o arquivo: + tipo de recurso do template, + seguido pelo caminho absoluto e nome do template. + + + usando templates partindo de qualquer diretório + +// de dentro do script PHP +$smarty->display("file:/export/templates/index.tpl"); +$smarty->display("file:/path/to/my/templates/menu.tpl"); + +{* de dentro do template do Smarty *} +{include file="file:/usr/local/share/templates/navigation.tpl"} + + + + Caminhos de arquivos do Windows + + Se você está usando uma máquina windows, caminhos de arquivos normalmente incluem uma letra + do drive (C:) no começo do nome do caminho. + Esteja certo de usar "file:" no caminho para + evitar conflitos de nome e obter os resultados desejados. + + + usando templates com caminhos de arquivo do windows + +// de dentro do script PHP +$smarty->display("file:C:/export/templates/index.tpl"); +$smarty->display("file:F:/path/to/my/templates/menu.tpl"); + +{* de dentro do template do Smarty *} +{include file="file:D:/usr/local/share/templates/navigation.tpl"} + + + + + + Templates partindo de outras fontes + + Você pode resgatar templates usando qualquer fonte possível de você acessar com PHP: banco + de dados, sockets, LDAP, e assim por diante. + Você faz isto escrevendo as funções de plugin + de recurso e registrando elas com o Smarty. + + + + Veja a seção plugins de recurso + para mais informação sobre as funções + que você deve fornecer. + + + + + Note que você pode ativar manualmente o recurso de arquivo embutido, mas não pode fornecer um recurso que busca templates a partir do sistema de arquivos de alguma outra forma registrando sob um outro nome de recurso. + file resource, but you can provide a resource + that fetches templates from the file system in some other way by + registering under another resource name. + + + + usando recursos customizáveis + +// no script PHP + +// ponha estas funções em algum lugar de sua aplicação +function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj) +{ + // faça o banco de dados chamar aqui para buscar o seu template, + // preenchendo o $tpl_source + $sql = new SQL; + $sql->query("select tpl_source + from my_table + where tpl_name='$tpl_name'"); + if ($sql->num_rows) { + $tpl_source = $sql->record['tpl_source']; + return true; + } else { + return false; + } +} + +function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) +{ + // faça o banco de dados chamar daqui para preencher a $tpl_timestamp. + $sql = new SQL; + $sql->query("select tpl_timestamp + from my_table + where tpl_name='$tpl_name'"); + if ($sql->num_rows) { + $tpl_timestamp = $sql->record['tpl_timestamp']; + return true; + } else { + return false; + } +} + +function db_get_secure($tpl_name, &$smarty_obj) +{ + // assume-se que todos os templates são seguros + return true; +} + +function db_get_trusted($tpl_name, &$smarty_obj) +{ + // não usado para templates +} + +// registrar o nome de recurso "db" +$smarty->register_resource("db", array("db_get_template", + "db_get_timestamp", + "db_get_secure", + "db_get_trusted")); + +// usando o recurso a partir do script PHP +$smarty->display("db:index.tpl"); + +{* usando o recurso de dentro do template do Smarty *} +{include file="db:/extras/navigation.tpl"} + + + + + Função Manipuladora de Template Padrão + + Você pode especificar a função que é usada para devolver o conteúdo do template no evento + em que o template não pode ser devolvido de seu recurso. Um uso disto é para criar templates + que não existem "on-the-fly" + (templates cujo conteúdo flutua muito, bastante variável). + + + usando a função manipuladora de template padrão + +<?php +// ponha esta função em algum lugar de sua aplicação + +function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj) +{ + if( $resource_type == 'file' ) { + if ( ! is_readable ( $resource_name )) { + // cria um arquivo de template, retorna o conteúdo. + $template_source = "This is a new template."; + $template_timestamp = time(); + $smarty_obj->_write_file($resource_name,$template_source); + return true; + } + } else { + // não é arquivo + return false; + } +} + +// defina a manipuladora padrão +$smarty->default_template_handler_func = 'make_template'; +?> + + + + + + + Extendendo a Smarty com Plugins + + A Versão 2.0 introduziu a arquitetura de plugin que é usada para quase todas as + funcionalidades customizáveis da Smarty. Isto inclui: + + funções + modificadores + funções de bloco + funções de compilador + prefiltros + posfiltros + filtros de saída + recursos + inserir + + Com a exceção de recursos, a compatibilidade com a forma antiga de funções de + manipulador de registro via register_* API é preservada. Se você não usou o API mas no lugar disso + modificou as variáveis de classe $custom_funcs, $custom_mods, e + outras diretamente, então você vai + precisar ajustar seus scripts para ou usar API ou converter suas + funcionalidade customizadas em plugins. + + + + Como os Plugins Funcionam + + Plugins são sempre lidos quando requisitados. Apenas os modificadores específicos, + funções, recursos, etc convocados em scripts de template serão lidos. Além disso, cada plugin + é lido apenas uma vez, mesmo se você tem várias instâncias diferentes da Smarty rodando na mesma + requisição. + + + Pre/posfiltros e filtros de saída são uma parte de um caso especial. Visto que eles não são mencionados + nos templates, eles devem ser registrados ou lidos explicitamente via funções de API antes do template + ser processado. + A ordem em que multiplos filtros do mesmo + tipo são executados dependem da ordem em que eles são registrados ou lidos. + + + O diretório de plugins + pode ser uma string contendo um caminho ou um array + contendo multiplos caminhos. Para instalar um plugin, + simplesmente coloque-o em um dos diretórios e a Smarty irá usá-lo automaticamente. + + + + + Convenções de Aparência + + Arquivos e funções de Plugin devem seguir uma convenção de aparência muito específica + a fim de ser localizada pela Smarty. + + + Os arquivos de plugin devem ser nomeados da sequinte forma: +
+ + + tipo.nome.php + + +
+
+ + Onde tipo é um dos seguintes tipos de plugin: + + function + modifier + block + compiler + prefilter + postfilter + outputfilter + resource + insert + + + + E nome seria um identificador válido (letras, + números, e underscores apenas). + + + Alguns exemplos: function.html_select_date.php, + resource.db.php, + modifier.spacify.php. + + + As funções de plugin dentro dos arquivos do plugin devem ser nomeadas da seguinte forma: +
+ + smarty_tipo_nome + +
+
+ + O significado de tipo e + nome são os mesmos de antes. + + + A Smarty mostrará mensagens de erro apropriadas se o arquivo de plugins que é necessário não é encontrado, + ou se o arquivo ou a função de plugin + estão nomeadas inadequadamente. + +
+ + + Escrevendo Plugins + + Os Plugins podem ser ou lidos pela Smarty automaticamente do sistema de arquivos ou eles podem + ser registrados no tempo de execução via uma das funções + de API register_* . Eles podem também ser + com o uso da função API unregister_* . + + + Para os plugins que são registrados no tempo de execução, o nome da(s) função(ões) de plugin + não têm que seguir a convenção de aparência. + + + Se um plugin depende de alguma funcionalidade fornecida por um outro plugin (como é o caso com alguns + plugins embutidos com a Smarty), + então a forma apropriada para ler o plugin necessário é esta: + + +require_once $smarty->_get_plugin_filepath('function', 'html_options'); + + Como uma regra geral, o objeto da Smarty é sempre passado para os plugins como o último parâmetro + (com duas exceções: modificadores não passam o objeto da Smarty em tudo e blocks passam + &$repeat depois do objeto da Smarty + para manter compatibilidade a antigas + versões da Smarty). + + + + Funções de Template + + + void smarty_function_name + array $params + object &$smarty + + + + Todos os atributos passados para as funções de template a + partir do template estão contidas em + $params como um array associativo. Ou acessa esses valores + diretamente i.e $params['start'] ou usa + extract($params) para + importá-los para dentro da tabela símbolo. + + + A saída (valor de retorno) da função será substituída no lugar da tag da função no template + (a função fetch, por exemplo). Alternativamente, a função pode simplesmente executar + alguma outra tarefa sem ter alguma saída + (a função assign). + + + Se a função precisa passar valores a algumas variáveis para o template ou utilizar alguma outra funcionalidade + fornecida com a Smarty, ela pode usar + o objeto $smarty fornecido para fazer isso. + + + Veja também: + register_function(), + unregister_function(). + + + + função de plugin com saída + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: function.eightball.php + * Type: function + * Name: eightball + * Purpose: outputs a random magic answer + * ------------------------------------------------------------- + */ +function smarty_function_eightball($params, &$smarty) +{ + $answers = array('Yes', + 'No', + 'No way', + 'Outlook not so good', + 'Ask again soon', + 'Maybe in your reality'); + + $result = array_rand($answers); + return $answers[$result]; +} +?> + + + + que pode ser usada no template da seguinte forma: + + +Pergunta: Nós sempre teremos tempo para viajar? +Resposta: {eightball}. + + + função de plugin sem saída + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: function.assign.php + * Type: function + * Name: assign + * Purpose: assign a value to a template variable + * ------------------------------------------------------------- + */ +function smarty_function_assign($params, &$smarty) +{ + extract($params); + + if (empty($var)) { + $smarty->trigger_error("assign: missing 'var' parameter"); + return; + } + + if (!in_array('value', array_keys($params))) { + $smarty->trigger_error("assign: missing 'value' parameter"); + return; + } + + $smarty->assign($var, $value); +} +?> + + + + + Modifiers + + Modificadores são funções que são aplicadas a uma variável no template antes dela ser mostrada + ou usada em algum outro contexto. + Modificadores podem ser encadeados juntos. + + + + mixed smarty_modifier_name + mixed $value + [mixed $param1, ...] + + + + O primeiro parâmetro para o plugin midificador é o valor em que o modificador é suposto + operar. O resto dos parâmetros podem ser opcionais, + dependendo de qual tipo de operação é para + ser executada. + + + O modificador deve retornar o resultado de seu processamento. + + + Veja também: + register_modifier(), + unregister_modifier(). + + + Plugin modificador simples + + Este plugin basiamente é um alias de uma + função do PHP. Ele não tem nenhum parâmetro adicional. + + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: modifier.capitalize.php + * Type: modifier + * Name: capitalize + * Purpose: capitalize words in the string + * ------------------------------------------------------------- + */ +function smarty_modifier_capitalize($string) +{ + return ucwords($string); +} +?> + + + + Plugin modificador mais complexo + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: modifier.truncate.php + * Type: modifier + * Name: truncate + * Purpose: Truncate a string to a certain length if necessary, + * optionally splitting in the middle of a word, and + * appending the $etc string. + * ------------------------------------------------------------- + */ +function smarty_modifier_truncate($string, $length = 80, $etc = '...', + $break_words = false) +{ + if ($length == 0) + return ''; + + if (strlen($string) > $length) { + $length -= strlen($etc); + $fragment = substr($string, 0, $length+1); + if ($break_words) + $fragment = substr($fragment, 0, -1); + else + $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment); + return $fragment.$etc; + } else + return $string; +} +?> + + + + Block Functions + + + void smarty_block_name + array $params + mixed $content + object &$smarty + + + + Funções de Block são funções da forma: {func} .. {/func}. Em outras palavras, ele enclausura + um bloco de template e opera no conteúdo deste bloco. Funções de Block tem precedência sobre + funções customizadas com mesmo nome, + assim, você não pode ter ambas, função customizável {func} e + função de Bloco {func} .. {/func}. + + + Por definição a implementação de sua função é chamada duas vezes pela Smarty: uma vez pela tag de abertura, + e outra pela tag de fechamento + (veja &$repeat abaixo para como mudar isto). + + + Apenas a tag de abertura da função de bloco pode ter atributos. + Todos os atributos passados para as funções de + template estão contidos em $params como um array associativo. Você pode ou acessar + esses valores diretamente, i.e. $params['start'] + ou usar extract($params) + para importá-los para dentro da tabela símbolo. Os atributos da tag de + abertura são também acessíveis a sua função + quando processando a tag de fechamento. + + + O valor da variável $content + depende de que se sua função é chamada pela tag de + fechamento ou de abertura. Caso seja a de abertura, ele será + null, se for a de fechamento + o valor será do conteúdo do bloco de template. + Note que o bloco de template já terá sido processado pela + Smarty, então tudo que você receberá é saída do template, não o template original. + + + + O parâmetro &$repeat é passado por + referência para a função de implementação + e fornece uma possibilidade para ele controlar quantas + vezes o bloco é mostrado. Por definição + $repeat é true na primeira chamada da block-function + (a tag de abertura do bloco) e false + em todas as chamadas subsequentes à função de bloco + (a tag de fechamento do bloco). Cada vez que a + implementação da função retorna com o &$repeat + sendo true, o conteúdo entre {func} .. {/func} é avaliado + e a implementação da função é chamada novamente com + o novo conteúdo do bloco no parâmetro $content. + + + + + Se você tem funções de bloco aninhadas, é possível + descobrir qual é a função de bloco pai acessando + a variável $smarty->_tag_stack. Apenas faça um var_dump() + nela e a estrutura estaria visível. + + + See also: + register_block(), + unregister_block(). + + + função de bloco + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: block.translate.php + * Type: block + * Name: translate + * Purpose: translate a block of text + * ------------------------------------------------------------- + */ +function smarty_block_translate($params, $content, &$smarty) +{ + if (isset($content)) { + $lang = $params['lang']; + // do some intelligent translation thing here with $content + return $translation; + } +} + + + + Funções Compiladoras + + Funções compiladoras só são chamadas durante a compilação do template. + Elas são úteis para injeção de código PHP ou conteúdo estático time-sensitive + dentro do template. Se há ambos, uma função + compiladora e uma função customizável + registrada sob o mesmo nome, a função compiladora tem precedência. + + + + mixed smarty_compiler_name + string $tag_arg + object &$smarty + + + + À função compiladora são passados dois parâmetros: + a tag string de argumento da tag - basicamente, tudo a partir + do nome da função até o delimitador de fechamento, e o objeto da Smarty. É suposto que retorna o código PHP + para ser injetado dentro do template compilado. + + + See also + register_compiler_function(), + unregister_compiler_function(). + + + função compiladora simples + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: compiler.tplheader.php + * Type: compiler + * Name: tplheader + * Purpose: Output header containing the source file name and + * the time it was compiled. + * ------------------------------------------------------------- + */ +function smarty_compiler_tplheader($tag_arg, &$smarty) +{ + return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';"; +} +?> + + Esta função pode ser chamada em um template da seguinte forma: + + +{* esta função é executada somente no tempo de compilação *} +{tplheader} + + O código PHP resultante no template compilado seria algo assim: + + +<php +echo 'index.tpl compiled at 2002-02-20 20:02'; +?> + + + + + Prefiltros/Posfiltros + + Plugins Prefilter e postfilter são muito similares + em conceito; onde eles diferem é na execução -- mais + precisamente no tempo de suas execuções. + + + + string smarty_prefilter_name + string $source + object &$smarty + + + + Prefilters são usados para processar o fonte do template + imediatamente antes da compilação. O primeiro parâmetro da + função de prefilter é o fonte do template, possivelmente modificado por alguns outros prefilters. O Plugin + é suposto retornar o fonte modificado. Note que este fonte não é salvo em lugar nenhum, ele só é usado para + a compilação. + + + + string smarty_postfilter_name + string $compiled + object &$smarty + + + + Postfilters são usados para processar a saída compilada do template (o código PHP) imediatamente após + a compilação ser feita e antes do template compilado ser + salvo no sistema de arquivo. O primeiro parâmetro + para a função postfilter é o código do template compilado, + possivelmente modificado por outros postfilters. + O plugin é suposto retornar a versão modificada deste código. + + + Plugin prefilter + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: prefilter.pre01.php + * Type: prefilter + * Name: pre01 + * Purpose: Convert html tags to be lowercase. + * ------------------------------------------------------------- + */ + function smarty_prefilter_pre01($source, &$smarty) + { + return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source); + } +?> + + + + Plugin postfilter + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: postfilter.post01.php + * Type: postfilter + * Name: post01 + * Purpose: Output code that lists all current template vars. + * ------------------------------------------------------------- + */ + function smarty_postfilter_post01($compiled, &$smarty) + { + $compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled; + return $compiled; + } +?> + + + + Filtros de saída + + Filtros de saída operam na saída do template, depois que o template é lido e executado, mas + antes a saída é mostrada. + + + + string smarty_outputfilter_name + string $template_output + object &$smarty + + + + O primeiro parâmetro para a função do filtro de saída é a saída do template que precisa ser processada, e + o segundo parâmetro é a instância da Smarty invocando o plugin. + O plugin deve fazer o precessamento e + retornar os resultados. + + + output filter plugin + +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: outputfilter.protect_email.php + * Type: outputfilter + * Name: protect_email + * Purpose: Converts @ sign in email addresses to %40 as + * a simple protection against spambots + * ------------------------------------------------------------- + */ + function smarty_outputfilter_protect_email($output, &$smarty) + { + return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', + '$1%40$2', $output); + } + + + + + Recursos (Resources) + + Os plugins de Recursos são como uma forma genérica de fornecer códigos fontes de template + ou componentes de script PHP para a Smarty. Alguns exemplos de recursos: + banco de dados, LDAP, memória compartilhada, sockets, e assim por diante. + + + + Há um total de 4 funções que precisam estar registradas + para cada tipo de recurso. Cada função receberá + o recurso requisitado como o primeiro parâmetro e o objeto da Smarty como o último parâmetro. O resto + dos parâmetros dependem da função. + + + + + bool smarty_resource_name_source + string $rsrc_name + string &$source + object &$smarty + + + bool smarty_resource_name_timestamp + string $rsrc_name + int &$timestamp + object &$smarty + + + bool smarty_resource_name_secure + string $rsrc_name + object &$smarty + + + bool smarty_resource_name_trusted + string $rsrc_name + object &$smarty + + + + + A primeira função deve devolver o recurso. Seu segundo parâmetro é uma variável passada por + referência onde o resultado seria armazenado. + A função deve retornar true se + ela está apta a devolver com sucesso o recurso e + caso contrário retorna false. + + + + A segunda função deve devolver a última modificação do + recurso requisitado (como um timestamp Unix). + O segundo parâmetro é uma variável passada por referência onde o timestamp seria armazenado. + A função deve retornar true + se o timestamp poderia ser determinado com sucesso, + e caso contrário retornaria false. + + + + A terceira função deve retornar true ou + false, dependendo do recurso requisitado + está seguro ou não. Esta função é usada + apenas para recursos de template mas ainda assim seria definida. + + + + A quarta função deve retornar true + ou false, dependendo + do recurso requisitado ser confiável ou não. + Esta função é usada apenas para componentes de + script PHP requisitados pelas tags include_php ou + insert com o atributo src. + Entretanto, ela ainda assim mesmo seria definida para os recursos de template. + + + Veja também: + register_resource(), + unregister_resource(). + + + Plugin resource (recurso) + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: resource.db.php + * Type: resource + * Name: db + * Purpose: Fetches templates from a database + * ------------------------------------------------------------- + */ +function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty) +{ + // do database call here to fetch your template, + // populating $tpl_source + $sql = new SQL; + $sql->query("select tpl_source + from my_table + where tpl_name='$tpl_name'"); + if ($sql->num_rows) { + $tpl_source = $sql->record['tpl_source']; + return true; + } else { + return false; + } +} + +function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty) +{ + // faz o banco de dados chamar aqui para preencher $tpl_timestamp. + $sql = new SQL; + $sql->query("select tpl_timestamp + from my_table + where tpl_name='$tpl_name'"); + if ($sql->num_rows) { + $tpl_timestamp = $sql->record['tpl_timestamp']; + return true; + } else { + return false; + } +} + +function smarty_resource_db_secure($tpl_name, &$smarty) +{ + // assume que todos os templates são seguros + return true; +} + +function smarty_resource_db_trusted($tpl_name, &$smarty) +{ + // não usado para templates +} +?> + + + + Inserts + + Plugins Insert são usados para implementar funções que são invocadas por tags + insert + no template. + + + + string smarty_insert_name + array $params + object &$smarty + + + + O primeiro parâmetro para a função é um array + associativo de atributos passados para o + insert. Ou acessa esses valores diretamente, + i.e. $params['start'] ou usa + extract($params) para importá-los para dentro da tabela símbolo. + + + A função insert deve retornar o + resultado que será substituído no lugar da tag + insert no template. + + + Plugin insert + +<?php +/* + * Smarty plugin + * ------------------------------------------------------------- + * File: insert.time.php + * Type: time + * Name: time + * Purpose: Inserts current date/time according to format + * ------------------------------------------------------------- + */ +function smarty_insert_time($params, &$smarty) +{ + if (empty($params['format'])) { + $smarty->trigger_error("insert time: missing 'format' parameter"); + return; + } + + $datetime = strftime($params['format']); + return $datetime; +} +?> + + +
+