вывод в таблицу

proto

Новичок
вывод в таблицу

вероятно проблема окажется тривиальнее некуда, однако я понял, что просто не знаю как.

в базе содержатся имена графических фаилов.

задача в том чтобы вывести их таким образом в таблицу, чтобы в каждой строке таблицы содержалось 4 ячейки с соответствующими изображениями, ну и так далее для остальных строк.

то есть, если, например, имеется 50 изображений, имена которых храняться в базе, то их необходимо разместить в 12 строк по 4 изображения в каждой, а в 13-ой - соответственно 2.

Также необходимо, чтобы это выполнялось для любого числа картинок, даже не кратного 4.

Заранее Спасибо!!!

P.S.

Это может уже где было, хотя поиском не нашел, за ссылку также буду признателен!!!
:confused:
 

Dreammaker

***=Ф=***
.image {
float: left
}


<div class="image"><img src="kartinka.jpg" alt=""></div>

Или в этом направлении ещё что-то придумать..
Имхо намного удобнее.. :) и ложится красиво, и по пять и по шесть штучек в ряд :) - то есть оптимально занимает пространство. А что бы занимало по четыре в ряд, например, можно с margin пошаманить.
 

proto

Новичок
может я спятил?! )))

но в упор не вижу решения проблеммы!

то есть ты предлагаешь миновать вывод в таблицу??

хм! а тогда как прилипание к правой стороне контейнера это решает и тем более количественно - "и по пять и по шесть штучек в ряд"?
 

Yaponchick

Новичок
Вот, как я делал:
PHP:
<table><tr>
<?php
$i = 1;

foreach($row = mysql_fetch_row($r)){

printf('<td>%s</td>', $row[0]);
if (!($i % 12)){ // 12 фоток в строке
print "</tr><tr>";
}
$i++;
}
?>
</tr></table>
 

proto

Новичок
Автор оригинала: Yaponchick
Вот, как я делал:
PHP:
<table><tr>
<?php
$i = 1;

foreach($row = mysql_fetch_row($r)){

printf('<td>%s</td>', $row[0]);
if (!($i % 12)){ // 12 фоток в строке
print "</tr><tr>";
}
$i++;
}
?>
</tr></table>
я так понимаю
PHP:
$r
- это запрос!

а вот
PHP:
foreach
- никуда не годиться! насколько мне, как новичку, известно, да и то что написано в доке, говорит о том, что синтаксис у этого совершенно иной, а именно:
PHP:
foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement
Даже проверив все это, я убедился, что не пашет!!! Может ты перепутал или недописал??

Но в любом случае спасибо - натолкнул на мысль!!!

-~{}~ 14.05.06 02:02:

УРА! я решил!!! Спасибо Yaponchick!! Вот так:

PHP:
$q = mysql_query("SELECT * FROM images");

  echo '<table><tr>';
	$i = 1;
        while($r = mysql_fetch_array($q)){
   echo '<td><img src="img/'.$r[2].'"></td>';

          if (!($i % 4)){ 
                               echo "</tr><tr>";
                         }
      $i++;
}

  echo '</tr></table>';

А теперь, в продолжении - КАК ДЕЛАТЬ НЕСКОЛЬКО СТРАНИЦ, ЕСЛИ НА ОДНУ УЖЕ ВЫВЕДЕНО БОЛЬШЕ ЧЕМ НУЖНО ФОТОК?
 

Yaponchick

Новичок
foreach -> while
Просто уже сплю =))
а "пагинатор" выгоден, но не всегда =)
 

Dreammaker

***=Ф=***
proto,
может и я спятил.. :) Первое что в голову пришло просто.. Не использовать таблицу..
Делаем див и в него ложим картинки в дивах (или просто картинки). Див родительский можно сделать нужной ширины и тогда они (картинки) будут ложиться с нужным количеством в ряд. Отступы делаем margin или padding. Если ширину у родительского дива задать как 100%, то соответсвенно он займёт максимум элемента, который находится уровнем выше. А картинки будут выкладыватся в ряд, по одной пока будет куда выкладываться. Как только заняли жизненное пространство в одном ряду они начинают заполнять следующий ряд и так до посинения :) или пока картинки не кончатся.. Как по мне, то удобно, особенно для присобачивания к движкам..
 

proto

Новичок
Dreammaker
хм.... надо будет попробовать..это что то из серии "ходить задом наперед"

