|
|
|
| Нужно вывести заголовок + все картинки к этому заголовку, по четыре картинки в ряд.
У меня сейчас выводится заголовок + картинки одна под другой. Не пойму, в чем дело. Помогите, пожалуйста.
<?php
include("configs/dbopen.php");
$sql= "SELECT *, m.id_menu AS menu
FROM img AS i
LEFT JOIN menu AS m ON i.id_menu = m.id_menu
WHERE i.id_menu = m.id_menu
ORDER BY i.id_menu";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
if(mysql_num_rows($res)>0){
for($p = 0; $row = mysql_fetch_assoc($res); ) {
if($p != $row['id_menu']) {
$p = $row['id_menu'];
$title = $row['title'];
print "<div class = 'c_head'>" . $title . "</div>";
}
for($i=0;$i<count(mysql_num_rows($res));$i++){
$foto = $row['name'];
$file = "lightbox/images/copy/" . $foto;
$big_file = "lightbox/images/" . $foto;
$galery = "<table border = '1px'>";
if(!($i%4)) $galery .= "<tr>";
$galery .= "<td><a href='". $big_file ."'><img border='0' src='" . $file . "' width='180' height='100'
alt = '" .$file . "'></a></td>";
if(!($i+1%4)) $galery .= "</tr>";
$galery .= "</table>";
print $galery;
print "<hr size = '1px' width=75%>";
}
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(01.12.2008 в 14:57)
| | $i<count(mysql_num_rows($res)) - а разве так должно быть? Вы должны ориентироваться на число картинок, а не на число строк в ресурсе. Вы используете JS-библиотеку Lightbox для вывода? | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 15:26)
| | Нет, я не использую JS-библиотеку Lightbox. У меня просто так называется папка.
Число картинок в вытянутом из базы массиве у меня совпадает с числом строк. Вот поэтому я и делаю $i<count(mysql_num_rows($res)). | |
|
|
|
|
|
|
|
для: Лена
(01.12.2008 в 15:48)
| | Если у вас счетчик правильный (чило массива), то проблем быть не должно. Чего не скажешь о подписях к изображением. Раскладывая ресурс, вы получаете одну строку, и если нужно изображения, то какой-то элемент этого ресурса должен быть массивом, что-то у вас этого не наблюдается. Вот вы и получаете при каждом проходе по одному изображению. | |
|
|
|
|
|
|
|
для: Лена
(01.12.2008 в 14:57)
| | чтот вроде этого можно опробовать:
<?...
if(mysql_num_rows($res)>0)
{
$galery = '';
for($i=$p=0; $row=mysql_fetch_assoc($res); )
{
if($p != $row['id_menu'])
{
$p = $row['id_menu'];
$title = $row['title'];
if (!empty($galery)) print "</table><hr size='1px' width='75%'>";
print "<div class='c_head'>$title</div>\n";
$i = 0;
$galery = "<table border='1px'>";
}
$foto = $row['name'];
$file = "lightbox/images/copy/" . $foto;
$big_file = "lightbox/images/" . $foto;
if($i%4==0) $galery .= "<tr>";
$galery .= "<td><a href='". $big_file ."'><img border='0' src='" . $file .
"' width='180' height='100' alt = '" .$file . "'></a></td>";
if($i%4==3) $galery .= "</tr>";
$i++;
}
}
?>
|
Да, и Ваша фраза:
if(!($i+1%4)) $galery .= "</tr>";
| - от невнимательности ;) | |
|
|
|
|
|
|
|
для: Волки
(01.12.2008 в 17:22)
| | И в чем разница?
>if(!($i+1%4)) $galery .= "</tr>";
> - от невнимательности ;)
это от вашего незнания ;-) | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 17:24)
| | Всего один цикл, таблица должна формироваться правильно (хотя все равно надо по месту подгонять). | |
|
|
|
|
|
|
|
для: Волки
(01.12.2008 в 17:33)
| | Таблица изображений формируется не правильно, потому, что не получается в данном случае массива изображений, который и нужно раскладывать, а не потому, что надо выполнять:
if ($n % 4 == 3).
Чтобы разложить правильно - некий элемент, например, полученный элемент $row['tema'], должен содержать в себе массив: имена изображений, подписи к ним, размеры и т.д.. Вот этот массив и нужно раскладывать. Либо, если эти изобаржения содержатся как строки в исходном ресурсе, то нужно делать цикл, проверяя некий общий ключ для этих элементов (изображений). | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 17:24)
| | >это от вашего незнания ;-)
А по-моему - от Вашего. | |
|
|
|
|
|
|
|
для: Trianon
(01.12.2008 в 17:38)
| | Trianon, только не надо. Проверяйте:
<?
$arr = array('set1','set2','set3','set4','set5','set6','set7','set8');
$col = 5;
$n = ($col>count($arr) || !(count($arr)%$col)) ? count($arr) : count($arr)+($col-count($arr)%$col);
print '<TABLE cellpadding="4" cellspacing="1" bgcolor="#000000">';
for ($i=0; $i<$n; $i++) {
if (!($i % $col)) print '<TR bgcolor="#ffffff">';
$arr[$i] ? print "<TD>$arr[$i]</TD>" : print "<TD> </TD>";
if (!($i+1 % $col)) print "</TR>";
}
print "</TABLE>";
|
Хрен (первый случай) от редьки (второй) не слаще. Проблема совсем не в этом. | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 17:41)
| | И что? В иcходнике html видны закрывающие теги </TR> ?
Кому не надо? | |
|
|
|
|
|
|
|
для: Trianon
(01.12.2008 в 17:46)
| | А, понял я про что, про забытые скобки. Блин, пардон: if (!(($i+1) % $col)). Будет не закрыт тег, но вывод будет-то по требуемому числу. Я просто не пойму от куда берутся эти изображения. Тут как-то сам ресурс тогда по модулю 4 разбивать нужно, иначе "какая-то не то" получается. | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 17:49)
| | картинок же может быть и меньше, и больше четырех на строку - в результате запроса... | |
|
|
|
|
|
|
|
для: Trianon
(01.12.2008 в 18:08)
| | Ну это уже другой вопрос. В данном случае, у автора выводится по одному. А как их может быть несколько, если просто происходит цикл прохода ресурса: первая итерация - первое изображение из n изображений, вторая - второе, и т.д.. Откуда могут появиться другие? | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 18:12)
| | из базы :)
Из схемы же не следует, что у любого элемента меню РОВНО четыре картинки? :)
Собственно, таких количественных ограничений в любом случае следовать не будет. | |
|
|
|
|
|
|
|
для: Trianon
(01.12.2008 в 18:22)
| | Да разве в этом дело, бог с ним, пусть их будет по три, или 4, потом 3, потом 5... Вот вы, как MySQL-док (:)) скажите, как можно при раскладе ресурса, если его некий элемент, это не массив этих изображений, при таком подходе разложения, получить необходимую таблицу?
Строка ресурса должна выглядеть либо так: а = (пусть строка), b = array(а это уже массив изображений, вот его во вложенном цикле можно и разложить), с = (чего-то);
любо так:
0 стр. а = (пусть строка), b = (первое изображение), с = (чего-то)
1 стр. а = (пусть строка), b = (второе изображение), с = (чего-то)
и т.д...
Во втором случае надо тогда ориентироваться, например, проверяя по а, которая должна быть уникальной для каждых N изображений.
Вот тогда я понимаю, иначе как? Сколько бы не влаживали функций, в итоге вывод будет только одного из N изображений, при подходе как выше. | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 19:01)
| | >Строка ресурса должна выглядеть либо так: а = (пусть строка), b = array(а это уже массив изображений, вот его во вложенном цикле можно и разложить), с = (чего-то);
такое можно достичь через group_concat , но на мой взгляд, овчинка выделки не стоит.
>любо так:
>0 стр. а = (пусть строка), b = (первое изображение), с = (чего-то)
>1 стр. а = (пусть строка), b = (второе изображение), с = (чего-то)
>и т.д...
А такое - вполне рядовой случай
<?
$sql = "SELECT objects.name, images.path
FROM objects LEFT JOIN images ON images.object_id = objects.id
GROUP BY objects.name";
$res = mysql_query($sql);
for($rows = array(); $row = mysql_fetch_assoc($res);)
$rows[$row['name']][] = $row['path'];
$maxcount = 0;
foreach($rows as $row)
$maxcount = max($maxcount, count($row));
foreach($rows as $name => $row)
{
echo "<tr><td>$name</td>";
for($i = 0; $i < $maxcount; $i++)
{
$val = $i < $maxcount ? "<img src=\"".$row[$i]."\" />" : " ";
echo "<td>$val</td>\r\n";
}
echo "</tr>\r\n";
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(01.12.2008 в 19:28)
| | Мне то ясно. Можно даже взять и то что у автора, но выводить надо во вложенном цикле не текущую строку ресурса, а смещения, начиная от первого изображения... Короче, причина не в принципе расклада таблицы (как закрыть тег).
Сегодня и так башка болит, еще вы меня "нервируете" :)) Вместо этих "баталий", давно бы написали - "Милочка, а вот тут вы не правы, надо вот так...". ;-) | |
|
|
|
|
|
|
|
для: sim5
(01.12.2008 в 19:35)
| | В принципе я тоже разобралась. Больше в этой теме пока ничего писать не нужно. День тяжелый был, уже спать иду. Завтра свой код исправленный здесь покажу. Спасибо. | |
|
|
|
|
|
|
|
для: Лена
(01.12.2008 в 23:59)
| | Вот что получилось.
<?php
include("configs/dbopen.php");
$sql= "SELECT *, m.id_menu AS menu
FROM img AS i
LEFT JOIN menu AS m ON i.id_menu = m.id_menu
WHERE i.id_menu = m.id_menu
ORDER BY i.id_menu";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
if(mysql_num_rows($res)>0){
$rows = array();
while($row = mysql_fetch_assoc($res))
$rows[$row['title']][] = $row['name'];
$maxcount = 0;
foreach($rows as $row)
$maxcount = max($maxcount, count($row));
foreach($rows as $name => $row){
echo $name;
echo "<table>";
$j = 0;
for($i = 0; $i < $maxcount; $i++){
if(!($j%4)) echo "<tr>";
$file = "lightbox/images/copy/" . $row[$i];
$big_file = "lightbox/images/" . $row[$i];
if($row[$i])
echo "<td><a href='". $big_file ."'><img src='" . $file . "' width='180' height='100'
alt = '" .$file . "'/></a></td>";
if(!(($j+1)%4)) echo "</tr>";
$j++;
}
echo "</table>";
print "<hr size = '1px' width='75%'>";
}
}
?>
|
| |
|
|
|