Re: Force Caching of Insert-Plugins - Bug?
| From: | Thomas Schulz | Date: | Sat, 10 May 2003 20:02:07 +0000 |
| Subject: | Re: Force Caching of Insert-Plugins - Bug? | ||
| References: | 1 | Groups: | php.smarty.dev |
| Request: | Send a blank email to php-smarty-dev+get-1445@lists.php.net to get a copy of this message | ||
FYI: I solve this problem by using another smarty instance for rendering
the "staticly called inserted" insert-plugins.
Thomas Schulz schrieb in php.smarty.dev:
> I have implemented most of my application logic as insert-plugins. But
> in some cases it is not necessary to prevent them from caching and the
> insert- plugin could work like a template function.
>
> To force caching of an insert plugin I wrote a little template function
> as wrapper:
>
> function smarty_function_static($params, &$smarty)
> {
> require_once MY_PLUGIN_DIR .
> 'insert.'.$params['name'].'.php';
> $insert_function = 'smarty_insert_' . $params['name'];
> return $insert_function($params, $smarty);
> }
>
> Some samples with an insert plugin named "content".
>
> Show a content item and don't cache it (normal insert):
> {insert name="content" view="item"}
>
> Show a content list and cache the output in the template (force
> caching):
> {static name="content" view="list"}
>
> This works as espected and accelerate my application. But in sometimes
> when I use {static ...} and {insert ...} in an template, some
> insert-calls in cached templates failed with (Output of
> Smarty.class.php,v 1.392):
>
>
> Notice: Undefined index: content in d:\docroots\ectnd\sys\libs
> \Smarty.class.php on line 1845
>
> Fatal error: Call to undefined function: () in
> d:\docroots\ectnd\sys\libs \Smarty.class.php on line 1846
>
>
> This comes up in _process_cached_inserts() because there is no entry in
> $this->_plugins['insert'] for the insert-plugin.
>
> As workaround I include the plugin "manually":
>
> if (isset($this->_plugins['insert'][$name])) {
> // normal behavior
> $function_name = $this->_plugins['insert'][$name][0];
> } else {
> // workaround
> $function_name = 'smarty_insert_' . $name;
> require_once MY_PLUGIN_DIR . 'insert.' . $name . '.php';
> }
>
> But I have no idea how to solve this correct..
>
> Any other? :-)
>
> Thomas.
>
>
--
http://4bconsult.de