mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-10-31 12:21:36 +01:00 
			
		
		
		
	
		
			
	
	
		
			146 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
		
		
			
		
	
	
			146 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
|   | <?xml version="1.0" encoding="iso-8859-1"?> | |||
|  | <!-- $Revision$ --> | |||
|  |  <sect1 id="caching.cacheable"> | |||
|  |   <title>Mettere in Cache l'output dei Plugin</title> | |||
|  |   <para>  | |||
|  |    A partire dai plugin di Smarty-2.6.0 la possibilit<69> di mettere in | |||
|  |    cache il loro output pu<70> essere dichiarata nel momento in cui li si | |||
|  |    registrano. Il terzo parametro da passare a register_block, | |||
|  |    register_compiler_function e register_function si chiama | |||
|  |    <parameter>$cacheable</parameter> e per default vale true, il che | |||
|  |    equivale al comportamento dei plugin di Smarty nelle versioni | |||
|  |    precedenti alla 2.6.0 | |||
|  |   </para> | |||
|  | 
 | |||
|  |   <para> | |||
|  |    Quando si registra un plugin con $cacheable=false il plugin viene | |||
|  |    chiamato tutte le volte che la pagina viene visualizzata, anche se | |||
|  |    la pagina stessa arriva dalla cache. La funzione del plugin funziona | |||
|  |    cos<6F> un poco come una funzione <link linkend="plugins.inserts">insert</link>. | |||
|  |   </para> | |||
|  | 
 | |||
|  |   <para> | |||
|  |    Al contrario di ci<63> che avviene in <link  | |||
|  |    linkend="language.function.insert">{insert}</link>, gli attributi passati | |||
|  |    al plugin non vengono, per default, messi in cache. E' possibile per<65> | |||
|  |    dichiarare che devono essere messi in cache con il quarto parametro | |||
|  |    <parameter>$cache_attrs</parameter>. <parameter>$cache_attrs</parameter> | |||
|  |    <20> un array di nomi di attributi che devono essere messi in cache, in | |||
|  |    modo che la funzione del plugin ottenga il valore dell'attributo qual | |||
|  |    era al momento in cui la pagina <20> stata salvata sulla cache ogni volta | |||
|  |    che la cache stessa viene riletta. | |||
|  |   </para> | |||
|  | 
 | |||
|  |   <example> | |||
|  |    <title>Evitare che l'output di un plugin vada in cache</title> | |||
|  |    <programlisting role="php"> | |||
|  | <![CDATA[ | |||
|  | <?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')) { | |||
|  |     // leggiamo $obj dal db e lo assegnamo al template... | |||
|  |     $smarty->assign_by_ref('obj', $obj); | |||
|  | } | |||
|  | 
 | |||
|  | $smarty->display('index.tpl'); | |||
|  | ?> | |||
|  | ]]> | |||
|  |    </programlisting> | |||
|  |    <para> | |||
|  |     dove index.tpl <20>: | |||
|  |    </para> | |||
|  |    <programlisting> | |||
|  | <![CDATA[ | |||
|  | Time Remaining: {remain endtime=$obj->endtime} | |||
|  | ]]> | |||
|  |    </programlisting> | |||
|  |    <para> | |||
|  |     Il numero di secondi che mancano alla scadenza di $obj cambia ad | |||
|  |     ogni visualizzazione della pagina, anche se questa <20> in cache. | |||
|  |     Siccome l'attributo endtime <20> in cache, l'oggetto deve essere | |||
|  |     letto dal database solo quando la pagina viene scritta sulla cache, | |||
|  |     ma non nelle richieste successive. | |||
|  |    </para> | |||
|  |   </example> | |||
|  | 
 | |||
|  |   <example> | |||
|  |    <title>Evitare che un intero blocco di template vada in cache</title> | |||
|  |    <programlisting role="php"> | |||
|  | <![CDATA[ | |||
|  | index.php: | |||
|  | 
 | |||
|  | <?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'); | |||
|  | ?> | |||
|  | ]]> | |||
|  |    </programlisting> | |||
|  |    <para> | |||
|  |     dove index.tpl <20>: | |||
|  |    </para> | |||
|  |    <programlisting> | |||
|  | <![CDATA[ | |||
|  | Page created: {"0"|date_format:"%D %H:%M:%S"} | |||
|  | 
 | |||
|  | {dynamic} | |||
|  | 
 | |||
|  | Now is: {"0"|date_format:"%D %H:%M:%S"} | |||
|  | 
 | |||
|  | ... qui facciamo altre cose ... | |||
|  | 
 | |||
|  | {/dynamic} | |||
|  | ]]> | |||
|  |    </programlisting> | |||
|  |   </example> | |||
|  |    | |||
|  |   <para> | |||
|  |    Quando ricaricate lapagina vedrete che le due date sono diverse. Una | |||
|  |    <20> "dinamica", l'altra <20> "statica". Potete mettere qualsiasi cosa fra | |||
|  |    {dynamic} e {/dynamic}, sicuri che non verr<72> messa in cache col resto | |||
|  |    della pagina. | |||
|  |   </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 | |||
|  | --> |