Templates Blöcke die optimale Technik?

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

  • #16
    komplette Ausgabe der Suchergebnisse mit Blätterfunktion

    Code:
    {loop search}{loop pages}
    <a href="index.php?go=start&amp;start={start}">{page}</a> {loop points} ... {/loop points}{/loop pages}
    <div class=kartei>{anzahl} Suchergebnisse</div>
    <table style="width:100%;" class=border>
    	<tr>
    		<th>Nr</th>
    		<th>Name</th>
    		<th>Heimatland</th>
    		<th>Geb-datum</th>
    	</tr>{loop list}
    	<tr>
    		<td>{bewid_i}</td>
    		<td><a href="index.php?go=bew&amp;bewid={bewid_i}">{nachna_c}, {vornam_c}</a></td>
    		<td>{land}</td>
    		<td>{gebdat_d}</td>
    	</tr>{/loop list}
    </table>
    {/loop search}
    TBT

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


    PHP 2 AllPatrizier II Browsergame

    Kommentar


    • #17
      php code dazu

      PHP-Code:
      while( $row $this->db->fetch('bew') ){
          
      $row $this->iohelper->out$row );
          
      $row['gebdat_d'] = $this->iohelper->formatdate$row['gebdat_d'] );
          
      $this->tpl->add'list'$row );
      }
      $this->tplhelper->pages'search'$anzahl['anzahl'], $start$limit ); 
      TBT

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


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #18
        Code:
        {loop at searches into search}
          {if _loopfirst}
          <div class=kartei>{anzahl} Suchergebnisse</div>
          <table style="width:100%;" class=border>
            <tr>
              <th>Nr</th>
              <th>Name</th>
              <th>Heimatland</th>
              <th>Geb-datum</th>
            </tr>
          {endif}
          <tr>
            <td>{search.bewid_i}</td>
            <td><a href="index.php?go=bew&bewid={search.bewid_i}">{search.nachna_c}, {search.vornam_c}</a></td>
            <td>{search.land}</td>
            <td>{search.gebdat_d dateformat:"d.m.Y"}</td>
          </tr>
          {if _looplast}</table>{endif}
          {loop at pages into page}
            <a href="/results/page{page}">Seite {page}</a>
            {if _loopcurrent < _loopcount} | {endif}
          {endloop}
        {endloop}
        PHP-Code:
        $tpl->assign('searches'$db->fetch_all());
        $tpl->assign('anzahl'$anzahl);
        $tpl->assign('pages'pages($anzahl$perpage$currentpage)); 
        Aber dadrauf kommt's ja eigentlich nicht wirklich an. Ich finde, mein's ist leichter zu lesen, du findest, dein's ist leichter zu lesen.

        Was ich aber nicht verstehe ist:
        Wenn du im Template falsch schachtelst, wie merkst du das?
        Benutzt du bei jedem Seitenaufruf preg_replace und Co. oder erzeugst du auch PHP-Code?
        Wenn du PHP-Code erzeugst, dann musst du um jede Schleife ja extra eine Abfrage der Art basteln
        Code:
        wenn array mit mindestens einem element
          for () {}
        wenn kein array, aber nicht empty
          echo
        oder nicht?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #19
          Original geschrieben von mrhappiness
          Was ich aber nicht verstehe ist:
          Wenn du im Template falsch schachtelst, wie merkst du das?
          Benutzt du bei jedem Seitenaufruf preg_replace und Co. oder erzeugst du auch PHP-Code?
          Wenn du PHP-Code erzeugst, dann musst du um jede Schleife ja extra eine Abfrage der Art basteln
          Code:
          wenn array mit mindestens einem element
            for () {}
          wenn kein array, aber nicht empty
            echo
          oder nicht?
          falsche Verschachtelung wird vom Parser übersprungen.
          Genau wie bei Variablen, was nicht passt, wird ignoriert.

          Ich benutze immer preg_match und konsorten, ein speichern des kompilierten
          (eher zerpflückten) Templates ist nicht schneller bei mir.
          Es wird keinerlei PHP Code erzeugt, wodurch es kein langsames eval und dessen
          zu beachtene Sicherheitsaspekte gibt.
          TBT

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


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #20
            aha.......

            Mit wievielen regulären Ausdrücke arbeitet ihr denn?
            Weil man könnte ja nach Leerzeichen exploden oder nach irgendwelchen anderen Trennungszeichen z.B. {for bla=4}

            Mit dem rekursiven Pattern u.A. dem (?R) Teil hab ich noch meine Probleme......aber das wird noch...
            [color=blue]MfG Payne_of_Death[/color]

            [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
            [color=red]Merke:[/color]
            [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

            Murphy`s Importanst LAWS
            Jede Lösung bringt nur neue Probleme
            Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
            In jedem kleinen Problem steckt ein großes, das gern raus moechte.

            Kommentar


            • #21
              Original geschrieben von TBT
              falsche Verschachtelung wird vom Parser übersprungen.
              ich gebe aus, wo etwas steht, was nicht passt

              Genau wie bei Variablen, was nicht passt, wird ignoriert.
              nicht vorhandene variablen werden einfach nicht ausgegeben

              Ich benutze immer preg_match und konsorten, ein speichern des kompilierten
              (eher zerpflückten) Templates ist nicht schneller bei mir.
              Es wird keinerlei PHP Code erzeugt, wodurch es kein langsames eval und dessen zu beachtene Sicherheitsaspekte gibt.
              es wird sich bei einfachen templates nicht viel nehmen, aber selbst
              PHP-Code:
              Hallo <?php echo $this->_data['username']; ?><br />

              Schön dich mal wieder zu sehen und Viel Spaß beim Ändern deines Profils.

              <h2>Änderbares</h2>

              <form method="post" action="change_profile.php">
              Mail: <input type="text" name="mail" value="<?php echo $this->_data['usermail']; ?>" />
              Neues Passwort: <input type="text" name="new_pw" />
              Bestätigung: <input type="text" name="new_pw_2" />
              Altes Passwort: <input type="text" name="old_pw" />
              <input type="submit" name="" value="Profiländerung übernehmen" />
              </form>

              Und hier deine kompletten Benutzerdaten:

              <ul>
              <?php 
              $this
              ->_loops['user']['data'] = &$this->_data['userdata'];
              foreach (
              $this->_loops['user']['data'] as 
                
              $this->_loops['user']['_key'] => $this->_loops['user']['_var']) :
              ?>
              <li>
              <?php echo $this->_loops['user']['_key']; ?> = <?php 
              echo $this->_loops['user']['_var']; ?>
              </li>
              <?php endforeach; ?>
              </ul>
              , was beim ersten verwenden aus
              Code:
              Hallo {username}<br />
              Schön dich mal wieder zu sehen und Viel Spaß beim Ändern deines Profils.
              
              <h2>Änderbares</a>
              <form method="post" action="change_profile.php">
                Mail: <input type="text" name="mail" value="{usermail}" />
                Neues Passwort: <input type="text" name="new_pw" />
                Bestätigung: <input type="text" name="new_pw_2" />
                Altes Passwort: <input type="text" name="old_pw" />
                <input type="submit" name="" value="Profiländerung übernehmen" />
              </form>
              
              Und hier deine kompletten Benutzerdaten:
              <ul>
              {loop at userdata into user}
                <li>{_key} = {user}</li>
              {endloop}
              </ul>
              generiert wird und dann bei jedem (weiteren) Aufruf einfach per include eingebunden wird, ist nicht langsamer als jedesmal mit preg_x zu arbeiten
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #22
                Zusatzfrage:

                Bei mehreren verschachtelten Blöcke liegt es nahe es Ebenen bezogen zu parsen.....

                d.h. zur Veranschaulichung beliebige Blöcke....Verschachtelte Blöcke folgen keiner Namenskonvention ihrer Eltern....
                Code:
                <!-- BEGIN Blubb -->
                  <!-- BEGIN Blubb 1.1 -->
                     <!-- BEGIN Blubb 1.2 -->
                     <!-- END Blubb 1.2 -->
                     <!-- BEGIN Blubb 1.3 -->
                     <!-- END Blubb 1.3 -->
                  <!-- END Blubb 1.1 -->
                  <!-- BEGIN A -->
                  <!-- END A -->
                <!-- END Blubb -->
                <!-- BEGIN Bla -->
                <!-- END Bla -->
                Wenn Blubb nicht übergeben wird. Dann macht es keinen Sinn Blubb 1.1 zu parsen. Weil es Sekündär ist......

                Ich ackere also nachdem ein Template übergeben wird alle Blöcke die gültig sind rekursiv durch.

                Nur fehlt mir noch eine Idee am besten/schnellsten diese Rangfolge abzubilden....Bzw. den Algorythmus zu finden.....
                Meine Ideen sind bisher haarsträubend.......Naja kann den Wald nicht vor lauter Bäumen sehen.....

                Any Vorschläge ?
                Zuletzt geändert von Payne_of_Death; 11.01.2005, 18:12.
                [color=blue]MfG Payne_of_Death[/color]

                [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                [color=red]Merke:[/color]
                [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                Murphy`s Importanst LAWS
                Jede Lösung bringt nur neue Probleme
                Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                Kommentar


                • #23
                  Original geschrieben von Payne_of_Death
                  Meine Ideen sind bisher haarsträubend.......
                  das hat doch nicht zu sagen, ich arbeite mit einem multidimensionalem Array,
                  welches ich mir nichtmal vorstellen will.
                  Das Teil ist komplett abstract entworfen, und ein print_r dürfte bei großen Templates locker bis zu 15-20 Ebenen tief gehen.
                  TBT

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


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #24
                    Wenn du's denn rekursiv machen willst und nicht Zeile für Zeile, dann ist das vielleicht der Schritt in die richtige Richtung
                    PHP-Code:
                    $text '<!-- BEGIN Blubb -->
                    a
                      <!-- BEGIN Blubb 1.1 -->
                        b
                         <!-- BEGIN Blubb 1.2 -->
                            c
                         <!-- END Blubb 1.2 -->
                         <!-- BEGIN Blubb 1.3 -->
                            d
                         <!-- END Blubb 1.3 -->
                      <!-- END Blubb 1.1 -->
                      <!-- BEGIN A -->
                        e
                      <!-- END A -->
                    <!-- END Blubb -->
                    <!-- BEGIN Bla -->
                    f
                    <!-- END Bla -->
                    <!-- BEGIN A -->
                    g
                    <!-- END A -->'
                    ;
                    function 
                    parse($code, &$array) {
                      
                    preg_match_all('%\\<\\!-- BEGIN (.*?) --\\>(.*?)\\<\\!-- END (\\\\1) --\\>%s'
                        
                    $code
                        
                    $matches
                        
                    PREG_SET_ORDER);
                      foreach (
                    $matches as $match) {
                        
                    $array[] = array('name' => $match[1]);
                        
                    parse($match[2], $array[count($array) - 1]['content']);
                      }
                      if (
                    count($array[$index]['content']) == 0)
                        unset(
                    $array[$index]['content']);
                    }

                    parse($text$array);
                    echo 
                    '<pre>';
                    print_r($array);
                    echo 
                    '</pre>'
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #25
                      So hab ich das auch in ähnlicher Form nur hat das ganze einen Haken es soll z.B. das möglich sein:

                      Code:
                      <!-- BEGIN Blubb -->
                        inhalt
                        <!-- BEGIN Blubb 1.1 -->
                          ggdfdfgdfgdf   
                          <!-- BEGIN Blubb 1.2 -->
                            fdgjsflkjklfdjgkldf
                           <!-- END Blubb 1.2 -->
                             gjfdkgjdflkgjfd
                             ssfsdsfsdfsdfsdfs
                           <!-- BEGIN Blubb 1.3 -->
                           gdgfdgdfgdfgdgfdg
                                   gfsdfsdfsd
                           <!-- END Blubb 1.3 -->
                        <!-- END Blubb 1.1 -->
                        <!-- BEGIN A -->
                        <!-- END A -->
                      lösjgsgjkölsklögöskölgklö lskglöskgölskg
                      <!-- END Blubb -->
                      <!-- BEGIN Bla -->
                      <!-- END Bla -->
                      Muss also noch eine Möglichkeit finden wie z.B. ein Text welcher im ersten Root Block Blubb existiert und bevor er geschlossen wird berrücksichtigt wird.........

                      Mein rekursives Pattern stellt schon mal sicher das nur geschlossene Blöcke berrücksichtigt werden......

                      Was mir nur einfällt ist wenn ich mich beim ersten Block befinde dessen Kontext nach allem abzusuchen was nicht innerhalb eines Blockes steht also ein weiteres Pattern......
                      [color=blue]MfG Payne_of_Death[/color]

                      [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                      [color=red]Merke:[/color]
                      [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                      Murphy`s Importanst LAWS
                      Jede Lösung bringt nur neue Probleme
                      Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                      In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                      Kommentar


                      • #26
                        PHP-Code:
                        function parse($code, &$array) {
                          
                        $pattern '%\\<\\!-- BEGIN (.*?) --\\>(.*?)\\<\\!-- END (\\\\1) --\\>%s';
                          
                        preg_match_all($pattern
                            
                        $code
                            
                        $matches
                            
                        PREG_SET_ORDER);
                          foreach (
                        $matches as $match) {
                            
                        $parts preg_split($pattern$match[2]);
                            
                        preg_match_all($pattern$match[2], $blocks);
                            
                        $blocks $blocks[0];
                            
                        $array[] = array('name' => $match[1]);
                            
                        $index count($array) - 1;
                            foreach (
                        $parts as $key => $value) {
                              if (!empty(
                        $value))
                                
                        $array[$index][] = $value;
                              if (isset(
                        $blocks[$key]))
                                
                        parse($blocks[$key], $array[$index][]);
                            }
                            if (isset(
                        $blocks[++$key]))
                              
                        parse($blocks[$key], $array[$index][]);
                          }

                        Versuch das mal, wenn's klappt, schaffst du den Rest alleine *g*
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #27
                          Ich habe eben eueren Thread mal komplett durchgelesen,
                          ich persönlich mag die "PHP in Template" (ich nenn die ma so ) Version, weil man PHP an sich sehr gut als Template Sprache benutzen kann.

                          Hier nun so einige Ideen die ich für ein Template System wie es bei euch nun in der Diskussion ist hätte:
                          Zeilen basiert Parsen, und zwar in 2 durchläufen,
                          im ersten Durchlauf wird geprüft ob das Template überhaupt valid ist.
                          Im Zweiten durchlauf wird es ausgeführt.

                          Dafür könnte man einen Stack benutzen der nach dem Motto LIFO (Last in - First Out) arbeitet, damit kann man eigentlich beliebig tief verschachteln.

                          Die Idee Templates zu cachen finde ich ist eine gute Idee, dafür sollte man aber eine Ram Disk benutzen, sowas ist aber leider in der Regel nur mit einem eigenen Server möglich, es würde aber einen Geschwindigkeits Vorteil bringen.

                          Kommentar


                          • #28
                            Naja, die Smarty-Templates sehen ja nicht in alle Ewigkeit so aus, sondern da kommt ja ziemlich genau das raus, was der gute als seine "PHP in Template"-Wollmilchsau bezeichnet. Nur dass sich niemand mit der PHP-Syntax rumschlagen muss...

                            Und da das gleiche raus kommt, bezweifle ich auch, dass seins schneller ist
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #29
                              im Endeffeckt sollte es schneller sein,
                              ganz einfach weil Smarty seine Templates noch Parsen muss,
                              und dies dann nochmals von PHP Parsen lassen muss,
                              daher sollte es in PHP an sich schneller sein.
                              Ich persönlich mag die PHP Syntax, und da ich meine Designs selber umsetze muss ich hier auf keinen Designer Rücksicht nehmen,
                              ich denke aber das diese Grundsätzlichen sachen auch von jedem innerhalb von einigen Minuten verstanden werden sollten.

                              Kommentar


                              • #30
                                Smarty parst ein Template - so wie ich - beim ersten mal, da kommt ein PHP-Skript raus und das wird dann einfach verwendet

                                1. Aufruf
                                Template
                                Code:
                                {loop user}
                                user.username<br />
                                {endloop}
                                Geparst:
                                PHP-Code:
                                <?php
                                foreach ($this->_loops['user']['data'] as 
                                  
                                $this->_loops['user']['key'] => $this->_loops['user']['var']) :
                                echo 
                                $this->_loops['user']['var']['username']; ?><br />
                                <?php endforeach; ?>
                                Jeder weitere Aufruf:
                                PHP-Code:
                                <?php
                                foreach ($this->_loops['user']['data'] as 
                                  
                                $this->_loops['user']['key'] => $this->_loops['user']['var']) :
                                echo 
                                $this->_loops['user']['var']['username']; ?><br />
                                <?php endforeach; ?>
                                Und das PHP-Skript soll wirklich langsamer sein, als das Skript, dass du bastelst?
                                Oder ist die Syntax für einen Nichtentwickler im geparsten Template einfacher?
                                Ich denke, also bin ich. - Einige sind trotzdem...

                                Kommentar

                                Lädt...
                                X