Problem mit Schleife

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

Problem mit Schleife

Beitrag von SKYSURFER2002 »

Hi,

ich bin gerade dabei ein eigenes Bilderscript auf Basis vom PHPbb zu programieren. Ich kenne den Album Mod. Doch ich möchte ein eigenes haben, dass genau meine Funktionen abdeckt. Leider habe ich jetzt schon mein erstes Problem.

Das Problem liegt in der Galerieübersicht, wo die Thumbnails angezeigt werden. Nach meinem Code wird immer nur eines nebeneinander ausgegeben. Ich möchte aber dass vier Vorschaubilder nebeneinander zu sehen sind. Also so:

+------+-------+-------+-------+
| Bild1 | Bild2 | Bild3 | Bild4 |
+------+-------+-------+-------+
| Bild5 | Bild6 | Bild7 | Bild8 |
+------+-------+-------+-------+
usw.

Bei mir ist das so:
+------+
| Bild1 |
+------+
| Bild2 |
+------+
| Bild3 |
+------+
| Bild4 |
+------+

D. H. ich muss die Verschatelung ändern. Doch leider habe ich keinen Plan wie ich das machen soll. Hat jmd. eine Idee mit einem Beispiel??? Ich steh voll auf dem Schlauch.

Hier mal der auszug aus der PHP-Datei:

Code: Alles auswählen

if(isset($_GET['action']) && $_GET['action'] == "gal")
    {

	$template->set_filenames(array(
	'body' => 'bilder_gal.tpl')
	);
	
	$katid = $_GET['id'];
	
	$bilder = "SELECT * FROM $tabelle_bilder WHERE id_kat='$katid' ORDER BY id";
	$ergebnis = mysql_query($bilder);
	
	while($row = mysql_fetch_object($ergebnis))
    	{
    		$id = $row->id;
    		$id_kat = $row->id_kat;
    		$pfad_bild = $row->pfad_bild;
    		$pfad_thumb = $row->pfad_thumb;
    		$autor_id = $row->autor_id;
    		$hits = $row->hits;
    		
    		$template->assign_block_vars('BILDER', array(
		'ID' => $id,
		'ID_KAT' => $id_kat,
		'PFAD_BILD' => $pfad_bild,
		'PFAD_THUMB' => $pfad_thumb,
		'autor_id' => $autor_id,
		'hits' => $hits,
		));    	
    	}

    	$kat_titel = "SELECT * FROM $tabelle_kat WHERE id ='$katid' ";
    	$erg_kat_titel = mysql_query($kat_titel);
	while($row_kat_titel = mysql_fetch_object($erg_kat_titel))
    	{
    		$kat_titel = $row_kat_titel->titel;
    	}
    	
	
$template->assign_vars(array(
'kat_titel' => $kat_titel,

));

$template->pparse('body');

}
und das Template dazu:

Code: Alles auswählen

 <table width="458" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td height="5"></td>
  </tr>
</table>
<table width="458" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
            <td colspan="3"><img src="images/balken_v2_1_01.jpg" width="83" height="22" alt=""></td>
            
    <td colspan="3" class="headline" style="background-image: url(images/balken_v2_1_02.jpg)">{kat_titel}</td>
        </tr>
        <tr>
            <td colspan="3"><img src="images/balken_v2_1_03.jpg" width="83" height="7" alt=""></td>
            <td colspan="3"><img src="images/balken_v2_1_04.jpg" width="375" height="7" alt=""></td>

        </tr>
        <tr>
           <td colspan="3" style="background-image: url(images/balken_v2_1_08.jpg); background-repeat:repeat-y;" class="text_l_f" height="23" ><img src="images/balken_v2_1_05.jpg" alt="" width="83" height="23" border="0"><br><div style="background-image: url(images/balken_v2_1_08.jpg); background-repeat:repeat-y;" class="text_fett_c_f"></div></td>        
    <td width="370" colspan="2" rowspan="2" class="text_l_f ">

// hier müsste dann die Tabelle mit den Zeilen und Spalten beginnen

 	<!-- BEGIN BILDER -->
    	<table width="90" cellpadding="0" cellspacing="0" border="1">
	<tr> 
	<td class="text" height="28"><a href="{BILDER.PFAD_BILD}"><img src="{BILDER.PFAD_THUMB}" border="0"></a></td>
	</tr>
  	</table>
 	<!-- END BILDER -->   

