2012-08-11 75 views
-2

通过使用下面的代码,我显示了9张图像,但是所有图像并排排列,如何在一行中显示每3张图像,并在另一行中显示另外3张图像?如何在使用mysql的行中显示每3个结果?

<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%"> 
<tbody> 
<?php $sel = $db->query("select * from gallery order by gallery_cat_id asc limit 1,1"); 
while($row=mysql_fetch_array($sel)){ ?> 
<tr><td align="left" valign="top"><table align="center" border="0" cellpadding="0" cellspacing="0" width="100%"> 
<tbody><?php $sel1 = $db->query("SELECT DISTINCT (i.gallery_album_id) 
FROM mov_gallery_album AS a, mov_gallery_images AS i 
WHERE a.gallery_album_id = i.gallery_album_id 
AND a.gallery_cat_id =".$row['gallery_cat_id']." 
ORDER BY a.gallery_album_id DESC 
LIMIT 0 , 9 "); if(mysql_num_rows($sel1)>0){ ?> 
</tr><tr> 

<?php 
while($row1=mysql_fetch_array($sel1)){ 
$dis1 = $db->getRow("select * from ".ALBUMS." where gallery_album_id=".$row1['gallery_album_id']." limit 0,1"); 
$dis2 = $db->getRow("select * from ".GALLERY." where gallery_id=".$dis1['gallery_id']." limit 0,1"); 
$dis3 = $db->getRow("select * from ".ALBUMSIMAGES." where gallery_album_id=".$row1['gallery_album_id']." limit 0,1"); 
$dis4 = $db->getRow("select * from ".GALLERYCATEGORY." where gallery_cat_id=".$dis2['gallery_cat_id']." limit 0,1"); 
?> 

<td align="left" width="100%"><table border="0" cellpadding="5" cellspacing="0"> 
<tbody><tr><td align="center" height="8" valign="middle" width="80"> 
<div style="border:0px;clear:both;padding-bottom:100px;margin-left:-110px;"> 
<div class="image_stack1"><a href="<?php echo SITE; ?>album/<?php echo ucfirst($dis1['gallery_cat_id']); ?>/<?php echo ucfirst($dis1['gallery_id']); ?>/<?php echo ucfirst($row1['gallery_album_id']); ?>/"> 
<img id="photo3" src="<?php echo SITE; ?>uploads/gallery/<?php echo $dis4['folder']; ? >/<?php echo $dis2['folder']; ?>/<?php echo $dis1['folder']; ?>/thumb/<?php echo $dis3['image']; ?>"width="80" height="80"> 
<div class="namehover1"><?php echo substr(ucfirst($dis1['name']),0,13); ?></div> 
</a></div></div></td></tr></tbody></table></td><?php } ?></tr><tr><td class="midtitle" align="center" valign="middle">&nbsp;</td></tr> 
<tr><td style="padding-right: 10px;" align="right" colspan="4"><a href="<?php echo SITE; ?>gallery/<?php echo ucfirst($row['gallery_cat_id']); ?>/" class="midtitle"> 
<img src="http://www.img./viewall.png" border="0"/> 
</a></td></tr><?php } ?></tbody></table></td></tr><?php } ?></tbody></table> 
+3

请格式化您的代码。它是不可读的! – Besnik 2012-08-11 11:22:35

回答

2

使用div而不是table是明智的做法。 一些CSS的行会做的伎俩。在3张图像之后,您不必逻辑上决定移动到下一行。以下是如何在css中使用此功能 让我们为所有图像分配一个div容器。

<style> 
#photo_wrapper { 
    width:600px; 
} 
.photo { 
width:150px; 
height:150px; 
display:block; 
float:left; 
border:6px #c5d0d6 solid; 
margin-right:5px; 
margin-bottom:5px; 
overflow:hidden; 
} 
</style> 
<div id="photo_wrapper"> 
    <img src="image.jpg" class="photo"/> 
    <img src="image.jpg" class="photo"/> 
    <img src="image.jpg" class="photo"/> 
    <img src="image.jpg" class="photo"/> 
    <img src="image.jpg" class="photo"/> 
    <img src="image.jpg" class="photo"/> 
</div> 
0

这个概念很简单,用一个计数器,每次this counter MOD 3 is zero,开始新的line.Or算了算,直到3和重置计数器。

$i = 1; 
while($data = ....) 
{ 
    if($i == 1) 
    { 
    echo "<tr>"; //new line 
    } 

echo "<td> .... </td>"; 

    if($i == 3) 
    { 
    $i = 1; 
    echo "</tr>"; 
    } 
    else 
    { 
    $i++; 
    } 
} 

//IMPORTANT! PLEASE NOTICE TO THIS PART: (OUT OF THE LOOP) 
if($i < 3) 
echo "</tr>"; 
+0

你可以添加到我的代码 – 2012-08-11 11:49:13

+0

不。现在你已经有了'如何做'的知识。这是你的工作。你在寻找答案还是“为我做事”? – 2012-08-11 11:50:26

+0

我用你的代码,然后它显示只有2行,而不是3,所以我问你 – 2012-08-11 11:59:30

1

,这通常与模进行操作(余数):

foreach ($results as $nr => $row) { 
    if (($nr % 3) == 0) echo '<tr>'; 
    ... 
    if (($nr % 3) == 0) echo '</tr>'; 
} 
+0

请问您可以编辑问题来回答, – 2012-08-11 11:32:41

0

你可以把9张照片中一个div,然后修复该分区的宽度,使之只够一行3张照片。并设置float:left;对于CSS中的img标签。