-~{}~ 14.05.06 13:39:

Автор оригинала: sage
proto
так, как ты сейчас делаешь, делать не надо. Прочитай внимательно первые два поста: http://phpclub.ru/talk/showthread.php?s=&threadid=66535&rand=131

http://www.phpfaq.ru/paginator
о! спасибо огромное за пагинатор!!

если не сложно, поясни пожалуйста вот этот код:
PHP:
{foreach item=cols from=$rows}
<tr>
{foreach item=col from=$cols}
<td>...</td>
{/foreach}
</tr>
{/foreach}

где $rows - массив колонок, $cols - массив ячеек.
просто мне не совсем ясен синтаксис
PHP:
foreach
Спасибо!!
 

proto

Новичок
Автор оригинала: sage
это синтаксис smarty
http://smarty.php.net/manual/ru/language.function.foreach.php

-~{}~ 14.05.06 20:45:

т.е. по результатам выборки строишь массив
Код:
Array
(
    [1-ая строка] => Array
        (
          [1-ый столбец],
          [2-ой столбец],
          [...]
        ),
    [2-ая строка] => Array
        (
          [...]
        ),
    [...] => Array
        (
          [...]
        )
)
во! я не имел дело с смарти
PHP:
 {foreach}
. Все время держал в голове стандартный
PHP:
foreach ($a as $b){}
сейчас изучу...думаю вопросы все равно появяться!

Спасибо!

-~{}~ 14.05.06 15:10:

ну да! там же надо устанавливать, подключать и т.д.

Все таки меня инетресовал обычный бытовой способ!!!

И потом, изучив те 2 поста, я все таки не непонял твоих слов "так, как ты сейчас делаешь, делать не надо."!!!

Однажды мне тут указали на то, что если даже все работает, это может быть не верно. Я так понимаю, аналогичная ситуация!!!!

В данном случае речь не шла об этике программирования, об идеальности структуры кода. Просто появилась необходимость, решение рабочее найдено!! Собственно и все!

Хотя про правильность и логику, я бы еще почитал коменты!!

Спасибо, sage!
 

Dreammaker

***=Ф=***
Если начал работать со Смарти, то не буду мешать, некоторое время будет занято :)

Просто, в образовательных целях уточню. По фразе
>надо будет попробовать..это что то из серии "ходить задом наперед"
я понял, что скорее всего не до конца понимается вариант, предложенный мной.

Картинки, не будут ложиться справа налево. Они как раз будут ложиться в нужном порядке. float: left в данной ситуации значит, что предыдущий контейнер будет клеится к левой стороне текущего, то есть что нам и нужно: они будут выкладываться слева направо пока не займут ряд, потом снова начнут выкладываться слева направо в следующем ряду.

update: когда начал писать, то ещё не было куска поста о том, что со Смарти покончено.. :)
 

proto

Новичок
Автор оригинала: Dreammaker
Если начал работать со Смарти, то не буду мешать, некоторое время будет занято :)

Просто, в образовательных целях уточню. По фразе
>надо будет попробовать..это что то из серии "ходить задом наперед"
я понял, что скорее всего не до конца понимается вариант, предложенный мной.

Картинки, не будут ложиться справа налево. Они как раз будут ложиться в нужном порядке. float: left в данной ситуации значит, что предыдущий контейнер будет клеится к левой стороне текущего, то есть что нам и нужно: они будут выкладываться слева направо пока не займут ряд, потом снова начнут выкладываться слева направо в следующем ряду.

update: когда начал писать, то есть щё не было куска поста о том, что со Смарти покончено.. :)
я понял!!! просто нужно именно 4 КАРТИНКИ В СТРОКЕ. и если честно просто не хочется морочиться с отступами, подгоняя под структуру. Причем использование <div> не будет релевантно различным разрешением мониторов. где-то будет видно 4, а где то и 7.

Если ты говоришь, что уже используешь свой вариант - предложи сцылку!! просто взглянуть!!!

Спасибо!
 

Dreammaker

***=Ф=***
Бросил в личку.
Это шаблон для диза, вгляни как сделан блок "Мы предлагаем оборудование следующих компаний:".
аналогично можно и с картинками. Если же задать жёстко ширину этого блока, то будет ложиться с нужным количеством в ряд.
update: сбросил второй пример. Кажись там делал аналогично.. И как раз с картинками..
 
Сверху