// und hier wäre dann das Ende
    <td rowspan="2" style="background-image: url(images/balken_v2_1_07.jpg)"></td>
        </tr>
        <tr>
            <td style="background-image: url(images/balken_v2_1_08.jpg)"></td>
            <td colspan="2" class="text_fett_c_f"></td>
        </tr>
        <tr>

            <td colspan="2"><img src="images/balken_v2_1_10.jpg" width="15" height="13" alt=""></td>
            <td><img src="images/balken_v2_1_11.jpg" width="68" height="13" alt=""></td>
            <td><img src="images/balken_v2_1_12.jpg" width="360" height="13" alt=""></td>
            <td colspan="2"><img src="images/balken_v2_1_13.jpg" width="15" height="13" alt=""></td>
        </tr>
        <tr>
            <td><img src="images/Abstandhalter.gif" width="3" height="1" alt=""></td>
            <td><img src="images/Abstandhalter.gif" width="12" height="1" alt=""></td>
            <td><img src="images/Abstandhalter.gif" width="68" height="1" alt=""></td>

            <td><img src="images/Abstandhalter.gif" width="360" height="1" alt=""></td>
            <td><img src="images/Abstandhalter.gif" width="10" height="1" alt=""></td>
            <td><img src="images/Abstandhalter.gif" width="5" height="1" alt=""></td>
        </tr>
        </table>
Ich bedanke mich schon jetzt für eure Hilfe.

SKYSURFER
Benutzeravatar
MagMo
Ehemaliges Teammitglied
Beiträge: 584
Registriert: 30.10.2005 16:06
Wohnort: Köln
Kontaktdaten:

Beitrag von MagMo »

Hi,

1) Validitäts-Fehler
vor

Code: Alles auswählen

<!-- BEGIN BILDER -->
öffnest du eine Zelle <td...>, diese musst du nach

Code: Alles auswählen

<!-- END BILDER -->
auch wieder mittels </td> schließen bevor du die nächste Zelle öffnest.

2) logischer Fehler
du beginnst für jedes Bild eine eigene Tabelle, dass ist unnötig und damit erreichst du auch nicht, dass was du willst.
Du musst eine Tabelle öffnen, die zwei in einander verschachtelte Schleifen enthält und nach den Schleifen die Tabelle wieder schließen.
Die außere schleife sorgt dafür, dass du nach vier Bildern eine neue Zeile beginnst, die innere Schleife arbeitet die Bilder ab (sprich erstellt die einzelnen Zellen mit Bild)

Grüße
MagMo
Meine MODs
Kein Support via PN!
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

Beitrag von SKYSURFER2002 »

Hi,

danke für den Hinweis mit dem <td>.

zu 2.

ich hatte mir gedacht, dass ich dann eine "Übertabelle" einsetze. In die einzelnen Felder sollte dann das dazwischen:

Code: Alles auswählen

    <!-- BEGIN BILDER -->
       <table width="90" cellpadding="0" cellspacing="0" border="1">
   <tr>
   <td class="text" height="28"><a href="{BILDER.PFAD_BILD}"><img src="{BILDER.PFAD_THUMB}" border="0"></a></td>
   </tr>
     </table>
    <!-- END BILDER -->  
Wobei das dann noch erweitert wird. Somit möchte ich schon das mit den zwei Tabellen.

Das mit den zwei Schleifen klingt sehr logisch. Doch leider habe ich keinen Plan wie ich das umsetzen soll. Vorallem mit dem Templatesystem vom PHPbb. Hast du ein Beispiel für mich. Wenn ich mir soetwas anschauen kann, dann tue ich mir immer leichter das Ganze zu verstehen.


SKYSURFER
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

MagMo meint das denke ich so:

Code: Alles auswählen

<!-- BEGIN BILDER -->
       <table width="90" cellpadding="0" cellspacing="0" border="1">
<!-- BEGIN bilder_zeilen -->
   <tr>
<!-- BEGIN bilder_zelle -->
   <td class="text" height="28"><a href="{BILDER.bilder_zeilen.bilder_zelle.PFAD_BILD}"><img src="{BILDER.bilder_zeilen.bilder_zelle.PFAD_THUMB}" border="0"></a></td>
<!-- END bilder_zelle -->
   </tr>
<!-- END bilder_zeilen -->
     </table>
    <!-- END BILDER --> 
Dann ist der Block BILDER ein Switch ob überhaupt etwas angezeigt wird, mit bilder_zeilen kannst du eine Zeile beginnen die du mit bilder_zelle füllen kannst.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
MagMo
Ehemaliges Teammitglied
Beiträge: 584
Registriert: 30.10.2005 16:06
Wohnort: Köln
Kontaktdaten:

Beitrag von MagMo »

Hi,

genau so war es vom Prinzip her gemeint. Da es sich bei

Code: Alles auswählen

<!-- BEGIN BILDER -->
um ein Switsh handelt, sollte es aber gemäß der phpbb-Syntax so lauten

Code: Alles auswählen

<!-- BEGIN switch_BILDER --> bzw. <!-- END switch_BILDER -->
um es deutlich von einer Schleife zu unterscheiden.

