Templatesystem und include von Dateien

xtratz

Gesperrt
Hallo Leute,

habe mir das Tutorial über ein einfaches Templatesystem mal angeschaut.
Funktioniert gut.

http://www.tutorials.de/forum/php-tutorials/12907-php-templates.html

Jedoch was ich nicht hinbekomme ist das includieren von Dateien.

Ich fasse das include in eine Variable z.b.

PHP:
$footer = require('footer.php');

Jedoch wird der Footer auch angezeigt wenn ich im Template die Variable $footer gar nicht setze.

Hat jemand einen Tipp wie man das lösen kann?

Gruss und Danke.
 
tja, PHP includet die Datei einfach, sobald du den Befehl irgendwo hinschreibst. Es gibt 2 Möglichkeiten das zu lösen:
1. den Inhalt der footer.php in eine Variable fassen und die danach ausgeben:
PHP:
// Das in die footer.php:
$inhalt = "blabla";

// und dann in die Hauptdatei:
include("footer.php");
echo $inhalt;

oder 2. mit einer if-Bedingung:
PHP:
if ($irgendwas == 1)
   {
    include("footer.php");
   }
 
Hallo,
also ich will jetzt das Tutorial zwar nicht schlecht machen, aber meiner meinung gibt es bessere Tutorials zu dem Thema z.B. das hier.

mfg
forsterm
 
Ja danke, das hab ich mir auch schon angeschaut.
Ist mir aber ein wenig zu komplex. Vorallem weil ich nichts mit den verschachtelten Blöcken Anfangen kann. Bzw. kein komplettes Beispiel(e) vorhanden sind.

Ist es denn möglich im ersten Tutorial Beispiel zu Prüfen ob Platzhalter x aufgerufen worden ist? Das würde mir arg weiterhelfen.

Weil das System bei dem ich das Templatesystem einsetzen möchte doch sehr verschachtelt ist.

So könnte ich z.b. erst prüfen ob ein PLatzhalter aufgerufen wird und dies als Bedingung für ein include setzen.

Gruss
 
Hallo,

naja ich kann kein einziges Beispiel finden wie man in der Praxis die unterschiedlichen Funktionen einsetzen kann.
Der Autor schreibt zwar das welche folgen, jedoch kann ich keine finden.

Es steht ja nicht einmal beschrieben wie ich die PLatzhalter einsetze. Das andere Tutorial ist zwar bescheiden aber es ist sehr gut beschrieben.

Schade!

Gruss
 
Zuletzt bearbeitet:
Hallo,
also ich finde da jede Menge Beispiele. :rolleyes:
fanste hat gesagt.:
Hi,

Wie versprochen sind hier noch ein paar Code Beispiele.

Templatedatei und normale Platzhalter definieren
PHP:
<?php
    #Parser Klasse includen
    include('parser.php');
    
    #Parser initialisieren
    $tpl = new TemplateParser("/tutorials.de/PHP Tutorials/TemplateParser/");
    
    #Template hinzufügen
    $tpl->newFile("header.tpl");
    
    #Platzhalter hinzufügen (Platzhaltername, WERT)
    $tpl->addPlHo("HOME_URL","/index.php");
    $tpl->addPlHo("LOGO_URL","");
    $tpl->addPlHo("BOARD_NAME","example.com");
    $tpl->addPlHo("BOARD_DESCRIPTION","Grubi's Testforum");
    $tpl->addPlHo("F_NAVI","example.com->showforum");
    
    #Template parsen und ausgeben
    $tpl->parseTemplate();
?>
So könnte da dazugehörige Template aussehen.
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Language" content="de" />
        <title>Neue Seite 1</title>
        <link rel="stylesheet" type="text/css" href="forum.css" />
    </head>
    <body>
        <div class="body">
            <table border="0" width="100%" class="tborder">
                <tr>
                    <td width="25%" height="104" class="rowcol3" align="center"><a href="{HOME_URL}"><img border="0" src="{LOGO_URL}" alt="" /></a></td>
                    <td width="50%" height="104" colspan="2" class="rowcol3" align="center"><!--<div class="kanteunten">&nbsp;</div>-->{BOARD_NAME}<br /><br />{BOARD_DESCRIPTION}</td>
                    <td width="25%" height="104" class="rowcol3">Hier kann auch noch was hin.</td>
                </tr>
                <tr>
                    <td width="100%" height="2" colspan="4" class="underhead"></td>
                </tr>
                <tr>
                    <td width="25%" height="19">&nbsp;</td>
                    <td width="25%" height="19" align="center">ControlPanel</td>
                    <td width="25%" height="19" align="center">Mitglieder</td>
                    <td width="25%" height="19" align="center">Suche</td>
                </tr>
                <tr>
                    <td width="100%" height="17" colspan="4" class="underhead"><span class="navigator">{F_NAVI}</span></td>
                </tr>
            </table><br />
