Template-Klasse - Wie und warum

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

  • #16
    Hi nochmal:

    danke für eure antworten. Nun weiss ich was man damit machen...!


    @moqui:
    ich schaffs irgendwie net die Template Klasse richtig zui benützen.

    PHP-Code:
    $t = new mmTemplate("test2.htm");
    $t->assign("name","crazypip");
    $t->go_fly(); 
    test2.htm
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body>
    {name}
    </body>
    </html>
    normal müsste der mir nun test2.htm (mit <head><body>usw) ausgeben mit {name} = CrazyPip ...

    der zeigt mir aber nichts an bis auf : crazypip

    was habe ich falsch gemacht? kann mir einer Hilfestellung (ich würde es "starthilfe" nennen ) geben?

    cya CrazyPip

    Kommentar


    • #17
      Um die mmTemplate zu beschleunigen kann man die "einfachen" Variablen z. B. mit Hilfe von

      string str_replace(string needle, string str, string haystack)

      ersetzen anstatt mit Regulären Ausdrücken zu arbeiten. Bei den Blöcken funktioniert das ähnlich. Man sucht nach dem Anfangs-Teil des Blockes, bezieht dessen Position. Danach sucht man nach dem End-Teil des Blockes und bezieht auch dessen Position. Nun berechnet man End-Position minus Anfangs-Position und "schneidet" alles was dazwischen liegt heraus. Geht alles wunderbar mit den String-Funktionen von PHP.

      Der Geschwindigkeitsvorteil ist durch das komplette wegfallen der Regulären Ausdrücke enorm. Ich denke so um die 50-75%.

      Liebe Grüße,
      Cassiel

      Kommentar


      • #18
        tag,

        habe ne ähnliche klasse, wie hier schon beschrieben, allerdings selbst geschrieben und deshalb vielleicht nicht so performant.
        PHP-Code:
        class template
        {

        var 
        $host;
        var 
        $user;
        var 
        $pwd;
        var 
        $db;
        var 
        $content;
        var 
        $matches = array();
        var 
        $vars    = array();
        var 
        $open_tag"{";
        var 
        $end_tag "}";

        function 
        template($tpl)
        {
        $this->host $GLOBALS["mysqlhost"];
        $this->user $GLOBALS["mysqluser"];
        $this->pwd  $GLOBALS["mysqlpwd"];
        $this->db   $GLOBALS["installdb"];
        $link mysql_connect($this->host$this->user$this->pwd);
        mysql_select_db($this->db$link);
        $query "SELECT code FROM cms2_template".$GLOBALS["bu_flag"]." WHERE name='$tpl'";
        $result mysql_query($query);
        if(!
        mysql_num_rows($result)){print "Nicht existentes Template aufgerufen!";}
        $data mysql_fetch_array($result);
        $this->vars = array();
        $this->content $data["code"];
        $this->scan_tpl();
        }

        function 
        scan_tpl()
        {
        preg_match_all("/$this->open_tag.*?$this->end_tag/is"$this->content$matches);
        $this->matches $matches;
        }

        function 
        assign($varname$varvalue)
        {
        foreach(
        $this->matches as $array)
        {foreach(
        $array as $placeholder)
         {if(
        $placeholder == $this->open_tag.$varname.$this->end_tag)
          {
        $var = array($varname => $varvalue);
           
        array_push($this->vars$var);
          }
         }

        }

        function 
        parse()
        {
        foreach(
        $this->vars as $array)
        {foreach(
        $array as $varname=>$varvalue)
         {
        $this->content str_replace($this->open_tag.$varname.$this->end_tag$varvalue$this->content);}
        }
        print 
        $this->content;
        }

        function 
        get_content()
        {
        foreach(
        $this->vars as $array)
        {foreach(
        $array as $varname=>$varvalue)
         {
        $this->content str_replace($this->open_tag.$varname.$this->end_tag$varvalue$this->content);}
        }
        return 
        $this->content;
        }

        function 
        test()
        {
        print 
        "gefundene platzhalter mit <font color=\"red\">".$this->open_tag."</font> (key) <font color=\"red\">".$this->end_tag."</font> :<ul type=\"square\">";
        foreach (
        $this->matches as $array)
        {foreach(
        $array as $placeholder)
         {print 
        "<li>".$placeholder."</li>";}
        }
        print 
        "</ul><br>zugewiesene variablen:<ul type=\"square\">";
        foreach(
        $this->vars as $array)
        {foreach(
        $array as $varname=>$varvalue)
         {print 
        "<li>".$varname." = ".$varvalue."</li>";}
        }
        print 
        "</ul>";
        }


        Ausführungszeiten kann ich nur ungenau bestimmten, da ich diese Klasse nur in Verbindung mit nem anderen großen Script verwenden: in den meisten Fällen wo im Rest des Skripts wenig DB-Zugriffe stattfinden so 0.0237, bei vielen Zugriffen je nach Lokal oder auf Remote schonmal bis zu 0.08, aber immerhin keine regulären Ausdrücke.
        Was ich eigentlich fragen wollte:

        function parsetemplate($template_name){
        $file="./".$template_name.".html";
        $template=$file;
        return str_replace("\"","\\\"",implode("",file($template)));
        }

        Dieses ganz einfach tpl-Funktion hab ich vor was weiß ich wie lange mal gefunden, und sie ist bis jetzt die schnellste. Aber ich mit der 3. Anweisung in der Funktion nicht ganz klar: was genau passiert da?
        Erst wird jeder String der TPL-Datei in ein Array zerpflügt und dann durch implode() zu einem einzigen String wieder zusammen, und dann wird noch " durch \" ersetzt, warum? Und wie kommen die Variablen fom Skript ins TPL, bzw. viel mehr ihre Inhalte?

        Kommentar


        • #19
          Re: [Workshop] Schnell Langsam

          Original geschrieben von is_real
          Nicht zu viele Variablen, wann nehme ich Konstanten?

          Vielleicht kann mir da jemand auch einen Link geben. Wäre dankbar!
          Konstanten sind nur dann sinnvoll wenn der Wert dieser konstant bleibt, es ist auch nicht möglich den Wert einer Konstante zu ändern (soweit ich informiert bin).

          Ob dadurch ein merkbarer Performancegewinn zustande kommt ist nach meiner Meinung allerdings sehr fraglich.

          Liebe Grüße,
          Cassiel

          Kommentar


          • #20
            Original geschrieben von MaxPayne
            tag,

            habe ne ähnliche klasse, wie hier schon beschrieben, allerdings selbst geschrieben und deshalb vielleicht nicht so performant.

            Ausführungszeiten kann ich nur ungenau bestimmten, da ich diese Klasse nur in Verbindung mit nem anderen großen Script verwenden: in den meisten Fällen wo im Rest des Skripts wenig DB-Zugriffe stattfinden so 0.0237, bei vielen Zugriffen je nach Lokal oder auf Remote schonmal bis zu 0.08, aber immerhin keine regulären Ausdrücke.
            Guten abend,

            deine Klasse kann bei vielen Zugriffen auch nicht performanter sein als andere. Die Idee Templates in einer Datenbank abzulegen ist meiner Meinung nach fern ab aller Logik.

            Datenbanken wurden erstellt um Daten zu katalogisieren - eine Template dort abzulegen kommt ungefähr dem Versuch gleich den Inhalt eines Buches mit Hilfe einer Datenbank zu katalogisieren.

            Genau dort liegt der Hund begraben: Das Dateisystem ist zig mal schneller als jede Datenbankabfrage. Probiere es selber einmal aus - du wirst sehen das Templates aus dem Dateisystem erheblich schneller sind.

            Btw: Du schriebst oben du nutzt keine regulären Ausdrücke? -Guck dir deinen Quellcode bitte noch mal genau an und dann sag mir erneut das Du keine regulären Ausdrücke verwendest.

            Liebe Grüße,
            Cassiel

            Kommentar


            • #21
              Btw: Du schriebst oben du nutzt keine regulären Ausdrücke? -Guck dir deinen Quellcode bitte noch mal genau an und dann sag mir erneut das Du keine regulären Ausdrücke verwendest
              Ich weiß *g* ist die falsche Klasse gewesen. Aber, das mit den Zugriffsgeschwindigkeiten kam mir noch nicht in den Sinn. Von daher ist ja die zweite Klasse, die ich gepostet hab viel besser und schneller.

              Kommentar


              • #22
                hallo,

                kann ich mit einer der genannten klassen (bzw. überhaupt einer template klasse) seiten durch aulsesen einer db erzeugen und diese auch statisch (also in html) speichern? damit wäre das prinzip der templates zwar ein wnig verfehlt (seiten in echtzeit zu generieren), doch hat das bei mir schon seinen sinn.

                also, kann eine der genannten template klassen auch statische seiten (html) erzeugen durch abfrage der inhalte aus einer datenbank?

                luke

                Kommentar


                • #23
                  warum sollte das nicht gehen. du brauchst nur den inhalt, der sonst ausgeben würde, in eine datei schreiben.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #24
                    Hallo,
                    ich habs immer noch nicht gerafft Muss dazu sagen das ich PHP noob bin und ich schaffe es gerade mal ein GB und counter frei zuschreiben.
                    Könnte jemand mal ein beispiel machen also eine komplette Seite (ohne inhalt) und zur Anschauung freigeben?

                    Also das ich die Seite auf rufen kann mit index.php?act=seite1 und index.php?act=seite2 (ok ich weis das das nicht genau ist was es machen soll) mir reicht auch seite1.php und seite2.php

                    Wäre nett danke

                    Kommentar


                    • #25
                      @silaz könnetst du bitte einen neuen thread im php-dev forum aufmachen. ich habe jetzt keine lust 3 seiten unsinn zu lesen, um zu verstehen, wo dein dein problem liegt
                      h.a.n.d.
                      Schmalle

                      http://impressed.by
                      http://blog.schmalenberger.it



                      Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                      ... nur ohne :-)

                      Kommentar

                      Lädt...
                      X