Tamplate Schleife in Template Schleife

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
hmmder3
Mitglied
Beiträge: 21
Registriert: 28.10.2011 16:16

Tamplate Schleife in Template Schleife

Beitrag von hmmder3 »

Hallo zusammen

Ich möchte für mein Newssystem eine "Kommentarfunktion" einbauen.
Das ganz soll aus dem Forum ausgelesen werden, in dem auch die News steht. Soll heißen: 1. Post des Topics = News, alle anderen = Kommentar.
Nun habe ich das Problem/den Denkfehler, das ich erst die erste Schleife für das auslesen und übergeben der Newsdaten an das Template habe und dort ja auch die zweite Schleife zum auslesen und ausgeben der Kommentare an das Template rein muss.
(Sorry, ich weiß leider nicht, wie die "Funktion" in phpbb genannt wird, mit der die Daten an das Template in "Zeilen" übergeben wird.)
Hier mal mein Bisheriger code:
Newssystem alleine:

Code: Alles auswählen

//News System - Ausgelesen aus Forum
//
//ID beschreibung
//
//		21 = News
//		23 = Servernews
//		24 = Clannews
//		37 = Gamenews

	$sql =
		'SELECT
			p.post_id,
			p.topic_id,
			p.poster_id,
			p.post_time,
			p.post_subject,
			p.post_text,
			p.forum_id,
			p.bbcode_uid,
			p.bbcode_bitfield,
			u.user_id,
			u.username,
			t.topic_first_post_id
		FROM
			'.$table_prefix.'posts p,
			'.$table_prefix.'topics t,
			'.$table_prefix.'users u
		WHERE
			   p.forum_id = 21 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id 
			OR p.forum_id = 23 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id 
			OR p.forum_id = 24 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id
			OR p.forum_id = 37 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id
		ORDER BY
			post_id DESC LIMIT 8';

			
	$result = $db->sql_query($sql);
	
	if(!$result)
	{
		$fehler = ('SQL Abfrage fehlgeschlagen!: '.mysql_error());
	}
	else
	{
		$fehler = ('KEIN FEHLER!');
	}

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

		$bbcode_bitfield = $row['bbcode_bitfield'];

		if ($bbcode_bitfield !== '')
		{
			$bbcode = new bbcode(base64_encode($bbcode_bitfield));
		}
	
		$post = bbcode_nl2br($row['post_text']);
		$post = smiley_text($post);
		if ($row['bbcode_bitfield'])
		{
			$bbcode->bbcode_second_pass($post, $row['bbcode_uid'], $row['bbcode_bitfield']);
		}	
	
		//News Überschrifts Bild erstellen/auswählen
		
		if($row['forum_id'] == 21){
			$cat = ('header_pic_news');
		}
		elseif($row['forum_id'] == 23){
			$cat = ('header_pic_server');
		}
		elseif($row['forum_id'] == 24){
			$cat = ('header_pic_clan');
		}
		elseif($row['forum_id'] == 37){
			$cat = ('header_pic_game');
		}
		
		$sql='
			SELECT
				p.topic_id,
				p.post_id
			FROM
				'.$table_prefix.'posts p
			WHERE
				p.topic_id = '.$row['topic_id'];
				
		$result1 = $db->sql_query($sql);
		$zahl = 0;
		while ($row1 = $db->sql_fetchrow($result1))
		{
			if($row1['post_id'] == $row['topic_first_post_id'])
			{
				continue;
			}
			$zahl = $zahl + 1;
		}	
		
		$cp_row = array();
	
		$postrow = array(
			'TEST' 		=> $row['post_id'],
	
			'KATEGORIE'	=> $cat,
			'TITEL'		=> $row['post_subject'],
			'DATUM'		=> $user->format_date($row['post_time']),
			'POSTER'	=> $row['username'],
			'POST'		=> $post,
			'U_KOMMENTAR'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", '&f='.$row['forum_id'].'&t='.$row['topic_id']) ,
			'KOMMENTARZAHL'	=> $zahl,
	
		);
	
		
		if (isset($cp_row['row']) && sizeof($cp_row['row']))
		{
			$postrow = array_merge($postrow, $cp_row['row']);
		}

		// Dump vars into template
		$template->assign_block_vars('postrow', $postrow);

		if (!empty($cp_row['blockrow']))
		{
			foreach ($cp_row['blockrow'] as $field_data)
			{
				$template->assign_block_vars('postrow.custom_fields', $field_data);
			}
		}
	}