Wenn man die
PHP:
$tpl->parseTemplate();
mit
PHP:
$tpl->print_out();
ersetzt, bekommt man folgende Ausgabe.
Code:
TemplateParser Object
(
    [TemplatePlHo] => Array
        (
            [0] => Array
                (
                    [.] => Array
                        (
                            [HOME_URL] => /index.php
                            [LOGO_URL] =>
                            [BOARD_NAME] => example.com
                            [BOARD_DESCRIPTION] => Grubi's Testforum
                            [F_NAVI] => example.com->showforum
                        )

                )

        )

    [CountTemplateFile] => 0
    [openedTemplate] => Array
        (
            [0] => <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="de" />
<title>Neue Seite 1</title>
<link rel="stylesheet" type="text/css" href="forum.css" />
</head>

<body>
<div class="body">
<table border="0" width="100%" class="tborder">
  <tr>
    <td width="25%" height="104" class="rowcol3" align="center"><a href="{HOME_URL}"><img border="0" src="{LOGO_URL}" alt="" /></a></td>
    <td width="50%" height="104" colspan="2" class="rowcol3" align="center"><!--<div class="kanteunten">&nbsp;</div>-->{BOARD_NAME}<br /><br />{BOARD_DESCRIPTION}</td>
    <td width="25%" height="104" class="rowcol3">
        Hier kann auch noch was hin.
    </td>
  </tr>
  <tr>
    <td width="100%" height="2" colspan="4" class="underhead"></td>
  </tr>
  <tr>
    <td width="25%" height="19">&nbsp;</td>
    <td width="25%" height="19" align="center">ControlPanel</td>
    <td width="25%" height="19" align="center">Mitglieder</td>
    <td width="25%" height="19" align="center">Suche</td>
  </tr>
  <tr>
    <td width="100%" height="17" colspan="4" class="underhead"><span class="navigator">{F_NAVI}</span></td>
  </tr>
</table>
<br />

        )

    [templatePath] => /tutorials.de/PHP Tutorials/TemplateParser/
)
#########################

Templatedatei und verschachtelte Blöcke definieren

PHP:
<?php
    #Parser Klasse includen
    include('parser.php');
    
    #Parser initialisieren
    $tpl = new TemplateParser("/tutorials.de/PHP Tutorials/TemplateParser/");
    
    #Template hinzufügen
    $tpl->newFile("index.tpl");
    
    #verschachtelte, oder auch nicht verschachtelte Blöcke definieren. (BLOCKNAME1.BLOCKNAME2.usw, "array mit Platzhaltern)
    $tpl->addBlockPlHo("CATEGORIE",array("CATEGORIE_NAME" => "testkategorie"));
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test",
                                       "F_LAST_POSTER" => "fanste<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "50",
                                       "F_TOPICS" => "1000"
                                       )
                        );
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test1",
                                       "F_LAST_POSTER" => "fanste1<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "501",
                                       "F_TOPICS" => "10001"
                                       )
                        );
    $tpl->addBlockPlHo("CATEGORIE",array("CATEGORIE_NAME" => "testkategorie1"));
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test",
                                       "F_LAST_POSTER" => "fanste<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "50",
                                       "F_TOPICS" => "1000"
                                       )
                        );
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test1",
                                       "F_LAST_POSTER" => "fanste1<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "501",
                                       "F_TOPICS" => "10001"
                                       )
                        );
    
    $tpl->parseTemplate();
?>
So könnte da dazugehörige Template aussehen.
HTML:
<table width="100%" class="tborder" cellspacing="1" cellpadding="3" border="0">
    <tr>
        <th class="rowcol3" align="center" height="25">Foren</th>
        <th class="rowcol3" align="center" nowrap="nowrap" height="25">letzter Beitrag</th>
        <th class="rowcol3" align="center" height="25">Antworten</th>
        <th class="rowcol3" align="center" height="25">Themen</th>
    </tr>
    <!-- BEGIN CATEGORIE -->
    <tr>
        <td class="underhead" width="100%">{CATEGORIE_NAME}</td>
        <td class="underhead"></td>
        <td class="underhead"></td>
        <td class="underhead"></td>
    </tr>
    <!-- BEGIN FORUM -->
    <tr>
        <td width="100%" height="20" class="rowcol1">
            <div style="width:400px;height:100%;margin-left:5px;">
                <span class="textnormal">{FORUM_NAME}</span>
            </div>
        </td>
        <td height="20" class="rowcol2" align="center"><span class="textmittel">{F_LAST_POSTER}</span></td>
        <td height="20" class="rowcol2" align="center"><span class="textmittel">{F_ANSWERS}</span></td>
        <td height="20" class="rowcol2" align="center" nowrap="nowrap"><span class="textmittel">{F_TOPICS}</span></td>
    </tr>
    <!-- END FORUM -->
    <!-- END CATEGORIE -->
