Ankündigung

Einklappen
Keine Ankündigung bisher.

Template System Ausgabe

Einklappen

Neue Werbung 2019

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

  • Template System Ausgabe

    moin,

    hier erst mal alle Dateien :
    Rapide

    es handelt sich hier um eine template klasse die eine *.tpl datei einlesen soll und verarbeiten soll.

    Schön und gut, ich weiß das bei echo ein String einfach ausgegeben wir, egal ob er gültigen PHP Code enthält oder nicht!

    eval wollte ich nicht benutzen und nun war und ist meine Frage welche Lösung Mann/Frau hier nehmen kann =P


    Hoffe ich bekomme jetzt nicht einen auf den Deckel ^^ für diese Frage...

    Greetings Knechtle


  • #2
    Doch. Relevanten Code bitte hier posten, nicht einfach bei Rapidshare hinwerfen!
    Konzepte kann man beschreiben, Einzelprobleme diskutieren. Um komplettes Code-Refactoring kannst Du allenfalls in der Scriptbörse "bitten".
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      wo ist denn da die frage? du hast die klasse du willst die verwenden und weiter? was hast du vor?

      vllt musst du in deiner index das hier machen:

      PHP-Code:
      echo $TPL->load_tpl('test'); 
      hast du die klasse selber geschrieben? irgendwie parst die klasse den content, compiled ihn aber dann?? keine ahnung was nach dem compilen passiert
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

      Kommentar


      • #4
        Zitat von nikosch Beitrag anzeigen
        Doch. Relevanten Code bitte hier posten, nicht einfach bei Rapidshare hinwerfen!
        Konzepte kann man beschreiben, Einzelprobleme diskutieren. Um komplettes Code-Refactoring kannst Du allenfalls in der Scriptbörse "bitten".
        okay...

        template class :

        PHP-Code:
        <?php
        defined
        ('INDEX') or die ('Access denied');

        class 
        template
        {
            private 
        $content NULL;
            
            private 
        $ldq '<-!TPL';
            private 
        $rdq 'TPL!->';
            
            private 
        $template_tags = array();

            
        /* function to load the content of an template */
            
        public function load_tpl ($template)
            {
                if(
        file_exists(TPL DS $template '.tpl'))
                {
                    
        $this->content file_get_contents(TPL DS $template '.tpl');
                }
                else
                {
                    die(
        'template not found');
                }

                
        $this->parse();
            }

            
        /* function to parse the template */
            
        private function parse()
            {
                
        $ldq preg_quote($this->ldq'~');
                
        $rdq preg_quote($this->rdq'~');

                
        $regstr "~$ldq(.*?)$rdq~s";

                
        /* match all tamplate tags */
                
        preg_match_all($regstr$this->content$tags);
                
        $tags $tags[1];

                
        /* match all text blocks between the tags */
                
        $blocks preg_split($regstr$this->content);

                
        /* replace tags with valid php code if nessesary */
                
        for($i 0$max count($tags); $i $max$i++)
                {
                    
        $compiled_tags[] = $this->compile($tags[$i]);
                }
                foreach(
        $compiled_tags as $val)
                {
                    echo 
        $val;
                }
            }

            private function 
        compile($tag)
            {
                
        /* split tags */
                //$regstr = "~[a-zA-Z]\w*~";
                
        $regstr ="~[a-zA-Z_\-\<\>\$]+\w*~";
                
        preg_match_all($regstr$tag$args);
                
        $array_null $args[0];
                
                
        $task $array_null[0];
                
        $arg $array_null[1];
                
                switch(
        $task)
                {
                    case(
        'if'):
                    {
                        return 
        '<?php('.$arg.')?>';
                    }
                    case(
        'endif'):
                    {
                        return 
        '<?php endif ?>';
                    }
                    default:
                    return;
                }
            }
        }
        @BlackScorp: Habe die Ausgabe vergessen sorry

        siehe :
        PHP-Code:
                /* replace tags with valid php code if nessesary */
                
        for($i 0$max count($tags); $i $max$i++)
                {
                    
        $compiled_tags[] = $this->compile($tags[$i]);
                }
                foreach(
        $compiled_tags as $val)
                {
                    echo 
        $val;
                } 
        So! wenn man nun den Code im Browser ausführt wird der PHP Code angezeigt ... klar weil ist ja echo.

        Meine frage ist nun wie kann ich es so lösen das er mir den Code auch durch den PHP Parser schickt und auswertet.

        edit: ja selber geschrieben ... und bevor jetzt kommt "warum benutzt du nicht smarty?" weil ich nicht mal annähernd so viele Funktionen benötige außerdem will man ja lernen

        Kommentar


        • #5
          eventuell so?

          PHP-Code:
          case('if'):
                      {
                          return "<?php(".$arg.")?>";
                      }
                      case('endif'):
                      {
                          return "<?php endif ?>";
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

          Kommentar


          • #6
            nö der gibt mir im broser immer noch
            Code:
            <?php(isloggedin)?><?php endif ?>
            aus

            die double quotes haben es leider nicht gebracht. =(

            ____

            also am ende wenn die Datei "geparst" ist haben wir die Variable $content die mit unseren <?php .* ?> befehlen ausgefüllt ist:

            z.B

            <?php if isloggedin() ?>
            block1
            <?php endif ?>

            leider würde er mir dann das genau so im browser ausgeben (Quelltext)

            Kommentar


            • #7
              wie kann ich es so lösen das er mir den Code auch durch den PHP Parser schickt und auswertet.
              Gar nicht. Dafür gibt es eben eval. Alternativ in eine Datei schreiben und lokales Include ausführen. Eine Lambdafunktion ginge evtl auch noch, dann bekommst Du aber Probleme mit lokalen Variablen, die Du noch verarbeiten willst.
              Die 3 Möglichkeiten sehe ich.

              Was eigentlich in den Tags drinstehen soll hast Du auch noch gar nicht beschrieben. Für Ausdrücke gelten da nämliche andere Aussagen als für reine Variablen.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                In meinem Beispiel Objekte, Funktionen, Variabeln und normale Befehle wie eine if schleif.

                Hmm war eval nicht böse böse "Fingerhau" oder irre ich mich hier. Ich hatte iwo mal gelesen das geht auf die Performance.

                Kennt wirklich keiner einen weg ... smarty macht das doch auf ne spezielle Art

                Kommentar


                • #9
                  Zitat von Knechtle Beitrag anzeigen
                  Hmm war eval nicht böse böse "Fingerhau" oder irre ich mich hier. Ich hatte iwo mal gelesen das geht auf die Performance.
                  Templates und Code zu mischen, ist das eigentlich „böse“.
                  Die Performance ist hier das geringste Problem.

                  Kennt wirklich keiner einen weg ... smarty macht das doch auf ne spezielle Art
                  Smarty hat eine eigene Syntax für Programmieranweisungen in Templates - das erfordert dann erst mal wieder einen eigenen Parser, der diese Anweisungen in PHP übersetzt und anschliessend ausführt.

                  Wenn man eh schon Programmlogik und Ausgabeformat in einem Template mischen will - dann kann man sich auch gleich darauf besinnen, dass PHP für sich schon eine Templatesprache ist, also seine Templates gleich in PHP schreiben und in einer Weise einbinden, die dafür sorgt, dass der Code ausgeführt wird (bspw. per include).

                  Kommentar


                  • #10
                    In meinem Beispiel Objekte, Funktionen, Variabeln und normale Befehle wie eine if schleif.
                    Solche Infos gehören immer mit in die Fragestellung. Das kann hier nämlich niemand „riechen“.
                    Btw. http://www.php.de/beitragsarchiv/468...-schleife.html

                    Kennt wirklich keiner einen weg ... smarty macht das doch auf ne spezielle Art
                    Also irgendwie habe ich das Gefühl, Du hast vor dem Bauen Deiner Templateengine*) nicht besonders viel nachgedacht. Was der Grund ist, weshalb man immer wieder zum Benutzen fertigen TEs rät.

                    *) Was qualifiziert die eigentlich dazu? Offensichtlich kann sie ja nichts, als statische Inhalte darstellen..
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Ist Smarty nicht zwangsweise OpenSource (php?) und damit als Vorbild durchaus nachahmbar für dich? Kannst doch alles anpassen.

                      Kommentar


                      • #12
                        Hab mir eben noch mal Smarty angeschaut und ich finde das gleicht sich zumindes ein bisschen.

                        Ich möchte ja Code und Design trennen sonst hätte ich ja wohl keine ".tpl" Dateien ^^ oder ??

                        Smarty macht eig nicht anderes außer Platzhalter zu ersetzten. Was so aussehen würde.

                        Code:
                        {if $smarty.section.outer.index is odd by 2}
                        oder bei Objekten

                        Code:
                        {foobar->meth1 p1="foo" p2=$bar}
                        Ich hab ja nix anderes vor.

                        Naja ich glaube ich muss noch bisschen daran arbeiten vll komm ich ja erst mal selber weiter aber Danke für alle Antworten

                        Solche Infos gehören immer mit in die Fragestellung. Das kann hier nämlich niemand „riechen“.
                        Btw. php.de - das Deutsche PHP-Forum
                        Entschuldige kommt nicht mehr vor so ein verschreiber.

                        Kommentar


                        • #13
                          statt eval bietet sich [MAN]stream_wrapper_register[/MAN] + include an
                          DevBlog|3D Online-Shopping|Xatrium

                          Kommentar


                          • #14
                            Interessanter Ansatz. Aber werden dabei auch lokale Variablen ausgewertet.

                            Smarty macht eig nicht anderes außer Platzhalter zu ersetzten.
                            Ja, aber es macht etwas. Deine Lösung soll nur was machen.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Lokale Variablen im selben Scope wie der include Aufruf werden ausgewertet, so wie man es gewohnt ist.

                              Auf diese Weise share ich per shmop zwischen Prozessen PHPCode und kann diesen einfach über include einbinden
                              DevBlog|3D Online-Shopping|Xatrium

                              Kommentar

                              Lädt...
                              X