Seite 1 von 2

Problem mit Schleife

Verfasst: 29.10.2006 16:33
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

Verfasst: 29.10.2006 22:24
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

Verfasst: 30.10.2006 19:48
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

Verfasst: 30.10.2006 21:16
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.

Verfasst: 31.10.2006 07:55
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

Verfasst: 31.10.2006 08:38
von Skippy
ansonsten schau dir einfach mal an wie das mit den smilies gemacht wird bzw der Code dafür.

Verfasst: 31.10.2006 08:52
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

Verfasst: 31.10.2006 12:11
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

Verfasst: 31.10.2006 12:39
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.

Verfasst: 31.10.2006 13:31
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 )