Templatesystem Eigenbau

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kropff
    antwortet
    Zitat von uhuwe Beitrag anzeigen
    Das erste Problem ist, dass ich keine Arrays an eine Fuktion übergen kann
    Doch, das kann man.
    Zitat von uhuwe Beitrag anzeigen
    und zweitens kein Array global erklären kann und wenn, dann weiß ich nicht wie.
    Mit global. Wie bei ganz normalen Variablen auch. Allerdings halte ich diese Vorgehensweise für absolut tödlich. Daten sollten immer sauber gekapselt werden. Ansonsten hast du einen Design-Fehler.

    Peter

    Einen Kommentar schreiben:


  • uhuwe
    hat ein Thema erstellt Templatesystem Eigenbau.

    Templatesystem Eigenbau

    Ich habe mich jetzt nochmal heran gewagt, ein eigenes Templatesystem zu basteln.

    Die PHP-Datein sind so aufgebaut:
    functions.php
    PHP-Code:
    <?php

    function get_template($infile)
    {
        
    $tempfile=file($infile.'.tpl');
        
    $loopwhile=0;
        
    $loopfor=0;
        
    $loop=0;
        
    $if=0;
        
    $once=1;

        for(
    $i=0;$i<count($tempfile);$i++)
        {
            
    preg_match_all('/\{([a-zA-Z0-9_]+)\}/',$tempfile[$i],$matches);
            
            for(
    $j=0;$j<count($matches[0]);$j++)
            {
                if(
    $once==1)
                {
                    
    $replacement=$matches[1][$j];
                    global $
    $replacement;
                    
    $tempfile[$i]=str_replace($matches[0][$j],$$replacement,$tempfile[$i]);
                    
    $resulttext[$i]=$tempfile[$i];
                }
            }
            
            
    $results=preg_match_all('/\[(.*)\]/',$tempfile[$i],$matches);
            
            if(
    $results>0)    
            {
                for(
    $j=0;$j<count($matches[0]);$j++)
                {
                    
    $templatefunction=preg_split('/[^a-zA-Z0-9_\/]/',$matches[1][$j]);
                }            
                if(
    $templatefunction[0]=='if')
                {
                    
    $if++;
                }
                
                if(
    $templatefunction[0]=='include')
                {
                    
    $include++;
                    
                    include($
    $templatefunction[1]);
                }
                
                if(
    $templatefunction[0]=='while')
                {
                    
    $once=0;
                    
    $loopwhile++;
                }
                
                if(
    $templatefunction[0]=='/while')
                {
                    
    $loopwhile--;
                    
                    if(
    $loopwhile==0$once=1;
                }
                
                if(
    $templatefunction[0]=='for')
                {
                    
    $once=0;
                    
    $loopfor++;
                }
                
                if(
    $templatefunction[0]=='/for')
                {
                    
    $loopfor--;
                    
                    if(
    $loopfor==0$once=1;
                }
            }
            
    $resulttext[$i]=$tempfile[$i];
        }
        
        if(
    $loopwhile!=|| $loopfor!=0)
        {
            echo 
    "\$loopwhile: $loopwhile und \$loopfor: $loopfor<br/>";
            die(
    'Mit dem Template stimmt irgend etwas nicht. <h1>Abbruch</h1>');
        }
        else
        {
            
    $once=1;
            
    $loop=0;
        }
        
        echo(
    implode('',$resulttext));
    }

    ?>
    index.php
    PHP-Code:
    <?php
    include('functions.php');

    $css='css/home.css';
    $artikel=(isset($_GET['artikel']))?$_GET['artikel']:"Kein Artikel vorhanden.";
    $REMOTE_ADDRESS=$_SERVER['REMOTE_ADDR'];
    $HOST_ADDRESS=$_SERVER['HTTP_HOST'];
    $mysql['text']=array("Datensatz1","Datensatz2");
    $text=$mysql['text'][1];
    $image='./bilder/Deutschlandfahne.svg';
    $imagetype='image/svg+xml';
    $imagename='Deutschlandfahne';
    $or_de='oder';
    $or_en='or';
    $lang='de';
    $typeor='or_'.$lang;
    $or=$$typeor;

    get_template('templates/header');
    get_template('templates/index');
    get_template('templates/footer');
    ?>
    Die Templates:
    header.tpl
    PHP-Code:
    <link rel="stylesheet" type="text/css" href={css}>
    <
    object data={imagetype={imagetypewidth="100%" height="300px">Image: {imagename}</object>

    <
    font>

    <
    table width="100%">

    <
    tr><td valign="top">

    <
    table>

    <
    tr><td valign="top" class="table menue">

    <
    a href="?artikel=Dies ist meine erste Homepage"><h1>Home</h1></a>

    <
    a href="?artikel=computer">Computer</a><br>

    <
    a href="?artikel=fahnen">Fahnen</a><br>

    <
    a href="?artikel=grafikkarten">Grafikkarten</a>

    <
    hr />

    <
    h1><center>SVG Scripte</center></h1>

    <
    a href="?grafik=Fahne">SVG-Fahne</a>

    <
    a href="?grafik=Liebeserklaerung">Liebeserkl&auml;rung</a>

    </
    td>

    </
    tr>

    </
    table>

    </
    td>> 
    index.php
    PHP-Code:
    <td>

    <
    table width="100%">

    <
    tr>

    <
    td><h1><center>{artikel}</center></h1><hr></td>

    </
    tr>

    [while 
    mysql text]

    <
    tr>

    <
    td>{text}</td>

    </
    tr>

    [/while]

    </
    table>

    </
    tr
    footer.tpl
    PHP-Code:
    <tr><td colspan="3">

    <
    hr>

    Internet: {HOST_ADDRESS}<br /><br />



    E-Mail: <a href="mailto:quickjoe@web.de">quickjoe@web.de</a> {or} <a href="mailto:aldifahne@freenet.de">aldifahne@freenet.de</a><br /><br />

    <
    hr>

    Ihre IP-Adresse ist: {REMOTE_ADDRESS}

    </
    td></tr>

    </
    table
    So, wie man im Anhang sehen kann, funktioniert das bis auf die Schleifen.
    Das erste Problem ist, dass ich keine Arrays an eine Fuktion übergen kann und
    zweitens kein Array global erklären kann und wenn, dann weiß ich nicht wie.

    Ich hätte sonst die Datensätze aus der Datenbank geholt, in ein Array gepackt, bearbeitet und dann ausgegeben.
    Das Ganze sollte dann auch universell funktionieren.

    Hat noch irgend einer eine Idee?

    Danke schon mal im Voraus.
    Angehängte Dateien
Lädt...
X