PHP - закрытие div вложенными циклами

У меня есть папка с 400 изображениями. Я бы хотел поместить их на страницу, чтобы по восемь штук за раз. Это означает, что у меня будут все изображения на одной странице, но я буду разрезать их на части по восемь изображений, заключенных в такую ​​коробку:

<div class = "eightbox">
	<img src = "image1">
	<img src = "image2">
	<img src = "image3">
	<img src = "image4">
	<img src = "image5">
	<img src = "image6">
	<img src = "image7">
	<img src = "image8">
</div>
<div class = "eightbox">
	<img src = "image9">
	<img src = "image9">
	<img src = "image10">
	<img src = "image11">
	<img src = "image12">
	<img src = "image13">
	<img src = "image14">
	<img src = "image15">
</div>

Теперь мой код для этого пока делает вывод, но не закрывает «восьмерку», так что каждый новый div находится внутри другого.

Вот мой код:

<?php
$files = glob("images/*.*"); //loads all the images from my folder into an array

$y = ceil(count($files)/8); // The amount of images divided by eight and rounded up
$z = 1; //This counter makes the array continue outside the loop

for ($i=1; $i<$y; $i++)
{
	echo '<div class=\'eightbox\'>';
	
	for ($q=0; $q<8; $q++)
	{
		$num = $files[$z];
		echo '<img src=\'' . $num . '\' >';
		$z++;
	}
	
	echo '</div>';
}
?>

Я надеюсь, что это имеет для вас какой-то смысл, и заранее спасибо за помощь!

Обновлено: по многочисленным просьбам вот скриншот кода, который я получаю с помощью chrome: Скриншот моего кода

echo '<div class = "eightbox">';
j08691 15.10.2018 15:27

Можете ли вы опубликовать (неправильный) HTML-код, который вы получаете?

Wimanicesir 15.10.2018 15:28
occ.bruehlmann-anhaenger.ch/bildergallerie это результат моего кода
T. Roman 15.10.2018 15:30

имхо это невозможно. ничего плохого в вашем коде. Возможно, вы не выводите данные напрямую в браузер, используете ли вы какой-либо фреймворк или систему шаблонов?

Alex 15.10.2018 15:38
«Это результат моего кода» - в исходном коде этой страницы нет ни одного элемента с классом eightbox
misorude 15.10.2018 15:40

@Alex, я использую Joomla, и код находится внутри модуля, который отображается внутри статьи ...

T. Roman 15.10.2018 15:42

@misorude есть для меня, если вы посмотрите мой скриншот: ссылка

T. Roman 15.10.2018 15:45

@ T.Roman, пожалуйста, держите вашу страницу общедоступной, чтобы мы могли видеть реальный результат вашего кода.

Alex 15.10.2018 15:47

Это не то, что я вижу в исходном коде. Вы загружаете это динамически через AJAX? Тогда ошибка сценария, которую показывает консоль браузера, может быть причиной того, что я не вижу никаких изображений там.

misorude 15.10.2018 15:49

предоставьте полный фрагмент - что делает этот модуль? на каком этапе он был выполнен, это очень похоже на эту проблему github.com/joomla/joomla-cms/issues/12784

Alex 15.10.2018 15:49

@Alex Я использую плагин Sourcerer для использования php-кода внутри модуля

T. Roman 15.10.2018 15:54

Я думаю, вам стоит хотя бы попробовать сменить свой '<div> </div>' на <p></p>. Это связано с фильтрацией тела статьи Joomla, которая запускает фильтрацию закрывающего тега.

Alex 15.10.2018 15:56

В описании плагина четко сказано: Единственное, что вам нужно сделать, это окружить код тегами Sourcerer. Я не вижу Sourcerer в вашем коде.

Alex 15.10.2018 15:57

@Alex, я поместил {source} и {/ source} в свой код .. иначе он бы вообще не работал

T. Roman 15.10.2018 16:06

@Alex Использование тега p вместо div вообще не оборачивает изображения, а просто выводит все изображения ...

T. Roman 15.10.2018 16:16

если делали {source} - поделитесь полным фрагментом

Alex 15.10.2018 16:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
16
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Альтернатива, которая разбивает файлы на куски по 8 (используя array_chunk()), а затем выводит каждый фрагмент за раз ...

$split = array_chunk($files, 8);
foreach ( $split as $div )  {
    echo '<div class=\'eightbox\'>';

    foreach ($div as $file )    {
        echo '<img src=\'' . $file . '\' />';
    }

    echo '</div>';
}

Или с помощью implode() для вывода данных ...

$split = array_chunk($files, 8);
foreach ( $split as $div )  {
     echo '<div class=\'eightbox\'><img src=\''.
          implode('\' /><img src=\'', $div).
          '\' /></div>';
}

который ИМХО чуть менее читабелен, но более компактен.

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

T. Roman 15.10.2018 15:35

Если вы просматриваете исходный код, будет ли этот блок вложенным или раздельным?

Nigel Ren 15.10.2018 15:39

вложены как в "восьмерке" внутри "восьмерки"

T. Roman 15.10.2018 15:40

Кажется, я не могу воспроизвести, что в моих тестах все они представляют собой фрагменты тегов img в теге div.

Nigel Ren 15.10.2018 15:45

Не поймите меня неправильно ... изображения загружаются нормально, но теги div, в которых они находятся, не находятся рядом друг с другом ...

T. Roman 15.10.2018 15:47

Может ли это означать, что проблема в макете (возможно, CSS), а не в тегах?

Nigel Ren 15.10.2018 15:50

это довольно интересный подход, но стоит посмотреть. Мой CSS: .eightbox { width:100%; } .eightbox img { display: inline-block; width:20%; margin:2.5%; }

T. Roman 15.10.2018 16:08

Используя Modulo, вы можете сделать это

<?php

$files = glob("images/*.*"); //loads all the images from my folder into an array


foreach ( $files as $idx=>$file) {

    if ( $idx % 8 == 0 && $idx != 0){  // every 8 close a div and open a new one
        echo '</div>';
        echo '<div class = "eightbox">';
    }
    if ( $idx == 0 ){  // output first div
        echo '<div class = "eightbox">';
    }
    echo "<img src='$file'>";

}

if ( $idx+1 % 8 != 0 ) { // close the last div
    echo '</div>';
}
?>

Разве последний </div> не должен всегда отображаться эхом?

Nigel Ren 15.10.2018 15:57

Нет, если в последнем наборе было ровно 8 изображений. Я все равно внес незначительную поправку, пожалуйста, проверьте

RiggsFolly 15.10.2018 16:01

Другие вопросы по теме