[gelöst] $template->assign_block_vars verschachteln

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
DaG.Morpheus
Mitglied
Beiträge: 22
Registriert: 08.05.2008 13:51
Wohnort: München
Kontaktdaten:

[gelöst] $template->assign_block_vars verschachteln

Beitrag 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?
Benutzeravatar
DaG.Morpheus
Mitglied
Beiträge: 22
Registriert: 08.05.2008 13:51
Wohnort: München
Kontaktdaten:

Beitrag 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 -->
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“