Marktplatz Downloads Tutorials Forum

Designnation bietet auch:

Tutorial hinzufügen

Beliebte Links Weitere Optionen

Tutorial suchen

Titel

Schlüsselwörter

PHP / MySQL Tutorial: Templatesystem als Grundlage für Homapages



Ranking: +2   Kommentare: 6   |   Bewertung: Keine Berechtigung!  

Hallo,

Ich melde mich mal wieder, mit der versprochenen Klasse :)

Ich poste die Klasse, werde sie auch nicht mehr weiter erläutern, ich erkläre nur, wie ihr sie anwendet, und für was die einzelnen funktionen sind. Also hier die Klasse, speichert sie bitte als class.template.inc.php ab:

Code:


<?php

   
/**

    *    

    *  @copyright By Maximilian Schmidt 2008

    *  @package Template Class

    *  @version 2.1.5

    *  

    *  Developed for the xTreme Board

    */   

   

    
class Xtemplate

    
{

        private 
$_stringTemplateStart;

        private 
$_stringTemplateEnd;

        private 
$_funcTemplateStart;

        private 
$_funcTemplateEnd;

        private 
$_contentTemplateStart;

        private 
$_contentTemplateEnd;

        private 
$_content;

        private 
$_error;

        private 
$_funcs = array();

        private 
$_lang;

        private 
$_mysql;

        private 
$_parseTmpContent;

        

        
//Do NOT change!!!

        
const   Xversion 2.15;

        

        private 
$_defaultItems;

        

        
/**

         * Xtreme Board Template Class - Developed by Maximilian Schmidt 2008

         *

         * @param string $file

         * @param string $delStart

         * @param string $delEnd

         * @param array  $defaultItems

         * @param array $languageArray

         * @param string $path

         * @param Xmysql $mysql

         * 

         * @copyright Maximilian Schmidt

         */

        

        
public function __construct($file ""$delStart ""$delEnd ""$defaultItems = array(), $languageArray = array(), $path ""$mysql ""$funcStart$funcEnd$itemStart$itemEnd)

        {

            
$this -> _stringTemplateStart  $delStart;

            
$this -> _stringTemplateEnd    $delEnd;

            
$this -> _funcTemplateStart    $funcStart;

            
$this -> _funcTemplateEnd      $funcEnd;

            
$this -> _contentTemplateStart $itemStart;

            
$this -> _contentTemplateEnd   $itemEnd;

            
$this -> _lang                 $languageArray;

            
$this -> _tpl_path             $path;

            
$this -> _mysql                $mysql;

            

            if(!
$file)

            {

                
$this -> _error .= "<br /> Templatefile is not assigned!";

            }

            else

            {

                if(!
is_readable($file))

                {

                    
$this -> _error .= "<br /> The Templatefile (<b>$file</b>) could'n be read!";

                }

                else

                {

                    
$tmp fopen($file"r");

                    
$emergancy 0;

                    while(!
feof($tmp))

                    {

                        
$this -> _content .= fgets($tmp8192);

                        
$emergancy++;

                        if(
$emergancy == 50000) break;

                    }

                    if(
$emergancy == 50000) echo "Emergancy break!";

                    
fclose($tmp);

                }

            }

            

            

            if(
is_array($defaultItems))

            {

                
$this -> _defaultItems $defaultItems;

                foreach(
$defaultItems as $key => $value)    {

                    
$this -> set($key$value);

                }

            } 

            

            

                
$this -> _defaultItems['TIME']     = time();

                
$this -> _defaultItems['DATE']     = date("d.m.Y - H:i:s");

                
$this -> _defaultItems['DATE_D']   = date("d");

                
$this -> _defaultItems['DATE_M']   = date("m");

                
$this -> _defaultItems['DATE_Y']   = date("Y");

                
$this -> _defaultItems['DATE_H']   = date("H");

                
$this -> _defaultItems['DATE_I']   = date("i");

                
$this -> _defaultItems['DATE_S']   = date("s");

            

            

            foreach (
$this -> _defaultItems as $var => $value)

            {

                
$this -> set($var$value);

            }

            

            
$this -> itemSearch();

        }

        

        

        public function 
set($item$value$str "")

