[Funktion] Fehler mit Templates

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

  • [Funktion] Fehler mit Templates

    Ich mache gerade meine ganze Seite neu und will nun mit Templates arbeiten, da die einfach viel dynamischer und komfortabler sind. Ein Freund von mir hat ein Template-System geschrieben, kennt sich aber nicht so gut aus.

    Hier ist einmal der Seitenaufbau für die Templates:

    PHP-Code:
    <?php
        error_reporting
    (E_ALL);
    //index.php
        
    require ("inc/funcions.php");
        require (
    "header.php");
        eval (
    "\$header .= \"".gettemplate("header")."\";");
        eval (
    "dotpl(\"".gettemplate("template")."\");");
    ?>
    PHP-Code:
    <?php
        
    //header.php
        
    $header1 "1x1.png";
        
    $header2 "1x2.png";
    ?>
    PHP-Code:
    <?php
        
    //inc/functions.php
        
    function gettemplate($name) {
            
    $template  =  file("./templates/".$name.".tpl");
            
    $template  =  implode("",$template);
            
    $template  =  str_replace("\"""\\\""$template);
            return 
    $template;
        }

        function 
    dotpl ($template) {
            echo 
    $template;
        }
    ?>
    Mit diesem Code mache ich meine Templates. Im Ordner "templates" sind diese dann unterm dem Namen "header.tpl" etc. Dieser HTML Code für das Template header.tpl müsste dann in der Variable $header gespeichert werden.
    Und am Ende müsste "template.tpl" ausgegeben werden, wo man dann $header einbauen kann.

    Aber jetzt steht da folgender Fehler:
    Notice: Undefined variable: header in /www/htdocs/w0079aa7/main.php(9) : eval()'d code on line 1

    Woran liegt das?

    Ich möchte das so umschreiben, dass das ganz richtig funktioniert. Ich hoffe, ihr versteht den Seitenaufbau. Sonst könnt ihr ja fragen.

    PS: Ihr könnt mich auch per ICQ anschreiben, denn so ist die Kommunikation um einiges leichter. Meine ICQ Nummer ist 427137166.
    Zuletzt geändert von wahsaga; 04.11.2006, 19:37.
    [color=red]Meine Seite:[/color]
    American-Dad.de

  • #2
    Re: [Funktion] Fehler mit Templates

    OffTopic:
    Entferne bitte das aufdringliche Banner aus deiner Signatur.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: [Funktion] Fehler mit Templates

      OffTopic:
      Ein Freund von mir hat ein Template-System geschrieben, kennt sich aber nicht so gut aus.



      Meinst du nicht das du uns die Zeile 9 deiner main.php mal offenbaren solltest? (abgesehen davon das ein NOTICE kein wirklicher Fehler ist)
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Ein Freund von mir hat ein Template-System geschrieben, kennt sich aber nicht so gut aus.
        Das sieht man!
        Das ist kein Template-System sondern nicht viel mehr als ein aufgebohrtes include.
        Probier mal Smarty - übrigens von Leuten geschrieben, die sich auskennen.

        Kommentar


        • #5
          Original geschrieben von hhcm
          Meinst du nicht das du uns die Zeile 9 deiner main.php mal offenbaren solltest? (abgesehen davon das ein NOTICE kein wirklicher Fehler ist) [/B]
          Tut mir Leid, das habe ich wohl übersehen. Zeile 9 ist da wo,
          PHP-Code:
          eval ("\$header .= \"".gettemplate("header")."\";"); 
          steht. Ich weiß jetzt, woran der Fehler liegt: Man muss so schreiben:

          PHP-Code:
                          if(isset($header)) {
                              eval (
          "\$header .= \"".gettemplate("header")."\";");
                          } else {
                              eval (
          "\$header = \"".gettemplate("header")."\";");
                          } 

          Original geschrieben von onemorenerd
          Das sieht man!
          Das ist kein Template-System sondern nicht viel mehr als ein aufgebohrtes include.
          Probier mal Smarty - übrigens von Leuten geschrieben, die sich auskennen.
          Smarty hab ich mal probiert, aber da hab ich mich mit den Erklärungen nicht ausgekannt. Ich habe auch bei PHP TUT geschaut, aber das war mir alles zu kompliziert beschrieben. Deshalb hat mir auch mein Freund das Template-System von ihm gegeben.
          Und wo liegt jetzt genau der Unterschied zwischen einem echten Template-System und dem von ihm?

          Dann will ich mal Smarty probieren: Ich muss da jetzt den heruntergeladenen Ordner auf den Server in das Verzeichnis /smarty/ geben?
          Zuletzt geändert von Mra; 04.11.2006, 22:53.
          [color=red]Meine Seite:[/color]
          American-Dad.de

          Kommentar


          • #6
            Original geschrieben von Mra
            Deshalb hat mir auch mein Freund das Template-System von ihm gegeben.
            wie gesagt, das ist kein templatesystem sondern eine umständliche frickelei für include.
            statt: eval ("\$header .= \"".gettemplate("header")."\";");
            kannst du einfacher: include('templates/header.tpl'); schreiben
            Und wo liegt jetzt genau der Unterschied zwischen einem echten Template-System und dem von ihm?
            dass du gezielt platzhaltern werte (html) zuweisen kannst - können alle.
            dann gibt es noch welche, die html-blöcke unterstützen.
            und dann gibt es noch killer-systeme, wie smarty, die eine eigene makrosprache mitbringen.


            Dann will ich mal Smarty probieren
            lass es einfach
            so, wie es aussieht (nach deiner problembeschreibung/anforderung), fährst du mit include am besten.

            Kommentar


            • #7
              Ich habe jetzt eine Frage zu Smarty.

              Ich will ja die Seite auch bei jeder Unterseite mit einem Design versehen, also brauch ich auch immer dasselbe Template. Nur der Inhalt von einer Tabellen-Zelle soll anders sein. Welches Template ich da benutzen, will ich mit php als eine Variable definieren.

              Ich dachte da, dass ich das einfach so mache:

              PHP-Code:
              <?php
                  error_reporting
              (E_ALL);
                  
              define('SMARTY_DIR''/www/htdocs/w0079aa7/smarty/');
                  
              // den Pfad entsprechend anpassen. Der Slash am ende muss
                  // vorhanden sein

                  
              require(SMARTY_DIR.'Smarty.class.php');
                  
              // Die Smarty-Klasse laden

                  
              $smarty = new Smarty;
                  
              // Neues Objekt erstellen

                  
              $namen[1] = "Alex";
                  
              $namen[2] = "Reini";
                  
              $namen[3] = "Monika";

                  
              $smarty->assign('name'$namen);
                  
              $smarty->assign('clanname''L33T HaXX0r Clan');
                  
              $smarty->assign('page''test');

                  
              $smarty->display('index.tpl');
              ?>
              Code:
              {* Ein Kommentar mit Smarty
                 Wie in PHP wird dieser dann von dem Smarty-System
                 ignoriert. Der Browser bekommt dann diesen Kommentar
                 auch nicht zu sehen, obwohl er direkt im Template
                 drinsteht *}
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml">
                  <head>
                      <title>Testen macht spaß</title>
                      <meta http-equiv="Content-Type" content="text/xhtml; charset=ISO-8859-1" />
                  </head>
                  <body>
                  {foreach from=$name item=name}
                      <p>
                          Willkommen {$name} auf der Seite vom Clan {$clanname}
                      </p>
                      {include file="{$page}.tpl"}
                  {/foreach}
                  </body>
              </html>
              Aber jetzt steht da folgender Fehler:

              Warning: Smarty error: unable to read resource: "{" in /www/htdocs/w0079aa7/smarty/Smarty.class.php on line 1095

              Was muss ich da also jetzt tun, damit ich das richtig hinbekomme.
              [color=red]Meine Seite:[/color]
              American-Dad.de

              Kommentar


              • #8
                Die Anweisung {include file="{$page}.tpl"} kann so nicht funktionieren. Hättest du die Fehlermeldung gelesen, statt gleich nach Muttis Rockzipfel zu greifen, wäre dir aufgefallen, dass Smarty eine Datei namens "{" öffnen will. Klappt natürlich nicht, weil es die nicht gibt.
                Warum will er "{" öffnen? Na vielleicht weil die { innerhalb eines bereits mit {} umschlossenen Blockes eine andere Wirkung hat? Da wärst du sicher auch selbst drauf gekommen, ne? Und nun ziehst du die finale Schlußfolgerung gefällig selbst - und wenn es die ist, ins Manual zu schauen, dann ist es eben so.

                Kommentar

                Lädt...
                X