Files
smarty/docs/pt_BR/programmers/caching/caching-multiple-caches.xml
2004-04-13 11:47:32 +00:00

109 lines
3.5 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="caching.multiple.caches">
<title>Multiple Caches Per Page</title>
<para>
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.
</para>
<example>
<title>Passando um cache_id para display()</title>
<programlisting>
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$my_cache_id = $_GET['article_id'];
$smarty->display('index.tpl',$my_cache_id);</programlisting>
</example>
<para>
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.
</para>
<note>
<title>Notas Técnicas</title>
<para>
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!
</para>
</note>
<para>
Tenha certeza de passar o mesmo cache_id como o segundo
parâmetro para <link linkend="api.is.cached">is_cached()</link> e
<link linkend="api.clear.cache">clear_cache()</link>.
</para>
<example>
<title>Passando um cache_id para is_cached()</title>
<programlisting>
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);</programlisting>
</example>
<para>
Você pode limpar todos os caches para um cache_id em particular passando
o primeiro parâmetro null para clear_cache().
</para>
<example>
<title>Limpando todos os caches para um cache_id em particular</title>
<programlisting>
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");</programlisting>
</example>
<para>
Desta maneira, você pode "agrupar" seus
caches juntos dando-lhes o mesmo cache_id.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->