[PHP] Arbeiten mit Templates

Dieses Thema im Forum "Programmier Tutorials" wurde erstellt von Murdoc, 13. August 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 13. August 2007
    Arbeiten mit Templates

    du wolltest schon immer mal wissen wie man in php sauber mit templates arbeitet? dann bist du hier richtig.

    zu beginn legen wir dafür erstmal einen neuen ordner an (name egal) wo später die templates drinnen landen.
    dann brauchen wir eine funktion die diese templates aus dem ordner rausholt, das ganze machen wir in einer neuen klasse, damit das schön übersichtlich bleibt.

    also wir legen eine neue klasse an namens 'tpl':

    PHP:
    <? php
        
    class  tpl  {
            
        }
    ?>
    bis jetzt nix dabei
    damit das ganze dynamisch bleibt geben wir auch gleich einen ordner mit an, damit man zwischen verschiedenen layouts wählen kann und das machen wir so:

    PHP:
    <? php
        
    class  tpl  {
            var 
    $dir ;
        }
    ?>
    jetzt ist in der ganzen klasse die variable $dir vorhanden

    jetzt brauchen wir eine funktion die diesen ordner belegt, am besten man macht das als constructor
    (einer funktion mit dem selben namen wie die klasse):

    PHP:
    <? php
        
    class  tpl  {
            var 
    $dir ;
            
            public function 
    tpl ( $dir  '' ) {
                if(
    $dir  ==  '' $dir  "./" ;
                else {
                    if(
    $dir { 0 } !=  "." $dir  ". $dir " ;
                    elseif(
    $dir { 1 } !=  '/' $dir  "./ $dir " ;
                    
                    if(
    $dir { strlen ( $dir )- 1 } !=  '/' $dir  .=  '/' ;
                    
                    if(
    is_dir ( $dir ))  $this -> dir  $dir ;
                    else exit(
    'template dir not found' );
                }
            }
        }
    ?>
    wie man sieht wartet diese funktion auf den ordernamen, falls der nicht angegeben wurde wird der momentane ordner genommen also der in dem sich das script befindet oder includiert wurde.

    so, aber jetzt brauchen wir noch eine funktion um die templates zu laden, die sieht so aus:

    PHP:
    <? php
        
    class  tpl  {
            var 
    $dir ;
            
            public function 
    tpl ( $dir  '' ) {
                if(
    $dir  ==  '' $dir  "./" ;
                else {
                    if(
    $dir { 0 } !=  "." $dir  ". $dir " ;
                    elseif(
    $dir { 1 } !=  '/' $dir  "./ $dir " ;
                    
                    if(
    $dir { strlen ( $dir )- 1 } !=  '/' $dir  .=  '/' ;
                    
                    if(
    is_dir ( $dir ))  $this -> dir  $dir ;
                    else exit(
    'template dir not found' );
                }
            }

            public function 
    get ( $name ) {
                if(
    file_exists ( $this -> dir . $name . ".html" )) {
                    
    $template  file ( $this -> dir . $name . ".html" );
                    
    $template  implode ( "" $template );
                    return 
    str_replace ( "\"" "\\\"" $template );
                }
                else exit(
    'template "' . $name . '" not found' );
            }
        }
    ?>
    so dann hätten wird das auch, jetzt noch eine funktion die das alles auch wieder ausgibt und dann hammas:

    PHP:
    <? php
        
    class  tpl  {
            var 
    $dir ;
            
            public function 
    tpl ( $dir  '' ) {
                if(
    $dir  ==  '' $dir  "./" ;
                else {
                    if(
    $dir { 0 } !=  "." $dir  ". $dir " ;
                    elseif(
    $dir { 1 } !=  '/' $dir  "./ $dir " ;
                    
                    if(
    $dir { strlen ( $dir )- 1 } !=  '/' $dir  .=  '/' ;
                    
                    if(
    is_dir ( $dir ))  $this -> dir  $dir ;
                    else exit(
    'template dir not found' );
                }
            }
            
            public function 
    get ( $name ) {
                if(
    file_exists ( $this -> dir . $name . ".html" )) {
                    
    $template  file ( $this -> dir . $name . ".html" );
                    
    $template  implode ( "" $template );
                    return 
    str_replace ( "\"" "\\\"" $template );
                }
                else exit(
    'template "' . $name . '" not found' );
            }
            
            public function 
    output ( $template ) {
                print 
    $template ;
            }
        }
    ?>
    speicher die klasse als zb 'class_tpl.php' ab.

    jetzt sollte man auch wissen wie man damit arbeitet:
    wir legen dafür eine neue .php an namens 'index' und da schreiben wir zum testen das rein:

    PHP:
    <? php
        
    require  './class_tpl.php' ;
        
    $tpl  = new  tpl ( 'ordner_mit_den_templates' );
    ?>
    'ornder_mit_den_templates' ist denk ich selbstredend (der ordner mit den templates)

    danach legen wir mal ein template an, schreib dort irgendwas rein + eine variable: $test und speicher es dann als 'test.html' im templates order ab:
    HTML:
    Mein erstes Template: $test
    jetzt wollen wir in diesem template die variable $test geparsed haben, dazu müssen wir mit eval() arbeiten:

    PHP:
    <? php
        
    require  './class_tpl.php' ;
        
    $tpl  = new  tpl ( 'ordner_mit_den_templates' );
        
    $test  'Hallo Welt' ;
        eval(
    "\$test = ' { $test } ';" );
    ?>
    und so gibt man das ganze dann aus:
    PHP:
    <? php
        
    require  './class_tpl.php' ;
        
    $tpl  = new  tpl ( 'ordner_mit_den_templates' );
        
    $test  'Hallo Welt' ;
        eval(
    "\$test = ' { $test } ';" );
        eval(
    "\$tpl->output(' { $tpl -> get ( 'test' )} ');" );
    ?>
    wenn du jetzt zb template_a von 'ordner1/' haben willst, aber template_b von 'ordner2/' ist das kein problem. du hast in der vaiable $tpl die klasse tpl definiert, d.h du kannst darüber auch auf die klasse zugreifen. ein einfaches $tpl->dir = './ordner2/'; reicht und absofort werden alle templates aus 'ordner2/' geladen. sollte also kein problem sein.

    viel spaß!
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.