Grundaufbau mit Templates
Einklappen
X
-
juhu vieleicht kann ich dir ja nen bissel helfen!!!
Also ich hatte mal das gleiche problem mit smarty! aller anfang ist schwer.
ich werde jetzt nicht grossartig auf dein problem eingehen, sondern eine kleine lösung vorstellen wie ich damit um gehen würde und es auch so anwende.
also ich habe das ganze in 5 php datein aufgesplitet.
1.) tsystem.class.php
2.) view.class.php
3.) smarty.class.php <--is nur ne wrapper klasse!!!
4.) Smarty.class.php <-- die eigentliche Smarty klasse
5.) command.class.php
So jetzt mein ansatz:
1.) es wird ja standard mässig die index.php aufgerufen, die die config.inc.php und diese wiederrum die tsytem.class.php includiert.
PHP-Code:<?php
//tsystem.class.php
//command.class.php holt nur die action aus dem Request.
include ("includes/command.class.php");
//view.class.php ist für die standart darstellung der seite da.
include ("includes/view.class.php");
//wrapper klasse
include ("includes/smarty.class.php");
//die eigentliche smarty klasse die man sich aus dem inet lädt
include ("smarty/Smarty.class.php");
class tsystem{
//konstruktor werden alle objekte instanziert die ich hinterher in meiner Session benötige
function tsystem(){
//cmd holt sich nacher meine action aus dem request
$this->cmd=new command();
}
//methode execute wird später aus der index.php aufgerufen
function execute(){
//die methode check ist eine standart methode in der klasse cmd
$this->cmd->check();
}
}
?>
PHP-Code:<?php
//config.inc.php
include("includes/tsystem.class.php");
ini_set("session.use_cookies", 1 );
//startet eine sessison
session_start();
//falls das pbjekt SYS in der session schon existiert, nun ja da muss man dann keine neue Session starten
if(!array_key_exists("SYS",$_SESSION)){
$_SESSION["SYS"] = new tsystem();
}
//vereinfachung so muss man dann nur $SYS nehmen und nicht &$_SESSION['SYS'];
$SYS = &$_SESSION["SYS"];
?>
PHP-Code:<?php
//index.php
include("includes/config.inc.php");
//hier starten wir die execute methode aus der tystem.class.php haben wir ja oben schon gesehen
$SYS->execute();
//erzeugen unser View Objekt kommt gleich auch noch
$viewctrl = new tview();
//starten die methode aus der viewklasse und übergegen ihr eine kopie der Session!!!!! sehr wichtig
$viewctrl->execute(&$SYS);
?>
wollen wir uns dem herzstück des kleinen konstrucktes die view.class.php anschauen
PHP-Code://view.class.php
class tview {
//action variablen unten wichtig für die auswahl des workerfiles
var $page="";
//wichtig für das workerfile dort kann dann aus dem workerfile eine bestimmte methode gewählt werden
var $action="";
//content variabeln werden später mit den HTML code der einzelnen bereiche gefüllt
var $content="";
var $left_col="";
//konstruktor muss hier nichts machen
function tview(){}
//execute methode wird standart mässig von der index.php aufgerufen
function execute(&$variable){
$this->SYSref = &$variable;
$this->view();
}
function view(){
//smarty-objekt zum anzeigen und fetchen der tpls
$sm = &tsmarty::newSmarty();
$this->page = $this->SYSref->cmd->page;
$this->action = $this->SYSref->cmd->action;
//WORKER includen durch die page z.b. (index.php?page=gbook) wird aus dem ordner worker die gbook.php includiert.
//----------------------------------------------------------------------------------------------------------------
if(file_exists("workers/".$this->page.".php")){
include("workers/".$this->page.".php");
}else include("workers/baustelle.php");
//WORKER ENDE
//----------------------------------------------------------------------------------------------------------------
//in den workerfiles befülle ich die dynamischen elemente meiner seite in die variablen, die dann hier in das main.tpl wiederrum geaddet werden
$sm->assign("navi", $this->navi);
$sm->assign("content", $this->content);
$sm->display("main.tpl");
}// function view
}// class view
?>
die wrapper klasse smarty und die command klasse
PHP-Code:?php
//command.class.php
class command{
//festlegung der startpage
var $page="home";
var $action="show";
function command() {
}
function check(){
if(array_key_exists("page", $_REQUEST)){
$this->page=$_REQUEST['page'];
}
if(array_key_exists("action", $_REQUEST)){
$this->action=$_REQUEST['action'];
}
}
}
?>
PHP-Code:<?php
//smarty.class.php
//die klasse erzeugt nur ein smartyobjekt und gibt es wieder zurück!! nicht mehr und nicht weniger
class smarty{
function smarty(){}
function &newSmarty(){
$sm = new Smarty();
return $sm;
}
}
?>
zum abschluss noch ein beispiel workerfile dieses würde mit folgender url auf gerufen werden index.php?page=home&action=show
PHP-Code:<?php
//hier im workerfile kann man sich jetzt richtig austoben was den dynamischen inhalt einer seite oder auch bereiche betrifft.
if($this->action=="show"){
//standart anzeige
$sm->assign("titel", "Home");
$this->content=$sm->fetch("home.tpl");
}
?>
normarlerweise müsste man jetzt nur die einzelnen quelltexte hier heraus kopieren und auf den webserver schmeissen. Ich glaube das das ganze auch laufen würde!!!
naja wenn noch fragen sein sollten kann man mich gern fragen.
ich habe versucht mich jetzt hier so kurz wie möglich zuhalten. aber mit weniger komm ich leider nicht aus.
ich habe das ganze auch als packet da welches ich gern zur verfügung stelle. das auch lauffähig ist und auch schon von mir mit wesentlich mehr featueres kommt.Zuletzt geändert von weissmuster; 18.05.2005, 18:19.
Kommentar
-
ja ich hab mich mal getraut das ding jetzt auf meinem ftp als open source
zur verfügung zu stellen
ftp://weissmuster.no-ip.com
naja liegt nur ein file drin als blank_v0.1.zip
leider sind die ganzen Klassen noch unkommentiert (sind aber auch nicht sehr kompliziert und auch nicht soviele) aber ich werde das so schnell als möglich nachholen.
für erklärungen:
ICQ: 147344522
mail: weissmuster@q-dsl.de
Kommentar
Kommentar