Mit meinem Versuch, der allerdings nichts ausgibt:

Code: Alles auswählen

//News System - Ausgelesen aus Forum
//
//ID beschreibung
//
//		21 = News
//		23 = Servernews
//		24 = Clannews
//		37 = Gamenews

	$sql =
		'SELECT
			p.post_id,
			p.topic_id,
			p.poster_id,
			p.post_time,
			p.post_subject,
			p.post_text,
			p.forum_id,
			p.bbcode_uid,
			p.bbcode_bitfield,
			u.user_id,
			u.username,
			t.topic_first_post_id
		FROM
			'.$table_prefix.'posts p,
			'.$table_prefix.'topics t,
			'.$table_prefix.'users u
		WHERE
			   p.forum_id = 21 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id 
			OR p.forum_id = 23 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id 
			OR p.forum_id = 24 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id
			OR p.forum_id = 37 AND p.poster_id = u.user_id AND p.post_id = t.topic_first_post_id
		ORDER BY
			post_id DESC LIMIT 8';

			
	$result = $db->sql_query($sql);
	
	if(!$result)
	{
		$fehler = ('SQL Abfrage fehlgeschlagen!: '.mysql_error());
	}
	else
	{
		$fehler = ('KEIN FEHLER!');
	}

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

		$bbcode_bitfield = $row['bbcode_bitfield'];

		if ($bbcode_bitfield !== '')
		{
			$bbcode = new bbcode(base64_encode($bbcode_bitfield));
		}
	
		$post = bbcode_nl2br($row['post_text']);
		$post = smiley_text($post);
		if ($row['bbcode_bitfield'])
		{
			$bbcode->bbcode_second_pass($post, $row['bbcode_uid'], $row['bbcode_bitfield']);
		}	
	
		//News Überschrifts Bild erstellen/auswählen
		
		if($row['forum_id'] == 21){
			$cat = ('header_pic_news');
		}
		elseif($row['forum_id'] == 23){
			$cat = ('header_pic_server');
		}
		elseif($row['forum_id'] == 24){
			$cat = ('header_pic_clan');
		}
		elseif($row['forum_id'] == 37){
			$cat = ('header_pic_game');
		}
		
		//Kommentare Auslesen
		//*******************
		
		$sql1 =
			'SELECT
				p.post_id,
				p.topic_id,
				p.poster_id,
				p.post_time,
				p.post_subject,
				p.post_text,
				p.forum_id,
				p.bbcode_uid,
				p.bbcode_bitfield,
				u.user_id,
				u.username
			FROM
				'.$table_prefix.'posts p,
				'.$table_prefix.'users u
			WHERE
				p.poster_id = u.user_id AND p.topic_id = '.$row['topic_id'].'
			ORDER BY
				post_id';
				
		$result1 = $db->sql_query($sql1);
		$zahl = 0;
		while ($row1 = $db->sql_fetchrow($result1))
		{
			if($row1['post_id'] == $row['topic_first_post_id'])
			{
				continue;
			}
			$bbcode_bitfield = $row1['bbcode_bitfield'];

			if ($bbcode_bitfield !== '')
			{
				$bbcode = new bbcode(base64_encode($bbcode_bitfield));
			}
		
			$post1 = bbcode_nl2br($row1['post_text']);
			$post1 = smiley_text($post1);
			if ($row1['bbcode_bitfield'])
			{
				$bbcode->bbcode_second_pass($post1, $row1['bbcode_uid'], $row1['bbcode_bitfield']);
			}
			
			$cp_row = array();
	
			$commentrow = array(
				'COMMENT_TITEL'		=> $row1['post_subject'],
				'COMMENT_DATUM'		=> $user->format_date($row1['post_time']),
				'COMMENT_POSTER'	=> $row1['username'],
				'COMMENT_POST'		=> $post1,
		
			);
		
			
			if (isset($cp_row['row']) && sizeof($cp_row['row']))
			{
				$commentrow = array_merge($commentrow, $cp_row['row']);
			}

			// Dump vars into template
			$template->assign_block_vars('commentrow', $commentrow);

			if (!empty($cp_row['blockrow']))
			{
				foreach ($cp_row['blockrow'] as $field_data1)
				{
					$template->assign_block_vars('commentrow.custom_fields', $field_data1);
				}
			}

			$zahl = $zahl + 1;
		}	
		
		//************************
		//Kommentare auslesen ENDE
		
		$cp_row = array();
	
		$postrow = array(
			'TEST' 		=> $row['post_id'],
	
			'KATEGORIE'	=> $cat,
			'TITEL'		=> $row['post_subject'],
			'DATUM'		=> $user->format_date($row['post_time']),
			'POSTER'	=> $row['username'],
			'POST'		=> $post,
			'TOPIC'		=> $row['topic_id'],
			'U_KOMMENTAR'	=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", '&f='.$row['forum_id'].'&t='.$row['topic_id']) ,
			'KOMMENTARZAHL'	=> $zahl,
	
		);
	
		
		if (isset($cp_row['row']) && sizeof($cp_row['row']))
		{
			$postrow = array_merge($postrow, $cp_row['row']);
		}

		// Dump vars into template
		$template->assign_block_vars('postrow', $postrow);

		if (!empty($cp_row['blockrow']))
		{
			foreach ($cp_row['blockrow'] as $field_data)
			{
				$template->assign_block_vars('postrow.custom_fields', $field_data);
			}
		}
	}
