template blöcke

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

  • template blöcke

    hi,
    ich krieg die blöcke indem ich
    PHP-Code:
    #\{foreach from=(.*) item=(.*)\}(((?R)|.*)*)\{/foreach\}#isU 
    rekursiv aufrufe. ich hab schon in anderen threads darüber gelesen man soll den innersten block rausfinden was ja mit dem obrigen funktioniert, aber dann soll man von innen nach außen weiter machen. wie macht man das dann? Weil mir würde nur einfallen den innersten block zuersetzen dann die funktion wieder von anfang an ausführen und wieder den innersten ersetzen... oder gibt es da eine bessere lösung?

    schonmal vielen dank für eure hilfe

    gruss
    jakob

  • #2
    erst den innersten ersetzen, dann den daraus resultierenen code dem übergeordneten block zuordnen. und immer so weiter...

    Kommentar


    • #3
      hi,
      jo und wie macht man, dass genau?
      PHP-Code:
      function match($string) {
         global 
      $lines;
          if (
      preg_match_all('#\{foreach}((?:(?R)|.*)*)\{/foreach\}#isU'$string$treffer)) {
                    foreach (
      $treffer[1] as $val) {
                              if (
      stristr($val'{foreach}')) {
                                     
      match($val);
                              } else {
                                    echo 
      str_replace($treffer[0][0],"parsed",$lines);
                             }
                    }
          }
      }

      $lines implode(""file("/home/jakob/recurive"));
      match($lines); 
      PHP-Code:
      {foreach}
               {foreach}
                        {foreach}
                                 {foreach}
                                          {foreach}
                                          {/foreach}
                                 {/foreach}    
                        {/foreach}
               {/foreach}
      {/foreach} 
      dann ist der erste block ersetzt, aber wie macht man dann weiter?

      gruss
      jakob

      Kommentar


      • #4
        was sind deine versuche?

        Kommentar


        • #5
          ich habs so gemacht:
          PHP-Code:
          function match($string) {
             global 
          $lines;
              if (
          preg_match_all('#\{foreach}((?:(?R)|.*)*)\{/foreach\}#isU'$string$treffer)) {
                                  if (
          stristr($treffer[1][0], '{foreach}')) {
                                         
          match($treffer[1][0]);
                                  } else {
                                        
          $lines str_replace($treffer[0][0],"parsed",$lines);
                                        
          match($lines);
                                 }
              }
          }

          $lines implode(""file("/home/jakob/recurive"));
          match($lines);
          echo 
          $lines
          so funktionierts natürlich, aber ich frag mich ob man das nicht effizienter machen kann, weil in dem beispiel muss ja nochmal alles von vorne durchgegangen werden um den innerste block zu finden...

          btw. global nehm ich da nur zu testzwecken her

          Kommentar


          • #6
            up
            Zuletzt geändert von TimeRaider; 30.03.2006, 18:15.

            Kommentar


            • #7
              up

              Kommentar

              Lädt...
              X