Wie so was zu realisiseren ist kannst du dir in folgenden Dateien mal ansehen:
index.php + template/subSilver/index_body.tpl
Dort ist so eine doppelte Schleife vorhanden:

Code: Alles auswählen

<!-- BEGIN catrow -->
... irgendein code ...
<!-- BEGIN forumrow -->
... irgendein code ...
<!-- END forumrow -->
... irgendein code ...
<!-- END catrow -->
Grüße
MagMo
Meine MODs
Kein Support via PN!
Skippy
Mitglied
Beiträge: 212
Registriert: 19.08.2006 11:10
Wohnort: Eisenberg

Beitrag von Skippy »

ansonsten schau dir einfach mal an wie das mit den smilies gemacht wird bzw der Code dafür.
Benutzeravatar
MagMo
Ehemaliges Teammitglied
Beiträge: 584
Registriert: 30.10.2005 16:06
Wohnort: Köln
Kontaktdaten:

Beitrag von MagMo »

Hi,
Skippy hat geschrieben:ansonsten schau dir einfach mal an wie das mit den smilies gemacht wird bzw der Code dafür.
genau nach dem gleichen Prinzip, auch zwei ineinander liegende Schleifen (nur heißen die da anders).

Code: Alles auswählen

<!-- BEGIN smilies_row -->
...irgendein code...
<!-- BEGIN smilies_col -->
...irgendein code...
<!-- END smilies_col -->
...irgendein code...
<!-- END smilies_row -->
Grüße
MagMo
Meine MODs
Kein Support via PN!
SKYSURFER2002
Mitglied
Beiträge: 138
Registriert: 23.01.2005 16:09
Kontaktdaten:

Beitrag von SKYSURFER2002 »

Hallo,

nun habe ich mich mal mit den Smilies versucht. Dazu habe ich mein Cricca guestbook zerlegt.

Doch leider bekomme ich nun folgenden Fehler:

Code: Alles auswählen

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in F:\xampp\htdocs\phpbb\test.php on line 32
Hier mal die PHP-Datei:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include($phpbb_root_path . 'includes/guestbook.inc');

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_GUESTBOOK);
init_userprefs($userdata);
//
// End session management
//

	$template->set_filenames(array(
	'body' => test.tpl')
	);


	$sql = "SELECT emoticon, code, smile_url   
		FROM " . SMILIES_TABLE . " 
		ORDER BY smilies_id";
	if ($result = $db->sql_query($sql))
	{
		$num_smilies = 0;
		$rowset = array();
		while ($row = $db->sql_fetchrow($result))
		{
			if (empty($rowset[$row['smile_url']]))
			{
				$rowset[$row['smile_url']]['code'] = str_replace("'", "\\'", str_replace('\\', '\\\\', $row['code']));
				$rowset[$row['smile_url']]['emoticon'] = $row['emoticon'];
				$num_smilies++;
			}
		}
		
      	$db->sql_freeresult($result);
      	
		if ($num_smilies)
		{
			$smilies_count = min(19, $num_smilies);
			$smilies_split_row = intval($guest_config['smilies_column']) - 1;

			$s_colspan = 0;
			$row = 0;
			$col = 0;

			while (list($smile_url, $data) = @each($rowset))
			{
				if (!$col)
				{
					$template->assign_block_vars('smilies_row', array());
				}

				$template->assign_block_vars('smilies_row.smilies_col', array(
					'SMILEY_CODE' => $data['code'],
					'SMILEY_IMG' => $board_config['smilies_path'] . '/' . $smile_url,
					'SMILEY_DESC' => $data['emoticon'])
				);

				$s_colspan = max($s_colspan, $col + 1);

				if ($col == $smilies_split_row)
				{
					if ($row == intval($guest_config['smilies_row']) - 1)
					{
						break;
					}
					$col = 0;
					$row++;
				}
				else
				{
					$col++;
				}
			}

			$template->assign_vars(array(
				'L_EMOTICONS' => $lang['Emoticons'], 
				'S_SMILIES_COLSPAN' => $s_colspan)
			);
		}
	}
$template->pparse('body'); 

// standard page footer 
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 

?>

Wo liegt denn da ein Fehler?


SKYSURFER
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

"Syntax" Fehler.

Suche:

Code: Alles auswählen

   'body' => test.tpl') 
Ersetze mit:

Code: Alles auswählen

   'body' => test.tpl) 
Du hattest ein "Hochkomma" zuviel.
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Dr.Death hat geschrieben:Ersetze mit:

Code: Alles auswählen

   'body' => test.tpl) 
Du hattest ein "Hochkomma" zuviel.
Wohl eher eins zu wenig. 8)

Das gibt sonst nur nen anderen Fehler ( Template->make_filename(): Error )
Antworten

Zurück zu „Coding & Technik“