Здравствуйте. Есть разметка, вида:
<div class="row-4">
тут 4 пункта из базы
</div>
<div class="row-4">
тут 4 пункта из базы
</div>
В базе неопределенное кол-во пунктов, мне нужно, что перед каждым четвертым первым пунктом открывался блок <div class="row-4">
а после 4 пункта, закрывался </div>
.
Еще нужно учесть что в последнем блоке может быть пунктов меньше чем 4.
Я пытался вот так:
<? $sp = 0;
$table_all = mysql_query("SELECT * FROM `table` ORDER BY `id` DESC");
while ($table = mysql_fetch_assoc($table_all)) {
$sp++;
?>
<? if ($sp == 4) { ?> <div class="row-4"> <? } ?>
<div>
<input type="checkbox" class="checkbox" id="checkbox-<?=$table['id'];?>" name="<?=$table['id'];?>" />
<label for="checkbox-<?=$table['id'];?>"><?=$table['name'];?></label>
</div>
<? if ($sp == 4) { ?> </div> <? $sp = 0; } ?>
<? } ?>
Но что-то я путаю видимо. Буду благодарен за помощь.
Самое простое - подготовить view нужной структуры во время получения данных из базы.
<?php
$view = array();
$row = array();
while ($item = mysql_fetch_assoc($table_all)) {
if (count($row) == 4) {
$view[] = $row;
$row = array();
}
$row[] = $item;
}
if ($row) {
$view[] = $row;
}
?>
<?foreach($view as $row):?>
<!-- Render row -->
<?foreach($row as $item):?>
<!-- Render item -->
<?endforeach?>
<?endforeach?>
Если наличие </tag><tag>
в темплейте не смущает, можно так:
$index = 0;
echo '<div class="row">';
while ($item = mysql_fetch_assoc($table_all)):
if (($index+1)%4 == 0) echo '</div><div class="row">';
// render item
$index++;
endwhile;
echo '</div>';
Выбриаете все данные в массив, массив разбиваете на части с помощью array_chunk
<?php
$table_all = mysql_query("SELECT * FROM `table` ORDER BY `id` DESC");
$data = array();
while ($table = mysql_fetch_assoc($table_all)) {
$data[] = $table;
}
$data = array_chunk($data, 4);
?>
<?php foreach ($data as $chunk): ?>
<div class="row-4">
<?php foreach ($chunk as $table):?>
<div>
<label>
<input type="checkbox" class="checkbox" name="<?=$table['id'];?>" />
<?=$table['name'];?>
</label>
<div>
<?php endforeach;?>
</div>
<?php endforeach;?>
Кстати, конструкция <label><input type="checkbox" /> Название чекбокса</label>
позволяет не задавать ID для элементов, а задавать числовые имена для полей ввода - дурной тон.
$code;
$out = array();
$tag_start = '<div class=\'row-4\'>';
$tag_end = '</div>';
while(++$i < 100){
$code .= $i.' ';//Сюда - заполняем пункты нужные, как бы рендерили в хтмл
if($i % 4 == 0){
$out[] = $code;
$code = '';
}
}
if($code){//Если мы не обнуляли код в последней итерации(она была меньше 4х)
$out[] = $code;//делаем это сейчас
}
echo
$tag_start.
implode(
$tag_end.
$tag_start,
$out
).
$tag_end;
Пример в сендбоксе
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть строка с текстомИ есть таблица в базе данных MySQL, в этой таблице записаны некоторые слова
Всем привет, у меня возникла проблема при выборе дерева категорийВот запрос, который я посылаю