Parse-Probleme mit PEAR

ArneH

Mitglied
Guten Abend,

ich habe ein kleines Problem mit dem Parsen von verschachtelten Blöcken in HTML-Templates mit PEAR.

Wenn ich das richtig verstanden habe, dann muss man den inneren Block als erstes parsen und dann den Äußeren. Jedoch kommt es bei mir da immer wieder zu Problemen.

So soll es ausschauen:
soll_pear_parse.JPG


So sieht es aus:
ist_pear_parse.JPG


So und nun zu den Code-Schnipseln:

- menu.tpl:
HTML:
<div id="menu_div">
	<!-- START MENU -->
	<div id="div_heading">&raquo; {T_MAINMENU}</div>
	<div>
	<!-- START MENULINK -->
		&nbsp;{L_MAINMENU}<br>
	<!-- END MENULINK -->
	</div>
	<!-- END MENU -->
</div>

- menu.php
PHP:
<?php
	if(!defined('INDEX')) {
		die('Forbidden Access!');
	}
	
	// Test Variable
	$menu = array('News','News-Archive','Staff','Forum','Contact');
	
	require_once("HTML/Template/IT.php");
	
	$template = new HTML_Template_IT($template_path);
	
	$template->loadTemplatefile("menu.tpl",true,true);
	
	$i = 0;
	while($i<5) {
		$template->setCurrentBlock('MENULINK');
		$template->setVariable('L_MAINMENU',$menu[$i]);
		$template->parseCurrentBlock('MENULINK');
		$i++;
	}
	$template->setCurrentBlock('MENU');
	$template->setVariable('T_MAINMENU','Menu');
	$template->parseCurrentBlock('MENU');
	
	$template->show();
?>

Ich weiss, dass ich mir den Inhalt für {L_MAINMENU} auch zuerst einfach in einem String zusammensetzen kann und dann in einem gemeinsem Block mit {T_MAINMENU} parsen kann, doch möchte ich es gern mit verschachtelten Blöcken realisieren.
Ich habe es ebenfalls auch schon nach einem Artikel von PHP Magazin versucht, jedoch ergibt sich ein ähnliches Parser-Problem.

Freue mich über jede Hilfestellung. ;)


Gruß ArneH
 
Hast du es anders rum mal ausprobiert?
Also:
PHP:
$template->setCurrentBlock('MENU'); 
    $template->setVariable('T_MAINMENU','Menu'); 
    $template->parseCurrentBlock('MENU'); 
     
    $template->show(); 
while($i<5) { 
        $template->setCurrentBlock('MENULINK'); 
        $template->setVariable('L_MAINMENU',$menu[$i]); 
        $template->parseCurrentBlock('MENULINK'); 
        $i++; 
    }
 
Ebenfalls schonmal andersum probiert. ;)

Das einzige was sich ändert ist, dass der Eintrag ">> Menu" nach oben geschoben wird, aber nichts am eigentlichen Problem ändert.
 
Hmm...
Da wird ja auch iwie der Block mit dem >> jedesmal mitausgegeben...

Probier evtl mal das:
PHP:
$template->setCurrentBlock('MENU');  
    $template->setVariable('T_MAINMENU','Menu');  
$template->parseCurrentBlock('MENU');  

while($i<5) {  
        $template->setVariable('L_MAINMENU',$menu[$i]);  
        $template->parseCurrentBlock('MENU');  
        $i++;  
    }  

$template->show();

Also halt iwie so, dass der doppelt Aufruf vom >> weg is...
Das >>Menü soll ja wohl so oder so drüber ^^
 
Huhm ne,

auch nicht. ;) Es wird immer noch so kuddel-muddel ausgegeben. :confused:

Naja, ich versuchs mal weiterhin und werd am Fr. auch mal den Prof. fragen. :)

Aber schonmal Danke für die Bemühungen.


Gruß
 
Zurück