phpbar.de logo

Mailinglisten-Archive

[php] Smarty und Caching

[php] Smarty und Caching

Andreas Ahlenstorf lists at ahlenstorf.ch
Mit Jun 30 10:07:13 CEST 2004


Hallo,

Ralf Eggert schrieb am Dienstag, 29. Juni 2004 um 23:46:

> danke für deinen Hinweis, auch wenn ich nicht so ganz schlau daraus
> werde. :-(

http://smarty.php.net/manual/de/caching.cacheable.php

> 1. Geht das überhaupt?

test.php
========

<?php

$foobar = new foobar;
$foobar->startSmarty();
$foobar->displayPage();

class foobar {

        var $smarty = null;
        
function startSmarty()
{
        define(SMARTY_DIR, dirname(__FILE__).'/smarty/');
        require(SMARTY_DIR. 'Smarty.class.php');        

        $this->smarty = new Smarty;
        $this->smarty->template_dir = dirname(__FILE__).'/templates';
        $this->smarty->compile_dir = dirname(__FILE__).'/templates_c';
        $this->smarty->config_dir = dirname(__FILE__).'/configs';
        $this->smarty->cache_dir = dirname(__FILE__).'/cache';
        $this->smarty->caching = true;
        $this->smarty->use_sub_dirs = false;

        function smarty_block_dynamic($param, $content, &$smarty) {
        return $content;
        }

        $this->smarty->register_block('dynamic', 'smarty_block_dynamic', false);
        
}

function displayPage ()
{
        $this->smarty->assign('timestamp', mktime());
        $this->smarty->display('index.tpl');
                
}

}
?>

index.tpl
=========
das bleibt immer gleich: {$timestamp|date_format:"%H:%M:%S"}<br />

{dynamic}
das ändert sich: {$timestamp|date_format:"%H:%M:%S"}
{/dynamic}

Output index.tpl
================
das bleibt immer gleich: 09:58:57
das ändert sich: 09:59:59

index.tpl im Cache
==================
a:4:{s:8:"template";a:1:{s:9:"index.tpl";b:1;}s:9:"timestamp";i:1088582337;s:7:"expires";i:1088585937;s:13:"cache_serials";a:1:{s:61:"/www/smarty_test/templates_c/%%117^%%1172603085^index.tpl.inc";s:32:"2ce8d75eb43ddca2b424eac08c069d72";}}
das bleibt immer gleich: 09:58:57

{nocache:2ce8d75eb43ddca2b424eac08c069d72#0}

> 2. Falls nein, wie kann ich das Problem lösen, dass ich in einer global
>    deklarierten Funktion auf meine CMS Klasse zugreifen kann, wenn diese
>    Funktion keine Methode meiner CMS Klasse ist?

$foo->bar()?

> Irgendwie stehe ich total auf dem Schlauch... :-(

Ich habe es so gemacht, wie im Smarty-Handbuch: Zentrale Datei,
die Smarty lädt. Die wird einmal von einem Script per
require_once() gezogen, wenn ich das Ding in einem Objekt
brauche, wird Smarty als Referenz hineingereicht.

<?php
class display extends base
{

function displayIndex (&$smarty)
{
         $smarty->display('foo.html');
}

}
?>

<?php

require_once('smarty_user.inc.php');
$display = new display();
$display->displayIndex($smarty);

?>

Gruss,
Andreas


php::bar PHP Wiki   -   Listenarchive