</table>
Auch hier kann man wieder die letzte Funktion ersetzten.
Die Ausgabe: (Habe den HTML Code mal weggelassen.)

Code:
TemplateParser Object
(
    [TemplatePlHo] => Array
        (
            [0] => Array
                (
                    [.] => Array
                        (
                        )

                    [CATEGORIE.] => Array
                        (
                            [0] => Array
                                (
                                    [CATEGORIE_NAME] => testkategorie
                                    [FORUM.] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [FORUM_NAME] => test
                                                    [F_LAST_POSTER] => fanste<br />15.16.02 16:56 Uhr
                                                    [F_ANSWERS] => 50
                                                    [F_TOPICS] => 1000
                                                )

                                            [1] => Array
                                                (
                                                    [FORUM_NAME] => test1
                                                    [F_LAST_POSTER] => fanste1<br />15.16.02 16:56 Uhr
                                                    [F_ANSWERS] => 501
                                                    [F_TOPICS] => 10001
                                                )

                                        )

                                )

                            [1] => Array
                                (
                                    [CATEGORIE_NAME] => testkategorie1
                                    [FORUM.] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [FORUM_NAME] => test
                                                    [F_LAST_POSTER] => fanste<br />15.16.02 16:56 Uhr
                                                    [F_ANSWERS] => 50
                                                    [F_TOPICS] => 1000
                                                )

                                            [1] => Array
                                                (
                                                    [FORUM_NAME] => test1
                                                    [F_LAST_POSTER] => fanste1<br />15.16.02 16:56 Uhr
                                                    [F_ANSWERS] => 501
                                                    [F_TOPICS] => 10001
                                                )

                                        )

                                )

                        )

                )

        )

    [CountTemplateFile] => 0
    [openedTemplate] => Array
        (
            [0] => TEMPLATECODE

        )

    [templatePath] => /tutorials.de/PHP Tutorials/TemplateParser/
)
Der einzige Unterschied sieht man bei den Platzhaltern für die Blöcke. Einfach mal anschauen. Wird sich alles von selbst erklären.

Natürlich kann man auch beides in eine Datei setzten.

PHP:
<?php
    #Parser Klasse includen
    include('parser.php');
    
    #Parser initialisieren
    $tpl = new TemplateParser("/tutorials.de/PHP Tutorials/TemplateParser/");
    
    #Template hinzufügen
    $tpl->newFile("header.tpl");
    
    #Platzhalter hinzufügen
    $tpl->addPlHo("HOME_URL","/index.php");
    $tpl->addPlHo("LOGO_URL","");
    $tpl->addPlHo("BOARD_NAME","example.com");
    $tpl->addPlHo("BOARD_DESCRIPTION","Fanste's Testforum");
    $tpl->addPlHo("F_NAVI","example.com->showforum");
    
    #Template hinzufügen
    $tpl->newFile("index.tpl");
    
    #verschachtelte, oder auch nicht verschachtelte Blöcke definieren. (BLOCKNAME1.BLOCKNAME2.usw, "array mit Platzhaltern)
    $tpl->addBlockPlHo("CATEGORIE",array("CATEGORIE_NAME" => "testkategorie"));
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test",
                                       "F_LAST_POSTER" => "fanste<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "50",
                                       "F_TOPICS" => "1000"
                                       )
                        );
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test1",
                                       "F_LAST_POSTER" => "fanste1<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "501",
                                       "F_TOPICS" => "10001"
                                       )
                        );
    $tpl->addBlockPlHo("CATEGORIE",array("CATEGORIE_NAME" => "testkategorie1"));
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test",
                                       "F_LAST_POSTER" => "fanste<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "50",
                                       "F_TOPICS" => "1000"
                                       )
                        );
    $tpl->addBlockPlHo("CATEGORIE.FORUM",array("FORUM_NAME" => "test1",
                                       "F_LAST_POSTER" => "fanste1<br />15.16.02 16:56 Uhr",
                                       "F_ANSWERS" => "501",
                                       "F_TOPICS" => "10001"
                                   )
                        );
    
    $tpl->parseTemplate();
?>
Die Ausgabe, usw kann man sich ja einfach mal selbst anschauen.


Das wars erst einmal.

Quelle: http://www.tutorials.de/forum/php-t...mit-verschachtelten-bloecken.html#post1256385
mfg
forsterm
 
Zurück