Andreas Korthaus: Autsch, Kommando zurück

Beitrag lesen

Hi Romy!

äh, das gibt es ja schon im PEAR-Paket, habe ich gerade bemerkt.

Ja? AFAIK hat das nichts mit PEAR zu tun?!

Also einbinden klappt, aber wo legt man die tpl-Dateien ab und wie sagt man dem Script, wo es suchen soll.

Das ist Deine Sache. Ich würde hier keinen Pfad angeben, sondern nur den Dateinamen, udn den Pfad vorher allgemein konfigurieren, da gibt es 2 Möglichkeiten:

$tpl->display("template/main.tpl"); klappt nicht, obwohl die Datei sich dort befindet.

Im Manual stehen dazu ja Beispiele:

// Smarty laden
require('Smarty.class.php');

$smarty = new Smarty;

$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';

$smarty->assign('name','Ned');

$smarty->display('index.tpl');

So würde ich das auch machen. config_dir und cache_dir brauchst Du nicht wirklich, es sei denn Du arbeitest viel mit samrty Konfiguratiuonsdateien oder lässt die PHP Scripte als HTML cachen.

Das template_dir ist das Verzeichnsi wo die Templates liegen, compile_dir ist das Verzeichnis wo Smarty die "kompilierten" Scritpe speichert, das geht aber voll automatisch, musst nur sagen wo das gespeichert werden soll.

Das ganze kannst Du auch vereinfachen indem Du Dir eien eigene Klasse erstelst die die Smarty-Klasse erweitert, dann kannst Du immer Deien eigene Klasse einbinden, die die Konfiguration automatisch durchführt, siehe: http://smarty.php.net/manual/de/installing.smarty.extended.php

Die Einstellungen die Du so vornehmen kannst sind folgende: http://smarty.php.net/manual/de/api.variables.php

Muss ich die eigentlich so nennen, oder darf die Datei auch ne andere Endung haben?

Klar, nenn die so wie Du willst.

Könnte dieser Fehler
Warning: Smarty error: unable to read template resource: "template/main.tpl" in C:\wampp2\php\pear\Smarty\libs\Smarty.class.php on line 1042

auch bedeuten, dass in der main.tpl ein Fehler ist?

Das bedeutet dass er das Template nicht lessen kann. Bei Windows wird das heißen dass da was am Pfad nicht stimmt. Zur Not gib mal testweise den kompletten Pfad an.

Und versuche es mal mit

require_once ("C:\wampp2\php\pear\Smarty\libs\Smarty.class.php");
$tpl = new Smarty;
$tpl->debugging = TRUE;
$tpl->template_dir = "C:\wampp2\htdocs\templates";
$tpl->display("main.tpl");

$tpl->template_dir musst Du ggfs. anpassen, bedenke dass man templates nicht öffentlich über den Webserver zugänglich aufbewahren sollte, sondern außerhalb des doc-root.

Evtl. musst Du noch das compile_dir definieren, also lege z.B. ein Verzeichnis

C:\wampp2\includes\templates_c

an, dann musst Du obiges Script noch wie folgt anpassen:

require_once ("C:\wampp2\php\pear\Smarty\libs\Smarty.class.php");
$tpl = new Smarty;
$tpl->debugging = TRUE;
$tpl->template_dir = "C:\wampp2\htdocs\templates";
$tpl->compile_dir = "C:\wampp2\includes\templates_c";
$tpl->display("main.tpl");

Wenn Du das dann mit dr 2. Variante machst, siehe link, dann sieht das etwas so aus:

setup.php
// Smarty Library Dateien laden
require('Smarty.class.php');

class Smarty_GuestBook extends Smarty {
    function Smarty_GuestBook() {

// Konstruktor. Diese Werte werden für jede Instanz automatisch gesetzt
        $this->Smarty();
        $this->debugging = TRUE;
        $this->template_dir = "C:\wampp2\htdocs\templates";
        $this->compile_dir = "C:\wampp2\includes\templates_c";
    }
}

main.php:
require('setup.php');
$tpl = new Smarty_GuestBook;
$tpl->assign('name','Ned');
$tpl->display('main.tpl');

So in etwa. Ist am Anfang alles etwas verwirrend, aber wie gesagt, wenn man sich dran gewöhnt hat ist es wirklich hilfreich.

Viele Grüße
Andreas