[Funktion] Einfaches Template :(

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

  • [Funktion] Einfaches Template :(

    Also ich bin anfänger und versuche mir durch Praxis etwas php beizubringen.
    Leider scheitert es nach dem was ich gelesen habe irgendwie aber schon an einem einfachen Problem.
    Ich möchte so eine art kleines template system haben, bitte jetzt nicht smarty oder ähnliches empfehlen das ist mir bekannt hilft mir nur nicht beim Lernen und verstehen der ganzen Schematik.

    hier mal mein anfang.

    index.php
    ./templates/index.htm

    die index.php soll jetzt daten aus einer Datenbank auslesen was auch noch funktioniert.
    Lass ich die daten mit echo ausgeben werden Sie einwandfrei angezeigt, ich möchte aber das sie in die index.htm übergeben werden.

    PHP-Code:
    include ('./templates/header.htm'); 
    habe ich gemacht und dort die variable eingetragen.
    Leider zeigt er mir dann auch nur die Variable an sprich $testausgabe (erscheint genauso auf dem bildschrim)

    Wie erreich ich es das der Inhalt der Variable dargestellt wird ?
    und ist dann auch das auslesen von Arrays möglich ?

    Ach ja ich habe schon das Forum und div Google Suchfunktionen benutzt bin aber nicht wirklich hilfreich fündig geworden, da fast überall nur auf bestehende Template engine verwiesen wird

  • #2
    Der PHP-Code muss ausgeführt werden, z.B. per eval (ist aber NICHT empfehlenswert!).
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Templatesysteme funktionieren etwas anders, als du scheinbar glaubst.
      Das Template wird gelesen (nicht includiert), spezielle Platzhalter werden durch den Inhalt spezieller Variablen ersetzt und dann wird ausgegeben.

      Schau dir mal eine Template-Klasse genauer an, gern auch eine aus den Codeschnipseln hier.

      Kommentar


      • #4
        So ich hoffe das es OK ist das ich in diesem Thread weiter meine Fragen stelle.

        das mit der übergabe öhm einlesen der .tpl datei funktioniert jetzt endlich.
        Es mit "eval" mache (wieso eigentlich nicht empfehlenswert ? )

        jetzt hab ich allerdings ein anderweitiges Problem.
        Ich möchte aus einer Datenbank momentan probehalber 4 texte auslesen.
        Leider zeigt er mir aber immer nur den letzten text 4x an

        Also ausgabe sollte auf der seite sein:

        Testtext1
        Testtext2
        Testtext3
        Testtext4

        ausgabe ist jedoch immer nur:

        Testtext4




        PHP-Code:
        $anfrage=mysql_query("select * from inhalt where ausgabe='1'");  
        while (
        $zeile=mysql_fetch_array($anfrage)) {

                        
        $a1_1=$zeile[text];

          }

                 eval(
        "dooutput(\"".gettemplate("index")."\");"); 

        der aufruf in der .tpl datei zum anzeigen

        $a1_1
        $a1_2
        $a1_3
        $a1_4


        ich dachte ich könnte in der while schleife $a1_$wert machen wobei ich den $wert automatisch durch $wert++ bei jedem durchlauf hochzählen lasse.
        Naja das dachte dann aber wohl auch nur ich

        Kommentar


        • #5
          Hmm kann oder will mir keiner helfen ?
          oder hab ich zu unverständlich geschrieben ?

          weil wenn ich die Tabelle direkt ins php srcipt schreibe geht es ja ich will es aber an die .tpl übergeben.

          Kommentar


          • #6
            Original geschrieben von Bart


            PHP-Code:
            $anfrage=mysql_query("select * from inhalt where ausgabe='1'");  
            while (
            $zeile=mysql_fetch_array($anfrage)) {

                            
            $a1_1=$zeile[text];

              }

                     eval(
            "dooutput(\"".gettemplate("index")."\");"); 
            Wasn das für ne schleife ??

            $a1_1 wird so lange überschieben wie´s datensätze in deiner DB gibt.
            Sprich der letzte Datensatz bleibt über was willst du denn damit erreichen?
            gruss Chris

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

            Kommentar


            • #7
              das ist ja das problem in der .tpl würde es ja wie folgt ausgegeben.

              $a1_1
              $b1_1

              $a1_2
              $b1_2

              $a1_3
              $b1_3

              ...


              jetzt bekomme ich es nur nicht hin das er mir das in einer schleife ausließt und es in die variable setzt.
              Da es 5 x oder auch 10 x sein kann die ausgabe muss es ja in eine schleife (je nach anzahl wechselt er das template)

              PHP-Code:
              while ($zeile=mysql_fetch_array($anfrage)) {
              $anr++;

                              
              $a1_$anr=$zeile[schlagwort];
                              
              $b1_$anr=$zeile[text];

                } 
              Das war mein kläglicher verusch

              Kommentar


              • #8
                du möchtest dich mit E_ALL und arrays vertraut machen?

                infoquellen:
                www.php.net (!)
                www.schattenbaum.net
                www.php-faq.de
                http://tut.php-q.net

                Kommentar


                • #9
                  hmm da hatte ich teilweise schon gelesen (ok nur deutsche seiten) also ich pack das ganze doch schon in einen array , funktioniert ja auch wenn ich die tabelle direkt ins php einbinde nur eben nicht mit der .tpl
                  hmm das e_all hilft glaub nicht da ich wohl grundlegend noch einen denkfehler drinnen habe !
                  Zuletzt geändert von Bart; 27.07.2005, 20:45.

                  Kommentar


                  • #10
                    PHP-Code:
                    while ($zeile=mysql_fetch_array($anfrage)) {
                    $anr++;

                                    ${
                    'a1_'.$anr}=$zeile[schlagwort];
                                    ${
                    'b1_'.$anr}=$zeile[text];

                      } 
                    ^^ das müsste dich von der gröbsten not befreien (stichwort "variable variablen")... doch wie gesagt, ideal ist soetwas nicht.


                    eine "einfache" abarbeitung per array könnte so aussehen:
                    platzhalter im template: {text1} {text2} {text3} ...
                    PHP-Code:
                    $anr=0;
                    while (
                    $zeile=mysql_fetch_array($anfrage)) {
                                   
                    $anr++;
                                   
                    $out['text'.$anr]=$zeile['text'];
                    }
                    $data implode(''file('pfad/zu/deinemTemplate.html'));

                    foreach(
                    $out as $k=>$v)
                        
                    $data str_replace('{'.$k.'}'$v$data);

                    echo 
                    $data
                    auch nicht ideal, aber zum üben und verstehen sollte es reichen.
                    Kissolino.com

                    Kommentar


                    • #11
                      Super danke Wurzel deine Lösung funktioniert.

                      Naja die erste, die zweite zeigt mir in der html ausgabe die variabeln an statt deren Inhalt.
                      Na aber werde mich damit nochmal befassen muss ja gehen
                      Aber hilft wirklich etwas mehr zum verstehen. ich zerleg das mal und schau mir das jetzt mal im einzelnen an (also vorschlag 2) ....


                      THX: Bart

                      Kommentar


                      • #12
                        Original geschrieben von Bart
                        Naja die erste, die zweite zeigt mir in der html ausgabe die variabeln an statt deren Inhalt.
                        lies mein posting nochmal genau ... $test1 ist doof ... {test1} soll es sein bei version 2
                        Kissolino.com

                        Kommentar


                        • #13
                          öhm ja genau das hab ich natürlich sofort gesehen *lügohnerotzuwerden*

                          schnell die .tpl änder.

                          Ich sag doch deine scripts funktionieren einwandfrei


                          thx nochmal ..... wenn das so weiter geht haste mal nen bierchen gut oder auch zwei ^^

                          Kommentar


                          • #14
                            Hmmm also bisher funktionierte das ja Super, nur jetzt wollte ich das nur ein teil des Datensatzes ausgegeben wird.
                            Wollte es über STRTOK lösen.
                            Aber egal wo ich es einbinde er trennt mir die ausgelesenen daten nicht ab.

                            hier mal der quelltextauszug:

                            PHP-Code:
                            $anfrage=mysql_query("select * from inhalt where ausgabe='1'");

                            $anr=0;
                            while (
                            $zeile=mysql_fetch_array($anfrage)) {
                                           
                            $anr++;
                                           
                            $out['schlagwort'.$anr]=$zeile['schlagwort'];
                                           
                            $out['text'.$anr]=$zeile['text'];
                                  }

                            $data implode(''file('./templates/index.tpl'));

                            foreach(
                            $out as $k=>$v)
                                
                            $data str_replace('{'.$k.'}'$v$data);

                            $i 0;
                            $token strtok($data," ");
                            while ((
                            $token) && ($i <= 10))
                            {
                                    
                            $data $data $token " ";
                                    
                            $token strtok(" ");
                                    
                            $i++;
                            }
                                    
                            $data trim($data);

                            echo 
                            $data ".......» mehr »" 
                            Zuletzt geändert von Bart; 29.07.2005, 12:16.

                            Kommentar


                            • #15
                              Öhm hat sich erledigt .... nach der ersten Kanne Kaffee ist mir aufgefallen das ich es mal wieder unnötig kompliziert angegangen bin ^^

                              Gelöst durch ergänzung in der Zeile:

                              PHP-Code:
                              $out['text'.$anr]=substr($zeile['text'],0,170); 

                              Kommentar

                              Lädt...
                              X