        {

            if(!
$str

                
$this -> _content str_replace($this -> _stringTemplateStart $item $this -> _stringTemplateEnd$value$this -> _content);

            else 

                return 
str_replace($this -> _stringTemplateStart $item $this -> _stringTemplateEnd$value$str);

        }

        

        public function 
out($ignoreErrors false$delItems true)

        {

            if(
$this -> checkError())

            {

                return 
$this -> printError();

            }

            else

            {

                
//if($delItems) $this -> _content = preg_replace("/<!-- [(.*)] -->/se","", $this -> _content);

                
return $this -> _content;

            }

        }

        

        private function 
checkError()

        {

            return(bool) 
$this -> _error;

        }

        

        public function 
replaceSpecialChars()

        {

            
$this -> _content str_replace("ä""&auml;"str_replace("ü""&uuml;"str_replace("ö""&ouml;"str_replace("Ä""&Auml;"str_replace("Ü""&Uuml;"str_replace("Ö""&Ouml;"str_replace("ß""&szlig;"$this -> _content)))))));

        }

        

        private function 
printError()

        {

            if(
$this -> checkError())

            {

                
$str  "<p>n";

                
$str .= "ERROR: <br />n";

                
$str .= "".$this -> _error."n";

                
$str .= "</p>n";

                

                return 
$str;

            }

            else

            {

                
$str  "<p>n";

                
$str .= "SUCCESS: The file has successfully been replaced with all templates.n";

                
$str .= "</p>n";

                

                return 
$str;

            }

        }

        

        
/* TEMPLATE PARSER */

        

        
private function itemSearch()

        {

            

                

            
/* FUNCTIONS */

            

            /* VAR */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "VAR "(.*?)"" $this -> _funcTemplateStartEnd "/se",

                
"$this->doVar('$1')",

                
$this -> _content);

            

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "VAR '(.*?)'" $this -> _funcTemplateStartEnd "/se",

                
"$this->doVar('$1')",

                
$this -> _content);

            

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "VAR `(.*?)`" $this -> _funcTemplateStartEnd "/se",

                
"$this->doVar('$1')",

                
$this -> _content);

            

            
/* INCLUDE */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "INCLUDE" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "INCLUDE" $this -> _funcTemplateStartEnd "/se",

                
"$this->doInclude('$1')",

                
$this -> _content);

            

            
/* FUNCTION */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "(.*?)" $this -> _funcTemplateStartEnd "/se",

                
"$this->funcDo('$1')",

                
$this -> _content);

            

             
/* IF -> ELSE  */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "IF "(.*?)"" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "ELSE" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "/IF" $this -> _funcTemplateStartEnd "/se",

                
"$this->doIfElse('$1','$2','$3')",

                
$this -> _content);

            

            
/* IF */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "IF "(.*?)"" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "/IF" $this -> _funcTemplateStartEnd "/se",

                
"$this->doIf('$1','$2')",

                
$this -> _content);

            

            
/* IF -> ELSE  */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "IF (.*?)" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "ELSE" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "/IF" $this -> _funcTemplateStartEnd "/se",

                
"$this->doIfElse('$1','$2','$3')",

                
$this -> _content);

            

            
/* IF */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "IF (.*?)" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "/IF" $this -> _funcTemplateStartEnd "/se",

                
"$this->doIf('$1','$2')",

                
$this -> _content);

                            

            
/* RELPLACE */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "REPLACE '(.*?)' '(.*?)'" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "REPLACE" $this -> _funcTemplateStartEnd "/se",

                
"$this->replace('$1','$2','$3')",

                
$this -> _content);

                

            

            
/* CONTENT FUNCTIONS */

            
$this->_content preg_replace(

                
"/" $this -> _funcTemplateStart "(.*?)" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "(.*?)" $this -> _funcTemplateStartEnd "/se",

                
"$this->funcContentDo('$1','$2','$3')",

                
$this -> _content);

            

            
/* SET FUNCTIONS */

            
preg_replace(

                
"/" $this -> _funcTemplateStart "SET '(.*?)'" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "SET" $this -> _funcTemplateStartEnd "/se",

                
"$this->doSet('$1','$2')",

                
$this -> _content);

            
$this -> _content preg_replace(

                
"/" $this -> _funcTemplateStart "SET '(.*?)'" $this -> _funcTemplateEnd "(.*?)" $this -> _funcTemplateStart "SET" $this -> _funcTemplateStartEnd "/se",

                
"",

                
$this -> _content);

            

                

            
/* ITEMS */

            
$this->_content preg_replace(

                
"/" $this -> _contentTemplateStart "(.*?)" $this -> _contentTemplateEnd "(.*?)" $this -> _contentTemplateStart "(.*?)" $this -> _contentTemplateEnd "/se",

                
"$this->itemDo('$1','$2')",

                
$this -> _content);

        }

        

        private function 