Hier die Template Datei, mit meinem Versuch:

Code: Alles auswählen

<!-- BEGIN postrow -->		

	<div id="news">
		<div id="news_header">
			<div id="{postrow.KATEGORIE}"></div>
			<div id="header_info">
				<p class="news_title">{postrow.TITEL}</p></br>
				<p class="news_info">{postrow.POSTER} &bull; {postrow.DATUM}</p>
			</div>
		</div>
		<div id="news_content">
			
			{postrow.POST}
		</div>
		<div id="comment_menu">				
			<a id="comment_link{postrow.TOPIC}" class="comment_link" href="" onclick="comment({postrow.TOPIC}); return false;" >{postrow.KOMMENTARZAHL} Kommentare anzeigen</a>			
			<div id="comment{postrow.TOPIC}" class="comment" style="display:none;">
				<table>
					<tbody>
						<tr class="cat">
							<td>Kommentare</td>
						</tr>
						<!-- BEGIN commentrow -->
						<th>{commentrow.COMMENT_POSTER}
						</th>
						<th>{commentrow.COMMENT_DATUM}
						</th>
						<tr class="row1" colspan="2">
							<td>{commentrow.COMMENT_POST}
							</td>
						</tr>
						<!-- END commentrow -->
					</tbody>
				</table>
			</div>
		</div>
	
	</div>
<!-- END postrow -->

Meine Frage ist nun: Kann man dies überhaupt machen, eine Schleife in eine andere? Und wenn, was mache ich falsch?

EDIT: Danke fürs verschieben, habe gestern die MOD-Bastelstube irgendwie nicht gefunden o.0

Mit freundlichen Grüßen

hmm der 3.
Verschoben von phpBB 3.0: Mod Support nach phpBB 3.0: Mod-Bastelstube am 18.11.2011 12:07 durch Metzle

jannicars
Mitglied
Beiträge: 7
Registriert: 16.06.2008 20:59

Re: Tamplate Schleife in Template Schleife

Beitrag von jannicars »

Ja, kann man. Nennt sich Nested Loops.
mehr hier:http://wiki.phpbb.com/Tutorial.Template_syntax
Antworten

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