Seite 1 von 1

[gelöst] $template->assign_block_vars verschachteln

Verfasst: 05.12.2008 09:51
von DaG.Morpheus
Hallo,

in der KB gibt es einen Artikel, der erläutert, wie die Ausgabevariablen verschachtelt werden können. Nur bin ich irgendwie nicht in der Lage das umzusetzen :roll:

Kurz zum Verständis: In der DB habe ich eine Tabelle mit den "Hauptdatensätzen". Dazu gibt es eine Detail-Tabelle, die zusätzliche Informationen enthält (0..n Einträge möglich).

Hier mein Code:

Code: Alles auswählen

// SQL-Stuff für Hauptdatensätze

$x = 0;
while ($row = $db->sql_fetchrow($result)) {

	// SQL-Stuff für Detaildatensätze

	$details = $db->sql_query($details_query);
	$z = 0;
	$detail_info = array();;
	while ($res_row = $db->sql_fetchrow($details)) {
		$detail_info[$z]['imageurl'] = $res_row['image32url'];
		$detail_info[$z]['name'] = $res_row['name'];
		$z++;
	}

	$db->sql_freeresult($details);

	$output[$x]['line'] = $line;
	$output[$x]['memberprofil'] = $phpbb_root_path  . 'memberlist.' . $phpEx . .....;
	$output[$x]['username'] = $row['username'];
	$output[$x]['userpic'] = $row['tile_url'];
	$output[$x]['details'] = $detail_info; // <-- ??????????

	$line++;
	$x++;
}

$db->sql_freeresult($result);

foreach ($output as $output_var) {
	$template->assign_block_vars('userdetails', array(
		'LINE'				=> $output_var['line'],
		'MEMBERPROFIL'		=> $output_var['memberprofil'],
		'USERNAME'			=> $output_var['username'],
		'USERPIC'			=> $output_var['userpic'],
	));

	foreach($output_var['details'] as $details) {
		$template->assign_block_vars('userdetails.child_record', array(
			'IMAGE_URL'	=> $details['imageurl'],
			'NAME'		=> $details['name']
		));
	}
}
Meine Idee war: Speichere das Array mit den Detaildatensätzen im Array des Hauptdatensatzes. Dann "bastele" Dir die verschachtelte Ausgabe. Ohne das zweite "$template->assign_block_vars" funktioniert es auch.

Wie muss ich vorgehen/ändern, damit ich meine gewünschte Funktionalität hin bekomme?

Verfasst: 05.12.2008 13:40
von DaG.Morpheus
OK. Das war ein typisches Layer-8-Problem :wink:

Die Lösung lag nicht im php-Code, sondern im Template-Code:

Fehlerhaft:

Code: Alles auswählen

<!-- IF userdetails -->
   <!-- BEGIN userdetails -->
      {gamerdetails.LINE}
      {gamerdetails.MEMBERPROFIL}
      ...
      <!-- IF userdetails.child_record -->
            <!-- BEGIN userdetails.child_record -->
               {userdetails.child_record.IMAGE_URL}
               {userdetails.child_record.NAME}
            <!-- END userdetails.child-record -->
      <!-- ENDIF -->
   <!-- END userdetails -->
<!-- ENDIF -->
Funktionsfähig (in der Schachtelung NICHT noch einmal den übergeordneten Knoten schreiben - im Gegensatz zur Doku in der KB):

Code: Alles auswählen

<!-- IF userdetails -->
   <!-- BEGIN userdetails -->
      {gamerdetails.LINE}
      {gamerdetails.MEMBERPROFIL}
      ...
      <!-- IF child_record -->
            <!-- BEGIN child_record -->
               {child_record.IMAGE_URL}
               {child_record.NAME}
            <!-- END child-record -->
      <!-- ENDIF -->
   <!-- END userdetails -->
<!-- ENDIF -->