doSet($item$var)

        {

            
$this -> set(stripslashes($item), stripslashes($var));

            return 
"";

        }

        

        private function 
doVar($var)

        {

            if(
$var != "") @eval("$var2 = $var ;");

            return 
$var2;

        }

        

        private function 
doInclude($file)

        {

            
$path $this -> _tpl_path;

            
$file stripslashes($file);

            

            if(
is_readable($path "/" $file))

            {

                
$fp fopen($path "/" $file"r");

                
$tmp "";

                while(!
feof($fp))

                {

                    
$tmp .= fgets($fp1024);

                }

                

                foreach (
$this -> _defaultItems as $var => $char)

                {

                    
$tmp $this -> set($var$char$tmp);

                }

                

                return 
$tmp;

            }

            else

            {

                return 
"<!--INCLUDE FILE NOT FOUND!-->";

            }

        }

        

        private function 
doIf($cond$do)

        {

            
extract($GLOBALS);

            
$contidtion false;

            eval(
"$condition = (" stripslashes($cond) . ");");

            

            if(
$condition)

            {

                return 
stripslashes($do);

            }

            else

            {

                return 
"";

            }       

        }

        

        private function 
doIfElse($cond$do$doElse)

        {

            
extract($GLOBALS);

            
$contidtion false;

            

            eval(
"$condition = (" stripslashes($cond) . ");");

            

            if(
$condition)

            {

                return 
stripslashes($do);

            }

            else

            {

                return 
stripslashes($doElse);

            }

                    

        }

        

        private function 
itemDo($var$do)

        {

            
$this -> _funcs[stripslashes($var)] = $do;

            return 
"";

        }

        

        public function 
itemGet($char)

        {

            return 
stripslashes($this -> _funcs[$char]);

        }

        

        private function 
funcDo($cmd)

        {

            
extract($GLOBALS);

            
$path $this -> _tpl_path;

            

            
$tmp explode(" ",stripslashes($cmd));

            

            if(
$tmp[0] == "LANG")

            {

                return 
$this -> _lang[$tmp[1]][$tmp[2]];

            }

            

            return 
$this -> _funcTemplateStart stripslashes($cmd). $this -> _funcTemplateEnd;

        }

        

        private function 
replace($search$replace$content)

        {

            return 
str_replace($search$replace$content);

            echo 
$search"." $replace "." $content "replace";

        }

        

        private function 
funcContentDo($cmd$var$extra)

        {

            
extract($GLOBALS);

            
$path $this -> _tpl_path;

            
$var stripslashes($var);

            

            switch(
$cmd)

            {

                case 
"VAR":

                    
$eval = eval("$__var = $var;");

                    return 
$__var;

                default:

                    
$tmp explode(" ",$cmd);

                    

                    

            }

            

            return 
$this -> _funcTemplateStart $cmd $this -> _funcTemplateEnd $var $this -> _funcTemplateStart $extra $this -> _funcTemplateEnd;

        }

        
/* TEMPLATE PARSER */

    
}

?>






So, ziemlich lang :)

1.) Erzeugt eine Instanz der Klasse und legt Standartfelder an(index.php):

Code:




