Changes between Initial Version and Version 1 of WF/ExtendendoaSmartycomPlugins


Ignore:
Timestamp:
07/24/07 15:01:39 (17 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/ExtendendoaSmartycomPlugins

    v1 v1  
     1 A Versão 2.0 introduziu a arquitetura de plugin que é usada para quase todas as funcionalidades customizáveis da Smarty. Isto inclui: 
     2  
     3 
     4 * funções 
     5 
     6 * modificadores 
     7 
     8 * funções de bloco 
     9 
     10 * funções de compilador 
     11 
     12 * prefiltros 
     13 
     14 * posfiltros 
     15 
     16 * filtros de saída 
     17 
     18 * recursos 
     19 
     20 * inserir 
     21 
     22 
     23 
     24Com 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. 
     25 
     26 
     27 
     28= Como os Plugins Funcionam = 
     29 
     30---- 
     31 
     32Plugins 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. 
     33 
     34 
     35 
     36Pre/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. 
     37 
     38 
     39 
     40O 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.  
     41 
     42 
     43 
     44= Convenções de Aparência = 
     45 
     46---- 
     47 
     48Arquivos e funções de Plugin devem seguir uma convenção de aparência muito específica a fim de ser localizada pela Smarty. 
     49 
     50 
     51 
     52Os arquivos de plugin devem ser nomeados da sequinte forma: 
     53 
     54 
     55 
     56    tipo.nome.php  
     57 
     58 
     59 
     60Onde tipo é um dos seguintes tipos de plugin: 
     61 
     62 
     63 
     64 * function 
     65 
     66 * modifier 
     67 
     68 * block 
     69 
     70 * compiler 
     71 
     72 * prefilter 
     73 
     74 * postfilter 
     75 
     76 * outputfilter 
     77 
     78 * resource 
     79 
     80 * insert 
     81 
     82 
     83 
     84E nome seria um identificador válido (letras, números, e underscores apenas). 
     85 
     86 
     87 
     88Alguns exemplos: function.html_select_date.php, resource.db.php, modifier.spacify.php. 
     89 
     90 
     91 
     92As funções de plugin dentro dos arquivos do plugin devem ser nomeadas da seguinte forma: 
     93 
     94 
     95 
     96    smarty_tipo_nome()  
     97 
     98 
     99 
     100O significado de tipo e nome são os mesmos de antes. 
     101 
     102 
     103 
     104A 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. 
     105 
     106 
     107 
     108= Escrevendo Plugins = 
     109 
     110---- 
     111 
     112Os 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_* . 
     113 
     114 
     115 
     116Para 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. 
     117 
     118 
     119 
     120Se 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: 
     121 
     122 
     123 
     124{{{  
     125 
     126require_once $smarty->_get_plugin_filepath('function', 'html_options'); 
     127 
     128}}} 
     129 
     130 
     131 
     132Como 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).  
     133 
     134 
     135 
     136= Funções de Template = 
     137 
     138---- 
     139 
     140void smarty_function_name (array $params, object &$smarty) 
     141 
     142 
     143 
     144Todos 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. 
     145 
     146 
     147 
     148A 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()). 
     149 
     150 
     151 
     152Se 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. 
     153 
     154 
     155 
     156Veja também: register_function(), unregister_function(). 
     157 
     158 
     159 
     160Exemplo 16-1. função de plugin com saída 
     161 
     162{{{ 
     163 
     164 
     165 
     166<?php 
     167 
     168/* 
     169 
     170 * Smarty plugin 
     171 
     172 * ------------------------------------------------------------- 
     173 
     174 * File:     function.eightball.php 
     175 
     176 * Type:     function 
     177 
     178 * Name:     eightball 
     179 
     180 * Purpose:  outputs a random magic answer 
     181 
     182 * ------------------------------------------------------------- 
     183 
     184 */ 
     185 
     186function smarty_function_eightball($params, &$smarty) 
     187 
     188{ 
     189 
     190    $answers = array('Yes', 
     191 
     192                     'No', 
     193 
     194                     'No way', 
     195 
     196                     'Outlook not so good', 
     197 
     198                     'Ask again soon', 
     199 
     200                     'Maybe in your reality'); 
     201 
     202 
     203 
     204    $result = array_rand($answers); 
     205 
     206    return $answers[$result]; 
     207 
     208} 
     209 
     210?> 
     211 
     212 
     213 
     214que pode ser usada no template da seguinte forma: 
     215 
     216 
     217 
     218Pergunta: Nós sempre teremos tempo para viajar? 
     219 
     220Resposta: {eightball}. 
     221 
     222 
     223 
     224Exemplo 16-2. função de plugin sem saída 
     225 
     226 
     227 
     228<?php 
     229 
     230/* 
     231 
     232 * Smarty plugin 
     233 
     234 * ------------------------------------------------------------- 
     235 
     236 * File:     function.assign.php 
     237 
     238 * Type:     function 
     239 
     240 * Name:     assign 
     241 
     242 * Purpose:  assign a value to a template variable 
     243 
     244 * ------------------------------------------------------------- 
     245 
     246 */ 
     247 
     248function smarty_function_assign($params, &$smarty) 
     249 
     250{ 
     251 
     252    extract($params); 
     253 
     254 
     255 
     256    if (empty($var)) { 
     257 
     258        $smarty->trigger_error("assign: missing 'var' parameter"); 
     259 
     260        return; 
     261 
     262    } 
     263 
     264 
     265 
     266    if (!in_array('value', array_keys($params))) { 
     267 
     268        $smarty->trigger_error("assign: missing 'value' parameter"); 
     269 
     270        return; 
     271 
     272    } 
     273 
     274 
     275 
     276    $smarty->assign($var, $value); 
     277 
     278} 
     279 
     280?> 
     281 
     282}}} 
     283 
     284 
     285 
     286= Modificadores = 
     287 
     288---- 
     289 
     290Modificadores 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. 
     291 
     292 
     293 
     294{{{ 
     295 
     296mixed smarty_modifier_name (mixed $value, [mixed $param1, ...]) 
     297 
     298}}} 
     299 
     300 
     301 
     302O 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. 
     303 
     304 
     305 
     306O modificador deve retornar o resultado de seu processamento. 
     307 
     308 
     309 
     310Veja também: register_modifier(), unregister_modifier(). 
     311 
     312 
     313 
     314Exemplo 16-3. Plugin modificador simples 
     315 
     316 
     317 
     318Este plugin basiamente é um alias de uma função do PHP. Ele não tem nenhum parâmetro adicional. 
     319 
     320 
     321 
     322{{{ 
     323 
     324<?php 
     325 
     326/* 
     327 
     328 * Smarty plugin 
     329 
     330 * ------------------------------------------------------------- 
     331 
     332 * File:     modifier.capitalize.php 
     333 
     334 * Type:     modifier 
     335 
     336 * Name:     capitalize 
     337 
     338 * Purpose:  capitalize words in the string 
     339 
     340 * ------------------------------------------------------------- 
     341 
     342 */ 
     343 
     344function smarty_modifier_capitalize($string) 
     345 
     346{ 
     347 
     348    return ucwords($string); 
     349 
     350} 
     351 
     352?> 
     353 
     354}}} 
     355 
     356Exemplo 16-4. Plugin modificador mais complexo 
     357 
     358{{{ 
     359 
     360<?php 
     361 
     362/* 
     363 
     364 * Smarty plugin 
     365 
     366 * ------------------------------------------------------------- 
     367 
     368 * File:     modifier.truncate.php 
     369 
     370 * Type:     modifier 
     371 
     372 * Name:     truncate 
     373 
     374 * Purpose:  Truncate a string to a certain length if necessary, 
     375 
     376 *           optionally splitting in the middle of a word, and  
     377 
     378 *           appending the $etc string. 
     379 
     380 * ------------------------------------------------------------- 
     381 
     382 */ 
     383 
     384function smarty_modifier_truncate($string, $length = 80, $etc = '...', 
     385 
     386                                  $break_words = false) 
     387 
     388{ 
     389 
     390    if ($length == 0) 
     391 
     392        return ''; 
     393 
     394 
     395 
     396    if (strlen($string) > $length) { 
     397 
     398        $length -= strlen($etc); 
     399 
     400        $fragment = substr($string, 0, $length+1); 
     401 
     402        if ($break_words) 
     403 
     404            $fragment = substr($fragment, 0, -1); 
     405 
     406        else 
     407 
     408            $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment); 
     409 
     410        return $fragment.$etc; 
     411 
     412    } else 
     413 
     414        return $string; 
     415 
     416} 
     417 
     418?> 
     419 
     420}}} 
     421 
     422 
     423 
     424= Block Functions = 
     425 
     426---- 
     427 
     428void smarty_block_name (array $params, mixed $content, object &$smarty) 
     429 
     430 
     431 
     432Funçõ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}. 
     433 
     434 
     435 
     436Por 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). 
     437 
     438 
     439 
     440Apenas 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. 
     441 
     442 
     443 
     444O 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. 
     445 
     446 
     447 
     448O 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. 
     449 
     450 
     451 
     452Se 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. 
     453 
     454 
     455 
     456See also: register_block(), unregister_block(). 
     457 
     458 
     459 
     460Exemplo 16-5. função de bloco 
     461 
     462{{{ 
     463 
     464<?php 
     465 
     466/* 
     467 
     468 * Smarty plugin 
     469 
     470 * ------------------------------------------------------------- 
     471 
     472 * File:     block.translate.php 
     473 
     474 * Type:     block 
     475 
     476 * Name:     translate 
     477 
     478 * Purpose:  translate a block of text 
     479 
     480 * ------------------------------------------------------------- 
     481 
     482 */ 
     483 
     484function smarty_block_translate($params, $content, &$smarty) 
     485 
     486{ 
     487 
     488    if (isset($content)) { 
     489 
     490        $lang = $params['lang']; 
     491 
     492        // do some intelligent translation thing here with $content 
     493 
     494        return $translation; 
     495 
     496    } 
     497 
     498} 
     499 
     500}}} 
     501 
     502 
     503 
     504= Funções Compiladoras = 
     505 
     506---- 
     507 
     508Funçõ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. 
     509 
     510{{{ 
     511 
     512mixed smarty_compiler_name (string $tag_arg, object &$smarty) 
     513 
     514}}} 
     515 
     516À 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. 
     517 
     518 
     519 
     520See also register_compiler_function(), unregister_compiler_function(). 
     521 
     522 
     523 
     524Exemplo 16-6. função compiladora simples 
     525 
     526{{{ 
     527 
     528<?php 
     529 
     530/* 
     531 
     532 * Smarty plugin 
     533 
     534 * ------------------------------------------------------------- 
     535 
     536 * File:     compiler.tplheader.php 
     537 
     538 * Type:     compiler 
     539 
     540 * Name:     tplheader 
     541 
     542 * Purpose:  Output header containing the source file name and 
     543 
     544 *           the time it was compiled. 
     545 
     546 * ------------------------------------------------------------- 
     547 
     548 */ 
     549 
     550function smarty_compiler_tplheader($tag_arg, &$smarty) 
     551 
     552{ 
     553 
     554    return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';"; 
     555 
     556} 
     557 
     558?> 
     559 
     560}}} 
     561 
     562Esta função pode ser chamada em um template da seguinte forma: 
     563 
     564{{{ 
     565 
     566{* esta função é executada somente no tempo de compilação *} 
     567 
     568{tplheader} 
     569 
     570}}} 
     571 
     572O código PHP resultante no template compilado seria algo assim: 
     573 
     574{{{ 
     575 
     576<php 
     577 
     578echo 'index.tpl compiled at 2002-02-20 20:02'; 
     579 
     580?> 
     581 
     582}}} 
     583 
     584 
     585 
     586= Prefiltros/Posfiltros = 
     587 
     588---- 
     589 
     590Plugins Prefilter e postfilter são muito similares em conceito; onde eles diferem é na execução -- mais precisamente no tempo de suas execuções. 
     591 
     592 
     593 
     594string smarty_prefilter_name (string $source, object &$smarty) 
     595 
     596 
     597 
     598Prefilters 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. 
     599 
     600 
     601 
     602string smarty_postfilter_name (string $compiled, object &$smarty) 
     603 
     604 
     605 
     606Postfilters 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. 
     607 
     608 
     609 
     610Exemplo 16-7. Plugin prefilter 
     611 
     612{{{ 
     613 
     614<?php 
     615 
     616/* 
     617 
     618 * Smarty plugin 
     619 
     620 * ------------------------------------------------------------- 
     621 
     622 * File:     prefilter.pre01.php 
     623 
     624 * Type:     prefilter 
     625 
     626 * Name:     pre01 
     627 
     628 * Purpose:  Convert html tags to be lowercase. 
     629 
     630 * ------------------------------------------------------------- 
     631 
     632 */ 
     633 
     634 function smarty_prefilter_pre01($source, &$smarty) 
     635 
     636 { 
     637 
     638     return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source); 
     639 
     640 } 
     641 
     642?> 
     643 
     644}}} 
     645 
     646Exemplo 16-8. Plugin postfilter 
     647 
     648{{{ 
     649 
     650<?php 
     651 
     652/* 
     653 
     654 * Smarty plugin 
     655 
     656 * ------------------------------------------------------------- 
     657 
     658 * File:     postfilter.post01.php 
     659 
     660 * Type:     postfilter 
     661 
     662 * Name:     post01 
     663 
     664 * Purpose:  Output code that lists all current template vars. 
     665 
     666 * ------------------------------------------------------------- 
     667 
     668 */ 
     669 
     670 function smarty_postfilter_post01($compiled, &$smarty) 
     671 
     672 { 
     673 
     674     $compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled; 
     675 
     676     return $compiled; 
     677 
     678 } 
     679 
     680?> 
     681 
     682}}} 
     683 
     684 
     685 
     686= Filtros de saída = 
     687 
     688---- 
     689 
     690Filtros de saída operam na saída do template, depois que o template é lido e executado, mas antes a saída é mostrada. 
     691 
     692 
     693 
     694string smarty_outputfilter_name (string $template_output, object &$smarty) 
     695 
     696 
     697 
     698O 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. 
     699 
     700 
     701 
     702Exemplo 16-9. output filter plugin 
     703 
     704{{{ 
     705 
     706/* 
     707 
     708 * Smarty plugin 
     709 
     710 * ------------------------------------------------------------- 
     711 
     712 * File:     outputfilter.protect_email.php 
     713 
     714 * Type:     outputfilter 
     715 
     716 * Name:     protect_email 
     717 
     718 * Purpose:  Converts @ sign in email addresses to %40 as  
     719 
     720 *           a simple protection against spambots 
     721 
     722 * ------------------------------------------------------------- 
     723 
     724 */ 
     725 
     726 function smarty_outputfilter_protect_email($output, &$smarty) 
     727 
     728 { 
     729 
     730     return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', 
     731 
     732                         '$1%40$2', $output); 
     733 
     734 } 
     735 
     736}}} 
     737 
     738 
     739 
     740= Recursos (Resources) = 
     741 
     742---- 
     743 
     744Os 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. 
     745 
     746 
     747 
     748Há 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. 
     749 
     750{{{ 
     751 
     752bool smarty_resource_name_source (string $rsrc_name, string &$source, object &$smarty) 
     753 
     754 
     755 
     756bool smarty_resource_name_timestamp (string $rsrc_name, int &$timestamp, object &$smarty) 
     757 
     758 
     759 
     760bool smarty_resource_name_secure (string $rsrc_name, object &$smarty) 
     761 
     762 
     763 
     764bool smarty_resource_name_trusted (string $rsrc_name, object &$smarty) 
     765 
     766}}} 
     767 
     768A 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. 
     769 
     770 
     771 
     772A 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. 
     773 
     774 
     775 
     776A 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. 
     777 
     778 
     779 
     780A 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. 
     781 
     782 
     783 
     784Veja também: register_resource(), unregister_resource(). 
     785 
     786 
     787 
     788Exemplo 16-10. Plugin resource (recurso) 
     789 
     790{{{ 
     791 
     792<?php 
     793 
     794/* 
     795 
     796 * Smarty plugin 
     797 
     798 * -------------------------------------------------------------  
     799 
     800 * File:     resource.db.php 
     801 
     802 * Type:     resource 
     803 
     804 * Name:     db 
     805 
     806 * Purpose:  Fetches templates from a database 
     807 
     808 * ------------------------------------------------------------- 
     809 
     810 */ 
     811 
     812function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty) 
     813 
     814{ 
     815 
     816    // do database call here to fetch your template, 
     817 
     818    // populating $tpl_source 
     819 
     820    $sql = new SQL; 
     821 
     822    $sql->query("select tpl_source 
     823 
     824                   from my_table 
     825 
     826                  where tpl_name='$tpl_name'"); 
     827 
     828    if ($sql->num_rows) { 
     829 
     830        $tpl_source = $sql->record['tpl_source']; 
     831 
     832        return true; 
     833 
     834    } else { 
     835 
     836        return false; 
     837 
     838    } 
     839 
     840} 
     841 
     842 
     843 
     844function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty) 
     845 
     846{ 
     847 
     848    // faz o banco de dados chamar aqui para preencher $tpl_timestamp. 
     849 
     850    $sql = new SQL; 
     851 
     852    $sql->query("select tpl_timestamp 
     853 
     854                   from my_table 
     855 
     856                  where tpl_name='$tpl_name'"); 
     857 
     858    if ($sql->num_rows) { 
     859 
     860        $tpl_timestamp = $sql->record['tpl_timestamp']; 
     861 
     862        return true; 
     863 
     864    } else { 
     865 
     866        return false; 
     867 
     868    } 
     869 
     870} 
     871 
     872 
     873 
     874function smarty_resource_db_secure($tpl_name, &$smarty) 
     875 
     876{ 
     877 
     878    // assume que todos os templates são seguros 
     879 
     880    return true; 
     881 
     882} 
     883 
     884 
     885 
     886function smarty_resource_db_trusted($tpl_name, &$smarty) 
     887 
     888{ 
     889 
     890    // não usado para templates 
     891 
     892} 
     893 
     894?> 
     895 
     896}}} 
     897 
     898 
     899 
     900= Inserts = 
     901 
     902---- 
     903 
     904Plugins Insert são usados para implementar funções que são invocadas por tags insert no template. 
     905 
     906 
     907 
     908string smarty_insert_name (array $params, object &$smarty) 
     909 
     910 
     911 
     912O 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. 
     913 
     914 
     915 
     916A função insert deve retornar o resultado que será substituído no lugar da tag insert no template. 
     917 
     918 
     919 
     920Exemplo 16-11. Plugin insert 
     921 
     922{{{ 
     923 
     924<?php 
     925 
     926/* 
     927 
     928 * Smarty plugin 
     929 
     930 * -------------------------------------------------------------  
     931 
     932 * File:     insert.time.php 
     933 
     934 * Type:     time 
     935 
     936 * Name:     time 
     937 
     938 * Purpose:  Inserts current date/time according to format 
     939 
     940 * ------------------------------------------------------------- 
     941 
     942 */ 
     943 
     944function smarty_insert_time($params, &$smarty) 
     945 
     946{ 
     947 
     948    if (empty($params['format'])) { 
     949 
     950        $smarty->trigger_error("insert time: missing 'format' parameter"); 
     951 
     952        return; 
     953 
     954    } 
     955 
     956 
     957 
     958    $datetime = strftime($params['format']); 
     959 
     960    return $datetime; 
     961 
     962} 
     963 
     964?> 
     965 
     966}}}