foreach в три колонки php ?

12
D
На сайте с 28.06.2008
Offline
980
423

Есть цикл, как его данные вывести в три колонки таблицы?

<?php foreach ($this->categories as $category) : ?>
<li>
<a href="<?php echo $category->link; ?>" class="category"><?php echo $this->escape($category->name);?></a>
</li>
<?php endforeach; ?>
webiumpro
На сайте с 20.03.2017
Offline
38
#1


<table>
<thead>
<tr>
<th>Название</th>
<th>Столбец2</th>
<th>Столбец3</th>
</tr>
</thead>
<tbody>
<?php foreach ($this->categories as $category): ?>
<tr>
<td><a href="<?php echo $category->link; ?>" class="category"><?php echo $this->escape($category->name);?></a></td>
<td><?php echo $category->column2; ?></td>
<td><?php echo $category->column3; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
D
На сайте с 28.06.2008
Offline
980
#2

webiumpro, все по прежнему вывелось в 1 столбик

tommy-gung
На сайте с 22.11.2006
Offline
260
#3

так как это меню, я бы css использовал

Здесь не могла быть ваша реклама
D
На сайте с 28.06.2008
Offline
980
#4

Это не меню.

Попробовал так, тоже что-то не получилось, пытаюсь понять почему

<?php $i=0;?>
<?php foreach ($this->categories as $category) : ?>
<?php
$i++;
$count = count($this->categories);
$limit = $count/3;
var_dump($limit);
var_dump($i);
?>

<table>
<tr>
<td>
<?php
if ($i < $limit){
echo "<a href=". $category->link." class=\"category\">". $this->escape($category->name)."</a>";
}
?>
</td>
<td>
<?php
if ($i > $limit && $i <= ($limit*2)){
echo "<a href=". $category->link." class=\"category\">". $this->escape($category->name)."</a>";
}
?>
</td>
<td>
<?php
if ($i > ($limit*2)){
echo "<a href=". $category->link." class=\"category\">". $this->escape($category->name)."</a>";
}
?>
</td>
</tr>
</table>
<?php endforeach; ?>



---------- Добавлено 09.07.2019 в 09:14 ----------

А блин таблица то внутри цикла :))

webiumpro
На сайте с 20.03.2017
Offline
38
#5

Так вы одну одну и ту же категорию пытаетесь в 3 ячейки запихать) Если вы хотите, чтобы именно категории в 3 столбца выводились, тот тут действительно будет проще с помощью CSS тогда решить. Сетка того же bootstrap подойдет

---------- Добавлено 09.07.2019 в 12:27 ----------

Условия самостоятельно расставите)


<div class="row">
<?php foreach ($this->categories as $category): ?>
<div class="col-md-4">
<a href="<?php echo $category->link; ?>" class="category"><?php echo $this->escape($category->name); ?></a>
</div>
<?php endforeach; ?>
</div>
D
На сайте с 28.06.2008
Offline
980
#6
webiumpro:
Условия самостоятельно расставите)

Если бы я понял вашу дею, то расставил бы, а так пока не догоняю :))

webiumpro
На сайте с 20.03.2017
Offline
38
#7
Dram:
Если бы я понял вашу идею, то расставил бы, а так пока не догоняю )

Вы знаете, как сетка bootstrap работает? Идея в том, что каждый блок с классом col-md-4 - это столбец, который занимает треть ширины от всей строки. Если бы я понимал, зачем вам условия со счетчиком и лимитами, то привел бы пример сразу с этими условиями)

D
На сайте с 28.06.2008
Offline
980
#8

Я не хочу тянуть лишний css, уверен что можно обойтись только php

Есть список полученный в цикле длинной N. Хочу его разбить на три колонки чтобы не такой блинный был.

Буду дальше мучать спс.

Кажется придумал - нужно добавлять к ссылкам float: left; если только $i не делится на 3

---------- Добавлено 09.07.2019 в 09:50 ----------

Все сделал!

<div class="row">
<?php foreach ($this->categories as $category): ?>
<?php
$i++;
if ($i % 3 == 0){
$float = "";
}else {
$float = "float: left;";
}
?>
<div style="<?php echo $float; ?>">
<a href="<?php echo $category->link; ?>" class="category"><?php echo $this->escape($category->name); ?></a>
</div>
<?php endforeach; ?>
</div>
webiumpro
На сайте с 20.03.2017
Offline
38
#9

Это не лишний css) Необязательно тянуть весь бутстрап, его сетку можно подключить отдельно. Если не хотите ее подключать, то самостоятельно такой код в css написать тоже проще простого, используя свойство flex. PHP вам здесь вообще не нужен и нагромождение условий - тоже. Рендеринг шаблонов должен быть максимально отделен от php-кода, насколько это возможно

Y
На сайте с 22.03.2017
Offline
114
#10
Dram:
Я не хочу тянуть лишний css

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий