Replaces in Templates - was ist ideal?

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

  • Replaces in Templates - was ist ideal?

    Wie mache ich die Replaces in den Templates am Besten?

    Habe also meine Vorlage mit ganz viel HTML drinne, die lade ich in eine Var ein und ersetze dann alle Platzhalter durch das was ich aus der DB ziehe. Welche Replace-Methode benutze ich dafür am Besten? (zwecks Geschwindigkeit, ...)

  • #2
    Also ich mache es in meiner mittels str_replace, weiss aber net ob das speed mäßig vorteilhaft ist. Aber der Vorteil ist das man mehrmal des selben Platzhalter aufeinmal ersetzen kann.
    mfg Flashfactor

    Gebildet ist, wer weiß, wo er findet, was er nicht weiß.

    Kommentar


    • #3
      Macht auf jeden Fall Sinn. Wenn ich jetzt näheres zum Speed wüsste. Aber alzu grwierend kanns ja net sein.

      Kommentar


      • #4
        Ich schätze auch nicht das der geschwindigkeitsunterschied so gewaltig ist. Da die heutigen Server eh schon net so schlecht ausgestattet sind. Jedenfalls bei meinem.
        mfg Flashfactor

        Gebildet ist, wer weiß, wo er findet, was er nicht weiß.

        Kommentar


        • #5
          ich würd das str_replace auf jede einzelne zeile der datei ansetzen, statt auf den ganzen datei-stream.

          Kommentar


          • #6
            wird das nicht eher langsamer?

            Kommentar


            • #7
              genau die frage stellt sich nicht, weil's sich in der praxis nicht viel nimmt. jedoch ist ram-speicher derzeit teuerer als prozessorleistung. man belastet zwar mehr den prozessor, durch häufigeren aufruf der statischen funktion str_replace(), hält aber zeitgleich speicher frei, weil bei jeder operation max. 4096 bytes eingelesen werden (sofern man die 4096 bytes angibt).

              Kommentar


              • #8
                Sehe ich ein.

                Weiter im Thema, gut das du den Beitrag wieder hoch geholt hast. Zwar (noch) alles Theorie aber dennoch.

                Wenn ich jetzt meinen plazhalter {TEMPLATE} durch einen PHP-Code code.php ersetzen will, wie mache ich das? mir fällt nur ein beide codes in eine var zu lesen, den Platzhalter durch die zweite Var erstzen und dann das ganze duch nen eval() zu jagen. Macht man sas so? kann man was mit include oder so machen, oder noch anders? Bin für alles offen.

                Kommentar


                • #9
                  bei meinen Templates wird die gesammte Datei auf einmal durch ein preg_replace geschickt, und dann in die einzelnen Teile zerlegt. Ist nach meinen Zeitmessungen bedeutend schneller als erst zerlegen, und jeden Teil einzeln durch das preg_replace zur bearbeiten.

                  str_replace ist schneller als preg_replace, wenn man keine regulären Ausdrücke brauch ( siehe www.php.net )

                  Ich ersetze meine Platzhalter durch Funktionsaufrufe mit entsprechenden Parametern. Dadurch können einzelne Platzhalter sehr mächtig werden. Aßerdem arbeiten die Variablen mit Array Referenzen, was viel Zeit gegenüber normaler Variablenübergabe spart.
                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #10
                    Also meine Platzhalter werden an die Klasse auch als Arrays übergeben.
                    Dadurch benötigt man weniger Quelltext und ist angenehmer für den Benutzer.

                    @TBT das würde mich sehr interresieren hast du vielleicht ein paar zeilen oder ein Beispiel wie du das meinst.

                    Ich ersetze meine Platzhalter durch Funktionsaufrufe mit entsprechenden Parametern. Dadurch können einzelne Platzhalter sehr mächtig werden. Aßerdem arbeiten die Variablen mit Array Referenzen, was viel Zeit gegenüber normaler Variablenübergabe spart.
                    Bei mir werden alle Platzhalter durch str_replace ersetzt aber ich suche noch immer nach verbesserungsmöglichkeiten.

                    Bis jetzt habe ich eine Rekursive For-Schleife eingebaut (Mit Sicherheit: das heisst man kann eine max. Rekursion festlegen), IF-ELSE-Bediengung (leider hat ich noch keine zeit dies auszubauen auf IF-Bedienung, kurz gesagt, dass das ELSE nicht mehr stehen muss.). Weiters natürlich noch das eine Ersetzen eines Platzhalter. Das wäre es vorerst. Welche Funktionen wären noch sehr gut in einer Templateklasse?
                    mfg Flashfactor

                    Gebildet ist, wer weiß, wo er findet, was er nicht weiß.

                    Kommentar


                    • #11
                      meine "Compiler" Funktion der Templateklasse,
                      danach ist das Template fertig zum abarbeiten
                      Code:
                      function &compile(&$text){
                      	$text = &preg_replace('#\[([a-z0-9_\-]+?)\.([A-Za-z0-9_\-\.]+?)\]#sU', "\".\$this->data['\\1']['\\2'].\"", $text);
                      	$text = &preg_replace('#\[([a-z0-9_\-]+?)\]#sU', "\".\$this->data['\\1'].\"", $text);
                      	$text = &preg_replace('#\[toggle ([a-z0-9_\-]+?)\]#isU', "\".\$this->get_toggle('\\1').\"", $text);
                      	$text = &preg_replace('#\[toggle_safe ([a-z0-9_\-]+?)\]#isU', "\".\$this->get_toggle('\\1',false).\"", $text);
                      	$text = &preg_replace('#\[include ([a-z0-9_\-]+?)\]#isU', "\".\$this->get_block('\\1').\"", $text);
                      	$text = &preg_replace('#\[include_safe ([a-z0-9_\-]+?)\]#isU', "\".\$this->get_block('\\1',false).\"", $text);
                      	return $text;
                      }
                      TBT

                      Die zwei wichtigsten Regeln für eine berufliche Karriere:
                      1. Verrate niemals alles was du weißt!


                      PHP 2 AllPatrizier II Browsergame

                      Kommentar


                      • #12
                        kann sich einer dass mal anschauen und sagen, was er von dem ansatz hält.

                        Ich mache es rein mit include. Meine erfahrung was speed betrifft sind sehr gut. Bei 11 Mio und mehr page impressions und einem server gab es nie probleme. Ich traue dem parsen was speed betriff nicht so wirklich.
                        Angehängte Dateien

                        Kommentar


                        • #13
                          uff, ich glaube bei den ganzen Includes würde ich nichtmehr durchsehen
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar


                          • #14
                            Ist eigentlich ganz einfach,

                            in global_inc liegen die seitenbeschreibungen, in global_tmp liegen die templates wie footer & header, init.php ist eine leere datei, die mit dem aufruf der seitenbeschreibung den content holt und zusammenbaut.

                            z.b. init.php?data=home.inc.php

                            In global_mod liegt momentan ein modul, dass txt dateien aus den ordnern holen kann, da mit der normalen seitenbeschreibung nur html schnipsel eingebaut werden können.

                            Vielleicht kann das ja jemand mal bis zum wochende näher betrachten, würde aus diesem ansatz nämlich gerne mehr machen und wäre für kommentare super dankbar.

                            Habe mir gestern die referenz zu phpnuke angesehen und das system ist mir noch nicht flexibel genug.

                            Kommentar


                            • #15
                              @TBT:
                              meine "Compiler" Funktion der Templateklasse,
                              danach ist das Template fertig zum abarbeiten
                              Abarbeiten tust du dann mit eval()? Oder?

                              Kommentar

                              Lädt...
                              X