Hallo Torsten,
Dieses Projekt möchte ich jetzt in ein CMS umbauen. [...] Ich habe mich für Smarty entschieden
Da hast du was verwechselt - Smarty hat mit einem CMS (Content Management System) zu tun. Mit Smarty kannst du zwar den Code vom Design trennen - ein CMS-System ist das dann aber trotzdem noch nicht ...
Wie man diese Navigation in Smarty macht würde ich mich über etwas Beispiel-Code sehr freuen.
ich schreibe jetzt einfach mal wie ich das mache :-)
Die Datei die aufgerufen wird, wenn man example.com aufruft enthält lediglich diesen Code:
<?php
$seite = 1;
$tmpl->assign('inh',$tmpl->fetch('tmpl.0.index.inc.html'));
$tmpl->assign('titel','Titel der Seite');
?>
hier wird also lediglich eine Seitennummer gesetzt (ist für die Navigation nötig, s.u.), der Inhalt der Seite und der Titel der Seite in eine Template-Variabel geschrieben. Die die Generierung des Inhaltes kann natürlich auch wesentlich aufwendiger sein, wenn z.B. Formulare verarbeitet werden o.ä. Für den Titel habe ich inzwischen auch schon eine Funktion für Smarty geschrieben die den Titel anhand der Seitennummer generiert.
Bevor dieser Code ausgeführt wird, wird aber noch die Datei die mit hilfe von auto_prepend_file geladen wird:
<?php
error_reporting(E_ALL);
require_once('conf/pfade.inc.php');
require_once(SMARTY_PFAD.'Smarty.class.php');
require_once('func/prueferechte.inc.php');
$tmpl = new Smarty;
$tmpl->template_dir = TMPL_DIR;
$tmpl->compile_dir = TMPLC_DIR;
$tmpl->[link:http://smarty.php.net/manual/de/api.register.function.php@title=register_function]('pruefeRechte','pruefeRechte');
?>
hier werden also die Einstellungen und Smarty geladen, sowie Smarty "gestartet". Außerdem lassen sich hier auch Funktionen in Smarty übergeben oder eine Datenbankverbindung öffnen.
Nach dem Abarbeiten des eigentlichen Scriptes wird dann noch die in auto_append_file angegebene Datei ausgeführt:
<?php
$tmpl->assign('s',$seite);
$inh = $tmpl->fetch('tmpl.inc.html');
echo $inh;
?>
Hier wird im Prinzip also lediglich Seitenzahl an Smarty übergeben und as Template tmpl.inc.html eingelesen. Dieses Template sieht so aus:
<!DOCTYPE [...]>
<html>
<head>
<title>{$titel}</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link rel="shortcut icon" href="/src/img/favicon.ico" />
<style type="text/css">
[code lang=css]@import url("/src/css/screen.css");
{$css_inline}
</style>
</head>
<body{if isset($onload)} onload="{$onload}"{/if}{if isset($bodyid)} id="{$bodyid}"{/if}>
{if $navweg != 1}<div id="nav">{include file="tmpl._navigation.inc.html"}</div>{/if}
<div id="inh">{$inh}</div>
</body>
</html>[/code]
- außer vielleicht der if-Abfragen nichts besonderes - interessant wird es lediglich innerhalb von <div id="nav"> - hier wird das Template für die Navigation eingebunden:
{[link:http://smarty.php.net/manual/de/language.custom.functions.php#language.function.assign@title=assign] var=a value=' class="aktuell"'}
<ul id="nav">
<li{if $s == 1}{$a}{/if}><a href="{$pfad}">Startseite</a></li>
<li{if $s == 2}{$a}{/if}><a href="{$pfad}fachbereich/">Fachbereich</a>
{if substr($s,0,1) == 2}
<ul>
<li{if $s == 21}{$a}{/if}><a href="{$pfad}fachbereich/was_ist_wt/">Was ist WT?</a></li>
<li{if $s == 24}{$a}{/if}><a href="{$pfad}fachbereich/geschichte.html">Geschichte des FB</a></li>
</ul>
{/if}
</li>
</ul>
(das ist eine Ausschnitt der Navigations-Datei von http://www.fh-nuernberg.de/wt/) Hier sieht man für was die Variable $seite ist - anhand dieser wird entschieden, welches der aktuelle Menüpunkt ist, und welche Untermenüpunkte eingebunden werden sollen.
Alle Klarheiten beseitigt?
Grüße aus Nürnberg
Tobias