Variablen werden im Template nicht...

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

  • Variablen werden im Template nicht...

    Guten Abend,

    Ich habe ein Template System,dass .htm Datein auf dem Server ausliest(also ein FlatFile Template System).Das funktioniert so:

    Code:
            function flattemp(  $template , $extension="htm" ) { 
            
                return str_replace( "\"", "\\\"", implode( "", file( "templates/".$template.".".$extension ) ) );  
                
            }
    
    
    /* :: Ausgeben eines Templates
    eval("echo(\"".flattemp( TEMPLATENAME )."\");");
    
    
    /* :: Template als Variable speichern,um es in einem anderen Template wiederzuverwenden
    eval ("\$varname .= \"".flattemp( TEMPLATENAME )."\";");
    Was ich nun will,ist anstatt immer wieder den eval() Befehl zu benutzten,einen einfacheren Weg zu benutzten,wie z.B.
    PHP-Code:
    tempTEMPLATENAME ); 
    Das mag jetzt einfach erscheinen.Man könnte das ja z.B. so lösen:
    Code:
    function temp($template) {
    return eval("echo(\"".flattemp( $template )."\");");
    }
    Wenn ich allerdings diesen Weg benutzte,werden keine Variablen im Template geparsed.Wie schaff ich es nun,dass dieser Weg wirklich funktioniert?

    Bye,
    Sven

  • #2
    benutze das Array $GLOBALS oder die neuen Superglobals im Template
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Danke für die Antwort.
      Kannst du das bitte nochmal etwas erläutern?
      Wenn ich z.B. anstatt der Variable '$post_count' '$GLOBALS[$post_count]' einsetze,ändern sich nichts.Wie soll ich das verwenden?

      Kommentar


      • #4
        $post_count => $GLOBALS[post_count]
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Danke,hab die Variable nur vertauscht gehabt... (war posts_count,nicht post_count)
          Hmm...Wie macht man das bei Arrays?$GLOBALS[$user[userid]]
          funktioniert natürlich nicht:

          Parse error: parse error, unexpected '[', expecting ']' in c:\phpdev\www\public\ubookdeluxe\index.php(41) : eval()'d code on line 34

          Kommentar


          • #6
            $user['userid'] => $GLOBALS['user']['userid']
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Funktioniert nicht,die Variable wird nicht geparsed...

              Kommentar


              • #8
                hmm ...

                lass mal die Hochkommata weg ...
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  Mit Hochkomma kommt sowieso ein Parser error.
                  Wenn ich z.B. statt $basic[bookname],$GLOBALS[basic][bookname] hinschreibe,dann gibt er das an der entsprechenden Stelle aus: Array[bookname]

                  Kommentar


                  • #10
                    Funktioniert immernoch nicht...

                    Hab jetzt ausserdem ein 2. Problem:
                    Ich habe diese Function um ein Template eine Variable zuzuweisen:
                    Code:
                        function tempvar( $var, $template ) {
                        
                            return eval ( "\$$var .= \"".flattemp( $template )."\";" );
                            
                        }
                    
                    /** :: Damit wird einem Template eine Variable zugewiesen:
                    $footer = tempvar( "footer", "footer" );
                    Dies funktioniert aber irgendwie nicht.Wenn ich nun im Template $GLOBALS[footer] stehen habe(oder $footer),dann wird das nicht ausgegeben.Ich habs natürlich auch schon mit einem einfachem 'echo $footer;' probiert,was aber auch nicht funktioniert hat...

                    Kommentar


                    • #11
                      Ok,ich will mal das Topic nach oben schieben...
                      Ich kriegs nämlich echt nicht raus

                      Kommentar


                      • #12
                        hui... ich probiers mal:
                        PHP-Code:
                         function tempvar$var$template ) {
                                global ${
                        $var};
                                eval ( 
                        "${$var} .= \"".flattemp$template )."\";" );   
                            } 

                        dann sollte
                        PHP-Code:
                        tempvar"footer""footer" ); 
                        eigentlich funzen.
                        eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

                        Kommentar


                        • #13
                          Super!Danke!Es funktioniert!
                          Jetzt schau ich erstmal,warum das überhaupt funzt,will ja schließlich auch was lernen

                          Und wegen dem anderen:
                          Wie kann ich Arrays mit den beiden Templatesystemen benutzten?
                          $GLOBALS[basic][bookname] funktioniert nicht.Dann parsed er nur $GLOBALS[basic] und gibt "Array" aus,weil die Variable $basic ja auch ein Array ist.Aber ich will ja $basic[bookname] ausgeben.Wie mach ich das?

                          Kommentar


                          • #14
                            Tut mir leid,dass ich das hier nochmal schiebe,aber ich kriege nicht raus,wie ich Arrays in meinem Template ausgebe...

                            Zusammenfassung:
                            Hiermit gebe ich Templates aus:
                            Code:
                            function flattemp(  $template , $extension="htm" ) { 
                                    
                                        return str_replace( "\"", "\\\"", implode( "", file( "templates/".$template.".".$extension ) ) );  
                                        
                                    }
                            
                            function temp($template) {
                            return eval("echo(\"".flattemp( $template )."\");");
                            }
                            
                            temp( TEMPLATENAME );
                            Wenn ich diesen Weg nehme,funktioniert es nicht,normale Variablen in das Template zu schreiben,denn sie werden schlichtweg nicht geparsed.Also:
                            $testvar => $GLOBALS[testvar]

                            Wie schaff ich es nun,dass Arrays ausgegeben werden?
                            $GLOBALS[userinfo][username] funktioniert nicht.Dann parsed er nur $GLOBALS[userinfo] und gibt folgerichtig 'Array' aus,weil $userinfo ja ein Array ist.

                            Sorry für das viele Fragen,aber ich finds echt nich...
                            Ist sicherlich ganz leicht,aber grade bei den leichten Sachen schwächle ich

                            Kommentar

                            Lädt...
                            X