verschachtelte blöcke mit tpl parser

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

  • verschachtelte blöcke mit tpl parser

    Hi,

    bastle nun schon seit tagen an einem kleinen Template Parser für andere projekte von mir...

    klappt eigentlich auch alles ganz gut nur hab ich absulut keine idee wie ich verschachtelte blocks realisieren kann.
    genau das ist mir für die klasse aber sehr wichtig da ich teilweise menüs habe bei denen die untermenüs erst nach einem klick angezeigt werden.

    link1
    -link1.1
    -link1.2
    link2
    -link2.1
    -link2.2

    im moment kann ich nur einfache while blocks ausführen...
    hier mal der code dafür:

    index.php
    PHP-Code:
    // Laden und starten der Template-Klasse
    require('tpl_parser.php');
    $template = new tpl_parser;
    .
    .
    .
    // Inhalte für Blocks
    $news[0] = array (
      
    'n.time' => '22.06.04 - 21:47',
      
    'n.user' => 'm.orp.heu.s',
      
    'n.text' => 'Ich bin eine Nachricht...!');
    $news[1] = array (
      
    'n.time' => '23.06.04 - 17:22',
      
    'n.user' => 'm.orp.heu.s',
      
    'n.text' => 'Ich bin noch eine Nachricht...!');
    $news[2] = array (
      
    'n.time' => '24.06.04 - 23:42',
      
    'n.user' => 'm.orp.heu.s',
      
    'n.text' => 'Und noch eine...!');

    $menue[0] = array (
      
    'm.link'  => '?id=0',
      
    'm.title' => 'Link 0');
    $menue[1] = array (
      
    'm.link'  => '?id=1',
      
    'm.title' => 'Link 1');
    .
    .
    .
    // Blocks mit Inhalten ersetzen
    $template->parse_block('news'$news);
    $template->parse_block('menue'$menue);

    // Ausgabe
    $template->output(); 

    tpl_parser.php
    PHP-Code:
    .
    .
    .
      function 
    parse_block($blockname$array)
      {
        
    preg_match('/'.$this->start.'START-BLOCK-'.$blockname.$this->ende.'(.*)'.$this->start.'ENDE-BLOCK'.$this->ende.'/isU'$this->template$match);

        
    $reblock  $match[0];
        
    $block    $match[1];
        
    $nextblock $match[1];

        if (
    is_array($array)) {
          for (
    $a=0$a count($array); $a++)
          {
            
    preg_match_all('/'.$this->start.'(.*)'.$this->ende.'/isU'$block$match);
            for (
    $b=0$b count($match[0]); $b++)
            {
              
    $replace    $match[0][$b];
              
    $platzhalter $match[1][$b];

              
    $name array_keys($array[$b]);
              
    $block str_replace($this->start.$platzhalter.$this->ende$array[$a][$name[$b]], $block);
            }

            if (
    $a >= count($array)-1) { // Wenn die Anzahl der Datensätze erreicht ist wird kein Block mehr angehängt
              
    $block $block; }
            else {
              
    $block $block.$nextblock; }
          }
          
    $this->template str_replace($reblock$block$this->template); }
      }
    .
    .

    Habe mit der funktion schon so viel rumprobiert... aber anstatt das ich was produktives mache geht eher meine arbeit kaputt
    Wie gesagt, so wie sie jetzt ist parst sie nur einfache blocke...

    der teil der tpl datei für die news mit meinen arrays und platzhaltern (in der index.php festgelegt) würde zB so aussehen:
    PHP-Code:
    {START-BLOCK-news}
    {
    n.timevon {n.user}<br>
    {
    n.text}<br><br>
    {
    ENDE-BLOCK
    PS: worüber ich mir auch schon gedanken gemacht habe...
    wenn ich jetzt das (mit hoffentlich eurer hilfe *g*) auf verschachtelte blöcke umgebaut habe... ist es dann überhaupt möglich so eine menüstruktur wie ganz am anfang beschrieben zu machen? gebe ich im template einen block an wird er ja auf jeden fall ausgeführt (bzw sobald ich die funktion parse_block($name, $array) aufrufe)... müsste ich die funktion dann so umbauen das die blocks abhängig von globalen variablen gearst werden? zB wenn menue = 1 parse untermenue 1?!?!

    Finde das alles sehr verwirrend sowieso hab ich nen Knoten im Kopf seit ich mit reg. Ausdrücken angefangen hab *g*
    Ich hoffe sehr ihr könnt mir ein bisschen helfen den zu lockern

    grüße lordsepp

  • #2
    joar musst blockanfang und blockende kennzeichnen
    und dann nach dem letzten(!!!) blockanfang suchen, und dann wennde das hast wieder nach dem letzten usw... bisde keine blöcke mehr hast ^^

    Kommentar

    Lädt...
    X