Smarty und Content

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

  • Smarty und Content

    Hi,
    ich habe gesehen, dass es sinnvoll ist, ein Standardtemplate zu erstellen ( mit metatags, title, etc. und dann den Inhalt der Seite ( den body ) mit einer Variable $CONTENT zu belegen. Nun wird immer wenn etwas angezeigt wird, die $CONTENT-variable mit einem Template belegt und dann das Standardtemplate aufgerufen. Dieses beinhaltet dann wiederum ein anderes Template und zeigt beides an.

    Jetzt lese ich mit file_get_contents immer eine template-datei aus und belege die Smarty Variable $CONTENT damit. Soweit klappt das auch, nur dass Smarty die Smartytags in dem Bodytemplate vollkommen ignoriert bei der Anzeige.
    Was mache ich falsch?

    MfG Daether

  • #2
    was ist denn "belegen" ?

    Sourcecode?

    Kommentar


    • #3
      Wenn ich es richtig verstanden habe, hast du ein Master-Template
      Code:
      <html>
      <head>
      ...
      </head>
      <body>
      {include file="header.tpl"}
      {include file="nav.tpl"}
      {sub file="$content.tpl"} <- "sub" gibt es nicht, include wäre aber nicht das selbe
      {include file="footer.tpl"}
      </body>
      </html>
      und davon abgeleitete Sub-Templates wie z.B.
      Code:
      <h1>{$headline}</h1>
      <p>{$text}</p>
      Nun das ist in Smarty so nicht vorgesehen. Du hast ja schon gemerkt, dass du das two pass compiling selbst nachbauen mußt.
      PHP-Code:
      // $smartyBody ist ein Objekt fürs Subtemplate
      // $smarty ist ein Objekt fürs Mastertemplate
      $smarty->assign('content'$smartyBody->fetch('content.sub.tpl')); 
      Wenn du es ein wenig anders angehst, erreichst du den selben Effekt: Binde den HTML-Kopf via include oder insert in jedes Content-Template ein.

      Du kannst auch ein pre-compile on change nachbauen, wie es große CMS haben, also bei jeder Änderung am Master alle davon abgeleiteten Subtemplates vorkompilieren. Dann brauchst du im Code nur ein Smarty-Objekt, kein two pass compiling (der eine pass ist ja der pre-compile) und kannst das Caching von Smarty problemlos nutzen.

      Kommentar


      • #4
        ok, ich habe mich wohl etwas schlecht ausgedrückt.

        Ich meine das so:

        PHP-Code:
        index.php 
        $smarty
        ->assign("benutzer" "TEST") ;
        $smarty->assign("passwort" "TESTPW") ;

        $content file_get_contents "../templates/drin.tpl.htm" ) ;
        $smarty->assign('CONTENT' $content ) ;
        $smarty->display('index.tpl.htm'); 
        Code:
        index.tpl.htm
        <html>
        
        <head>
        <meta http-equiv="cache-control" content="no-cache"> 
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        </head>
        
        <body>
        
        {$CONTENT}
        
        </body>
        
        </html>
        Code:
        <form method="post" action="index.php">
        
        {$name}<br>
        {$passwort}
        
        <input type="hidden" name="aufgabe" value="platzhalter"><br>
        
        <input type="submit" name="submit">
        </form>
        Also wollte ich per assign die Variable mit einem Template belegt.

        {$name} und {$passwort} sollten eigendlich jetzt belegt sein, mit TEST bzw. TESTPW. Ist es aber nicht, {$name} und {$passwort} werden als Text dargestellt.
        MfG Daether

        Kommentar


        • #5
          Wozu zum geier file_get_content?
          gruss Chris

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

          Kommentar


          • #6
            ich habe nicht viel Ahnung von smarty, aber ich glaube, dass
            @onemorenerd das gut erklärt hat
            PHP-Code:
            $smarty=new smarty;
            $smarty->assign("benutzer" "TEST") ;
            $smarty->assign("passwort" "TESTPW") ;

            $content =$smarty->fetch"../templates/drin.tpl.htm" ) ;
            $smarty2=new smarty;
            $smarty2->assign('CONTENT' $content ) ;
            $smarty2->display('index.tpl.htm'); 
            Slava
            bituniverse.com

            Kommentar


            • #7
              danke Slava.
              Jetzt verstehe ich das erst richtig, habe das von onemoreend nicht ganz verstenden, trotzdem nochmal danke an alle.

              Aber warum geht sollte ich denn das nicht machen :

              $smarty->assign("benutzer" , $benutzer ) ;
              $smarty->assign("passwort" , $passwort ) ;

              $smarty->assign('CONTENT' , $smarty->fetch('drin.tpl.htm'));
              $smarty->display('index.tpl.htm');

              Kommentar

              Lädt...
              X