$defaultItems = array

            ( 

                "GFX_PATH"      => "./gfx/", // Pfad zu den Grafikdateien des Designs(den / am Schluss nicht vergessen!!!!)

                "JS_PATH"       => "./js/", // Pfad zu den JS(Javascript) Dateien(wenn vorhanden)

                "CSS_PATH"      => "./css/", // Pfad zu den CSS Dateien(Cascading Stylesheets)

                "MAIN_TITLE"    => htmlspecialchars("Euer Titel des Projects"),

                "PATH"          => "/", // Relativer Pfad(Falls euer Projekt in einem Unterordner liegt)

                "SELF"          => $_SERVER ['REQUEST_URI'] // Die eigene Datei

            );



$tpl = new Xtemplate("./template_haupt.html", "{$",  "}", $defaultItems, $this -> lang, X_ROOT . $this ->tplPATH . "/" . $tplmodule, $this -> mysql, "{:", "}", "{_", "}");




Die Standartfelder könnt ihr auch wegmachen, aber ihr könntet sie noch gebrauchen(später dazu mehr), ihr könnt auch welche hinzufügen.

2.) So, jezt habt ihr eine Instanz der Template Klasse. Jetzt erzeugt die Datei template_haupt.html:

Code:




<html>

   <head>

      <title>{$MAIN_TITLE}</title>

   </head>

   <body>

      <b>MEN&Uuml;:</b>

      {$MENU}

      {:MENU_ITEM}<a href="{$LINK}">{$TITLE}</a>{:MENU_ITEM}

      {$CONTENT}

   </body>

</html>




3.) Die obige Datei ist das Haupttemplate. Es wird auf jedes andere TEmplate "darübergelegt". Machen wir weiter. z.B. mit der Startseite unsres Miniprojekts! home.html:

Code:




Herzlich  Willlkommen auf {$PROJEKTNAME}<br />

<img src="{$GFX_PATH}" alt="" />




Das ist keine gültige HTML file, ich weiß, sie wird es aber, glaubt mir =)

4.) Jetzt gehts zur PHP File, in die wir vorhin am Anfang geschrieben haben...(einfach dahinter schreiben):

Code:




// Da wir ja ein Menüelement definiert haben, können wir uns daraus ein Menü basteln =)

$menu_item = $tpl -> itemGet("MENU_ITEM");



$tmp = $tpl -> set("LINK", "./index.php", $menu_item);

$tmp = $tpl -> set("TITLE", "HOME", $tmp);



$menu = $tmp;



$tmp = $tpl -> set("LINK", "./gb.php", $menu_item);

$tmp = $tpl -> set("TITLE", "GAESTEBUCH", $tmp);



$menu .= $tmp;



$tpl -> set("MENU", $menu); // setzt das erzeugte Menü auf das {$MENU} im Template



// Jetzt laden wir die eigentliche Site(home.html) und legen sie auf {$CONTENT} im template_haupt.html



$tpl_site = new Xtemplate("./home.html", "{$",  "}", $defaultItems, $this -> lang, X_ROOT . $this ->tplPATH . "/" . $tplmodule, $this -> mysql, "{:", "}", "{_", "}");



$site = $tpl_site -> out();



// Inhalt der home.html auf {$CONTENT} setzten

$tpl -> set("CONTENT", $site);



print $tpl -> out();




So, das wars, es ist doch nicht so viel zum schreiben =)

Jetzt erklär ich euch kurz, was ihr da geschrien habt:

template_haupt.html: Also, diese Datei ist das Hauptdesign und layout eurer HP! Sie enthält das Menü und ähnliches. Und wichtig: es muss {$CONTENT} drinnen sein. Und genau dort wird eben der Inhalt der Seite eingefügt. Es gibt meißt nur eins davon, da die HP eigentlich immer das selbe Design hat(muss aber nicht so sein)
home.html: Das ist ein "Untertemplate". So nenn ich das, ob es wirklich so heißt, weiß ich nicht. Es gibt viele davon, in home.html ist die Startseite, es kann aber auch gb.html geben, darin ist der Inhalt des Gästebuches, gb_eintrag.html, der Inhalt es Gästebuches mit Formular zum Eintragen etc.
index.php: Die Datei, die template_haupt und home.html zusammen fässt! In ihr ist der übliche PHP Code.

Es ist nicht schlimm, wenn ihr nicht alles versteht, von was ich gerade geredet habe, ich habe es am anfang auch nicht verstanden. PRobiert damit rum, findet raus, wie man es am besten benutzen kann...

