{eval}-Platzhalter bei eigenem TPL-Parser macht Probleme

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

  • {eval}-Platzhalter bei eigenem TPL-Parser macht Probleme

    Also ich habe einen eigenen Template Parser. Ich wollte nun einen eval-Platzhalter einbauen. Also {eval:datei.php}. Das funktioniert ja auch mit dem eval, nur steht der Inhalt der datei.php (ausgeführt) nicht da, wo der Platzhalter steht sondern am Anfang der Ausgabe. Hier mal der Code des Parsers wo das ganze gemacht wird:

    Code:
    $output = preg_replace_callback('/{eval:(\S+)}/si', create_function('$file', 'ob_start(); include($file[1]); eval(ob_get_clean());'), $output);
    $output ist der Inhalt des (HTML-)Templates... Wie bekomm ichs hin, dass die ge-eval-te Datei da steht wo auch im (HTML-)Template der Platzhalter steht?

    -----------

    Nun hab ichs mal so probiert aber ohne erfolg aber nah dran ^^
    Code:
    $output = preg_replace_callback('/{eval:(\S+)}/si', create_function('$file', 'ob_start(); include($file[1]); eval(ob_get_clean()); return ob_get_clean();'), $output);
    wenn ich das so mache, geht das nur dann gut, wenn ich nur ein eval-Platzhalter in meinen Templates hab :!
    Admin of RealScripts

  • #2
    lol? ist dasn so schwer? Ich habs nun in 4 Foren gefragt, im #php.de Chan gefragt und noch Kumpels im ICQ gefragt, aber in den Foren kommen keine oder sinnlose Antworten und im ICQ weiss es keiner :! im IRC hat nichtmal einer geguckt (Code @ nopaste)

    Ich krich dabei voll die Anfälle :! ich sitz da nun seit 2 Tagen dran, brauche das bei 2 Projekten wo ich deswegen nicht weiterkomm und keiner weiss rat :'(
    Admin of RealScripts

    Kommentar


    • #3
      kannst nicht ma ein kleines beispiel script zusammen kleistern? ich hab kein nerv mir da jetzt was zu schreiben!

      und ich will nun nicht die ganze klasse, 2 php dateien reichen ja aus!

      Kommentar


      • #4
        Original geschrieben von freq.9
        lol? ist dasn so schwer?
        was regst du dich so auf? da hätt ich auch keine lust dir zu helfen

        Kommentar


        • #5
          das Template: eval.html
          Code:
          Hallo Welt<br>
          Wie gehts?<br>
          {eval:eval.php}
          die Index: index.php
          Code:
          <?php
          
          include('class.inc.php');
          
          $parser = new Parser();
          $parser->getFile('eval.html');
          echo $parser->Display();
          
          ?>
          Nun wird in der Klasse in der Funktion "Display" die Funktion "Standards" aufgerufen in der folgendes steht:
          Code:
          $output = preg_replace_callback('/{eval:(\S+)}/si', create_function('$file', 'ob_start(); include($file[1]); /* eval(ob_get_clean()); */ return ob_get_clean();'), $output);
          in der eval.php steht:
          Code:
          echo "- gut gehts mir!<br>";
          wenn ich nun die Index aufrufe bekomme ich dies ausgegeben:
          Code:
          - gut gehts mir!<br>Hallo Welt<br>Wie gehts?<br>
          statt:
          Code:
          Hallo Welt<br>Wie gehts?<br>- gut gehts mir!<br>
          Admin of RealScripts

          Kommentar


          • #6
            also unter php5 wird mit folgendem code:
            PHP-Code:
            <?php

            $output 
            "Hallo Welt<br>\nWie gehts?<br> \n{eval:eval.php}";

            $output preg_replace_callback('/{eval:(\S+)}/si'create_function('$file''ob_start(); include($file[1]); /* eval(ob_get_clean()); */ return ob_get_clean();'), $output);
            echo 
            $output;

            ?>
            folgendes ausgeben
            PHP-Code:
            Hallo Welt
            Wie gehts
            ?
            gut gehts mir
            mfg

            edit: unter php4 genau das selbe ergebnis
            mfg
            Zuletzt geändert von Trashar; 22.07.2004, 12:21.

            Kommentar


            • #7
              grrr ich dussel... bei einem mal gehts ja auch... pack das {eval:eval.php} mal 2 mal in die zu parsende Datei... Dann gehts bei mir nicht!
              So gehts auch wie ichs vorhin beschrieben hab
              Admin of RealScripts

              Kommentar


              • #8
                PHP-Code:
                $output "Hallo Welt<br>\nWie gehts?<br> \n{eval:eval.php}<br><br>\nHallo Welt<br>\nWie gehts?<br> \n{eval:eval.php}"
                ergebnis:
                Code:
                Hallo Welt
                Wie gehts?
                - gut gehts mir!
                
                
                Hallo Welt
                Wie gehts?
                - gut gehts mir!

                Kommentar


                • #9
                  Ich werd zum Elch... wenn ich nen anderes Beispiel nehme klappt das 100pro... nur wieso funzt es bei dem hier nicht was ich hier hab :!
                  Zuletzt geändert von freq.9; 22.07.2004, 15:39.
                  Admin of RealScripts

                  Kommentar


                  • #10
                    hi,

                    hab kurz damit rumgespielt und es funktioniert.
                    hier mein test code:

                    PHP-Code:
                    <?php

                    function plugin_eval($file)
                    {
                      print 
                    "<hr>eval($file[1])<hr>";
                      
                    ob_start();
                      require(
                    $file[1]);
                      return 
                    ob_get_clean();
                    }

                    //$regex = '/{eval:([^\}]+)}/si';
                    $regex '/{eval:(\S+)}/si';
                    $input "Hallo{eval:include.php} Welt<br>\n{eval:include.php}Wie gehts?{eval:include.php}<br> \n{eval:include.php}";

                    preg_match_all($regex$input$matches);
                    var_dump($matches);

                    $output preg_replace_callback($regex'plugin_eval'$input);
                    echo 
                    $output;
                    ?>
                    bau in deine klasse mal ein paar debug meldungen ein, den prinzipiell funktioniert das (:.
                    achja ich habe anstatt eval nen require gemacht weil das etwas performanter sein sollte.

                    sike

                    edit... hmm smileys nerven (:

                    Kommentar


                    • #11
                      ICH HAAAAAAAAAAAABSSSSSSSSSSSSSSSSSS....
                      JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
                      die <?php und ?> fehlten :! PHP hat ned erkannt, dass es PHP ist...
                      Admin of RealScripts

                      Kommentar

                      Lädt...
                      X