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 " 
     555echo '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';"; 
     556 
     557} 
     558 
     559?> 
     560 
     561}}} 
     562 
     563Esta função pode ser chamada em um template da seguinte forma: 
     564 
     565{{{ 
     566 
     567{* esta função é executada somente no tempo de compilação *} 
     568 
     569{tplheader} 
     570 
     571}}} 
     572 
     573O código PHP resultante no template compilado seria algo assim: 
     574 
     575{{{ 
     576 
     577<php 
     578 
     579echo 'index.tpl compiled at 2002-02-20 20:02'; 
     580 
     581?> 
     582 
     583}}} 
     584 
     585 
     586 
     587= Prefiltros/Posfiltros = 
     588 
     589---- 
     590 
     591Plugins Prefilter e postfilter são muito similares em conceito; onde eles diferem é na execução -- mais precisamente no tempo de suas execuções. 
     592 
     593 
     594 
     595string smarty_prefilter_name (string $source, object &$smarty) 
     596 
     597 
     598 
     599Prefilters 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. 
     600 
     601 
     602 
     603string smarty_postfilter_name (string $compiled, object &$smarty) 
     604 
     605 
     606 
     607Postfilters 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. 
     608 
     609 
     610 
     611Exemplo 16-7. Plugin prefilter 
     612 
     613{{{ 
     614 
     615<?php 
     616 
     617/* 
     618 
     619 * Smarty plugin 
     620 
     621 * ------------------------------------------------------------- 
     622 
     623 * File:     prefilter.pre01.php 
     624 
     625 * Type:     prefilter 
     626 
     627 * Name:     pre01 
     628 
     629 * Purpose:  Convert html tags to be lowercase. 
     630 
     631 * ------------------------------------------------------------- 
     632 
     633 */ 
     634 
     635 function smarty_prefilter_pre01($source, &$smarty) 
     636 
     637 { 
     638 
     639     return preg_replace('!<(w+)[^>]+>!e', 'strtolower("$1")', $source); 
     640 
     641 } 
     642 
     643?> 
     644 
     645}}} 
     646 
     647Exemplo 16-8. Plugin postfilter 
     648 
     649{{{ 
     650 
     651<?php 
     652 
     653/* 
     654 
     655 * Smarty plugin 
     656 
     657 * ------------------------------------------------------------- 
     658 
     659 * File:     postfilter.post01.php 
     660 
     661 * Type:     postfilter 
     662 
     663 * Name:     post01 
     664 
     665 * Purpose:  Output code that lists all current template vars. 
     666 
     667 * ------------------------------------------------------------- 
     668 
     669 */ 
     670 
     671 function smarty_postfilter_post01($compiled, &$smarty) 
     672 
     673 { 
     674 
     675     $compiled = "<pre> 
     676<?php print_r($this->get_template_vars()); ?> 
     677</pre>" . $compiled; 
     678 
     679     return $compiled; 
     680 
     681 } 
     682 
     683?> 
     684 
     685}}} 
     686 
     687 
     688 
     689= Filtros de saída = 
     690 
     691---- 
     692 
     693Filtros de saída operam na saída do template, depois que o template é lido e executado, mas antes a saída é mostrada. 
     694 
     695 
     696 
     697string smarty_outputfilter_name (string $template_output, object &$smarty) 
     698 
     699 
     700 
     701O 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. 
     702 
     703 
     704 
     705Exemplo 16-9. output filter plugin 
     706 
     707{{{ 
     708 
     709/* 
     710 
     711 * Smarty plugin 
     712 
     713 * ------------------------------------------------------------- 
     714 
     715 * File:     outputfilter.protect_email.php 
     716 
     717 * Type:     outputfilter 
     718 
     719 * Name:     protect_email 
     720 
     721 * Purpose:  Converts @ sign in email addresses to %40 as  
     722 
     723 *           a simple protection against spambots 
     724 
     725 * ------------------------------------------------------------- 
     726 
     727 */ 
     728 
     729 function smarty_outputfilter_protect_email($output, &$smarty) 
     730 
     731 { 
     732 
     733     return preg_replace('!(S+)@([a-zA-Z0-9.-]+.([a-zA-Z]{2,3}|[0-9]{1,3}))!', 
     734 
     735                         '$1%40$2', $output); 
     736 
     737 } 
     738 
     739}}} 
     740 
     741 
     742 
     743= Recursos (Resources) = 
     744 
     745---- 
     746 
     747Os 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. 
     748 
     749 
     750 
     751Há 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. 
     752 
     753{{{ 
     754 
     755bool smarty_resource_name_source (string $rsrc_name, string &$source, object &$smarty) 
     756 
     757 
     758 
     759bool smarty_resource_name_timestamp (string $rsrc_name, int &$timestamp, object &$smarty) 
     760 
     761 
     762 
     763bool smarty_resource_name_secure (string $rsrc_name, object &$smarty) 
     764 
     765 
     766 
     767bool smarty_resource_name_trusted (string $rsrc_name, object &$smarty) 
     768 
     769}}} 
     770 
     771A 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. 
     772 
     773 
     774 
     775A 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. 
     776 
     777 
     778 
     779A 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. 
     780 
     781 
     782 
     783A 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. 
     784 
     785 
     786 
     787Veja também: register_resource(), unregister_resource(). 
     788 
     789 
     790 
     791Exemplo 16-10. Plugin resource (recurso) 
     792 
     793{{{ 
     794 
     795<?php 
     796 
     797/* 
     798 
     799 * Smarty plugin 
     800 
     801 * -------------------------------------------------------------  
     802 
     803 * File:     resource.db.php 
     804 
     805 * Type:     resource 
     806 
     807 * Name:     db 
     808 
     809 * Purpose:  Fetches templates from a database 
     810 
     811 * ------------------------------------------------------------- 
     812 
     813 */ 
     814 
     815function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty) 
     816 
     817{ 
     818 
     819    // do database call here to fetch your template, 
     820 
     821    // populating $tpl_source 
     822 
     823    $sql = new SQL; 
     824 
     825    $sql->query("select tpl_source 
     826 
     827                   from my_table 
     828 
     829                  where tpl_name='$tpl_name'"); 
     830 
     831    if ($sql->num_rows) { 
     832 
     833        $tpl_source = $sql->record['tpl_source']; 
     834 
     835        return true; 
     836 
     837    } else { 
     838 
     839        return false; 
     840 
     841    } 
     842 
     843} 
     844 
     845 
     846 
     847function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty) 
     848 
     849{ 
     850 
     851    // faz o banco de dados chamar aqui para preencher $tpl_timestamp. 
     852 
     853    $sql = new SQL; 
     854 
     855    $sql->query("select tpl_timestamp 
     856 
     857                   from my_table 
     858 
     859                  where tpl_name='$tpl_name'"); 
     860 
     861    if ($sql->num_rows) { 
     862 
     863        $tpl_timestamp = $sql->record['tpl_timestamp']; 
     864 
     865        return true; 
     866 
     867    } else { 
     868 
     869        return false; 
     870 
     871    } 
     872 
     873} 
     874 
     875 
     876 
     877function smarty_resource_db_secure($tpl_name, &$smarty) 
     878 
     879{ 
     880 
     881    // assume que todos os templates são seguros 
     882 
     883    return true; 
     884 
     885} 
     886 
     887 
     888 
     889function smarty_resource_db_trusted($tpl_name, &$smarty) 
     890 
     891{ 
     892 
     893    // não usado para templates 
     894 
     895} 
     896 
     897?> 
     898 
     899}}} 
     900 
     901 
     902 
     903= Inserts = 
     904 
     905---- 
     906 
     907Plugins Insert são usados para implementar funções que são invocadas por tags insert no template. 
     908 
     909 
     910 
     911string smarty_insert_name (array $params, object &$smarty) 
     912 
     913 
     914 
     915O 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. 
     916 
     917 
     918 
     919A função insert deve retornar o resultado que será substituído no lugar da tag insert no template. 
     920 
     921 
     922 
     923Exemplo 16-11. Plugin insert 
     924 
     925{{{ 
     926 
     927<?php 
     928 
     929/* 
     930 
     931 * Smarty plugin 
     932 
     933 * -------------------------------------------------------------  
     934 
     935 * File:     insert.time.php 
     936 
     937 * Type:     time 
     938 
     939 * Name:     time 
     940 
     941 * Purpose:  Inserts current date/time according to format 
     942 
     943 * ------------------------------------------------------------- 
     944 
     945 */ 
     946 
     947function smarty_insert_time($params, &$smarty) 
     948 
     949{ 
     950 
     951    if (empty($params['format'])) { 
     952 
     953        $smarty->trigger_error("insert time: missing 'format' parameter"); 
     954 
     955        return; 
     956 
     957    } 
     958 
     959 
     960 
     961    $datetime = strftime($params['format']); 
     962 
     963    return $datetime; 
     964 
     965} 
     966 
     967?> 
     968 
     969}}}