Jetzt erklär ich noch einige Funktionen die ihr innerhalb eines Templates ausführen könnt:

1.) Die IF Funktion:

Code:




{_IF "1==1"}Dieser Text wird angezeigt{_ELSE}Dieser nicht{_/IF}




Ihr könnt anstatt die einzen auch variablen benutzen, die in unserem Beispiel in der index.php definiert wären. Solltet ihr nicht darauf zugreifen sollen, benutzt bitte den global Befehl...

2.) Die Include Funktion:

Code:




{_INCLUDE}menu.html{_INCLUDE}




Diese Funktion würde durch den Inhalt von menu.html(in unserem Beispiel nicht vorhanden) ersetzt werden. Darin kann z.B. ein fertiges Menü oder Werbung sein... Diese Datei wird mit dem Templateparser geparst und {$ können in der index.php weiterhin mit set gesetzt werden.

3.) die {$ Funktion

Code:




{$FELD}




Kann in der PHP Datei durh ein beliebegen Text ersetzt werden.:

$tpl -> set("FELD", "Irgendein Text");

4.) Die VAR Funktion

Code:




{_VAR `$var`}

{_VAR "$_GET[irgendwas]"}

{_VAR '$var'}




Kann auf Variablen zugreifen( ` ' und " möglich)
Wenn es nicht geht, global Befehl benutzen

5.) {: Funktion

Code:




{:BEREICH}Das ist ein {$TITEL}{:BEREICH}

{$BEREICH}




Legt ein Bereich an. Im Template wird dieser gelöscht und in der Klasse gespeichert.
Um das zu verwenden, so vorgehen:

Code:




$bereich = $tpl -> itemGet("BEREICH");

$bereich = $tpl -> set("TITEL", "Test", $bereich); // ersetzt in der Variable $bereich den String {$TITEL} durch Test

$tpl -> set("BEREICH", $bereich); // setzt im Template auf {$BEREICH} den Inhalt der Variable $bereich





So, ich hoffe ihr habt es ein bisschen verstanden und ihr könnt e gebruachen.

Falls fragen sind, einfach Komment posten, oder PN.

Euer

Spielverderber(Maxximum)

Veröffentlicht von: Maxximum
Veröffentlicht am: 24 Dec. 2008
Bookmarks: social bookmarking yigg it Linkarena Technorati Yahoo Mr. Wrong
Schlüsserwörter: PHP system template xboard


Themenverwandte Tutorials


Kommentar(e) (6)


Maxximum sagt:

Zitat Marc-B.:

Es ist ja auch PHP...

Mei o Mei...

Trotzdem schlecht...

replaceSpecialChars() z.B.: Was solln das darstellen?




Ersetzt alle ä ö ü durch &auml, .... ?!?

20 May. 2009 19:07:17 • Antworten


deleted_1456821596 sagt:

Es ist ja auch PHP...

Mei o Mei...

Trotzdem schlecht...

replaceSpecialChars() z.B.: Was solln das darstellen?

6 May. 2009 19:22:54 • Antworten


RoyalLounge sagt:

Sind aber auch alle am rumklugscheissen -.- danke für das Tutorial denn nur durch solche User die auch Tutorials schreiben kann sich eine Community halten.

Ich hätte es auch hier in den PHP Bereich geposted...

18 Mar. 2009 13:40:40 • Antworten


daprophet sagt:

Schönes Tutorial wenn man auf solche Template-Engines setzt.

Sache wie GFX_PATH würde ich als Konstante definieren.

10 Jan. 2009 10:45:42 • Antworten


Maxximum sagt:

Zitat rLz4u:

Ähm falscher Bereich?





Wieso, ist doch PHP?!

31 Dec. 2008 12:41:59 • Antworten


rLz4u sagt:

Ähm falscher Bereich?


31 Dec. 2008 12:41:06 • Antworten



Anfang

<<

1

>>

Ende

Kommentar eintragen


!! Jetzt kostenlos anmelden oder einloggen und mitdiskutieren!


Partner: • Designer in ActionFlash HilfeTutorials.dePixelio.deFlashstar BlogLizenzfreie Bilder