Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Ein eigenes Templatesystem schreiben

Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 21.02.2006, 22:23 Nach oben    #41
Corvin
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 397
Standard

Mir ist da ein kleiner Fehler unterlaufen, ich habe das Archiv neu angehängt. Jetzt geht es.
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.03.2006, 16:58 Nach oben    #42
CIX88
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 571
Standard

Erweiterung der Template-Klasse

Bei diversen Projekten bin ich darüber gestolpert, dass bestimmte Teile vom Template durch
Schleifen ( z.B. while oder foreach ) geladen werden mussten.
Daraus ist folgene Idee bzw. Vorschlag entstanden.

Zunächst wurde die bisherige Klasse erweitert:

PHP-Code:
    function Template($tpl_dir ""$lang_dir ""$inhalt "") {
        
// ...
        
$this->template $inhalt;
        
// ...
    

Zusätzlich wurden 2 neue Funktionen eingesetzt:

PHP-Code:
    /*
    * Teile des Templates ausgeben
    */
    
function getSubpart($name) {
        
$pos1 strpos($this->template"<!--###".$name." begin###-->");
        
$pos2 strpos($this->template"<!--###".$name." end###-->");
    return 
substr(
        
$this->template,
        
$pos1+strlen("<!--###".$name." begin###-->"),
        
$pos2-$pos1-strlen("<!--###".$name." begin###-->"));
    }   
       
    
/*
    * Teile des Templates austauschen
    */
    
function replaceSubpart($name$replacestr) {
        
$pos1 strpos($this->template"<!--###".$name." begin###-->");
        
$pos2 strpos($this->template"<!--###".$name." end###-->");
    
$this->template substr_replace(
        
$this->template,
        
$replacestr$pos1$pos2-$pos1+strlen("<!--###".$name." end###-->"));
    } 
Innerhalb der Template-Datei werden die Abschnitte, die mit Schleifen geladen werden sollen, wie folgt gekennzeichnet:

<!--###<name> begin###--> = Beginn des Schleifen-Abschnitt
<!--###<name> end###--> = Ende des Schleifen-Abschnitt

Beispiel:

Code:
<html>
 <body>

	<h4> Hallo {nickname} </h4>

	<!--###loop begin###-->
		<div> {counter} </div>
	<!--###loop end###-->

 </body>
</html>
In der PHP-Datei sieht das dann wie folgt aus:

PHP-Code:
<?php
include('_template_class.php');

    
$sprache 'lang_de/';

    
$tpl = new Template();
    
$tpl->load'cont_test.html' );

    
$lang $tpl->loadLanguage($sprache); 

    
$tpl->sr('nickname''Ulf' );

    
// template mit schleife
    
$loopPart $tpl->getSubpart'loop' );

    
$out '';
    for ( 
$i 0$i 10$i++ ) {

        
// loop
        
$tpl_2 = new Template$sprache$sprache$loopPart);
        
$tpl_2->sr('counter'$i );
        
$out .= $tpl_2->out(1);
    }

    
$tpl->replaceSubpart'loop'$out );
    
$tpl->out();
?>
Ich denke das Prinzip ist erkennbar

Vieleicht hat jemand ein besseren Vorschlag, aber bei diversen Projekten hat sich die Möglichkeit gut bewährt.
Müsste natürlich für PHP5 etwas umgeschrieben werden
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.03.2008, 17:58 Nach oben    #43
Link
Neuer Benutzer
 
Registriert seit: 08.11.2005
Beiträge: 4
Standard Erweiterung Templatesystem

Hallo,

ich habe mir einmal die Freiheit genommen und die Klasse aus der Topic um eine etwas andere Schleifefunktion erweitert.

Zum einen gibt es zwei neue Funktionen:

PHP-Code:

public function replace_loop($name$array) {
    
    
/*
    Sucht nach Einträgen à la {loop=$name}{/loop} und sendet den Inhalt der Klammern an die Funktion loop_content()
    Dabei werden der Name, der "Loop String" und der Datenarray übergeben
    */
    
    
$this->template preg_replace("/".'\{loop="'.$name.'"}'."(.*)".'\{\/loop\}'."/isUe""\$this->loop_content(\$name, '\$1', \$array)"$this->template);
}

public function 
loop_content($name$string$array) {
    
    
$output '';
    
    
$string stripslashes($string); // Kleiner Fix für den String
    
    
foreach($array as $rows) { // Hier geht er den Datenarray durch
        
        
$string_tmp $string// Clone von $string, damit $string nicht überschrieben wird
        
        
foreach($rows as $row) { // Einzelne Objekte werden durchgegangen
            /*
            Hier werden Werte à la {$name.key} mit den entsprechenden Werten aus dem Array ersetzt
            */
            
$string_tmp str_replace($this->leftDelimiter.$name.".".key($rows).$this->rightDelimiter$row$string_tmp);
            
next($rows);    
        }
        
        
$output .= $string_tmp;
    }

    return 
$output;
    

In dem Template sieht das ganze wie folgt aus:

Code:
{loop="tabelle_1"}
<tr>
<td>{$tabelle_1.wert1}</td>
<td>{$tabelle_1.wert2}</td>
<td>{$tabelle_1.wert3}</td>
</tr>
{/loop}
Via PHP ruft man dann folgendes auf:

PHP-Code:
$tpl = new template();
//...

$zeilen = array();
$zeilen[] = array("wert1"=>"spalte 1""wert2"=>"spalte 2""wert3"=>"spalte 3");
// etc...

$tpl->replace_loop("tabelle_1"$zeilen);

//...
$tpl->out(); 
Innerhalb der Schleife können übrigends auch normale assign Variablen stehen. Diese werden dann ersetzt, wenn die assign Funktionen nach der Schleifenfunktion aufgerufen werden.

mfg
Link
Link ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« [JS] Objektorientierte Programmierung in JavaScript | [php] BBCode-Parser mit [noparse]-Tag selbst gemacht »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schleifen im Templatesystem Stefan125 PHP-Programmierung 4 19.07.2007 02:36
Frage zum Tut: [PHP] Fremde Webseiten auslesen the_cRu PHP-Programmierung 27 10.02.2007 19:59
eigenes Template System mit Sprachunterstützung jjelliss PHP-Programmierung 61 15.09.2006 10:00
[PHP] 404-Fehlerseiten als Chance PaterNoster Tutorials 0 23.04.2006 15:04
Frage zum Tutorial: eigenes Template-System Waldvogel PHP-Programmierung 7 29.12.2005 19:18


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:37 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.6.7, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44