Правильный способ использования div в инструкции while?

Как правильно использовать div в заявлении while? У меня проблемы с выяснением - Как использовать div только один раз, пока работает цикл.

Мой текущий код в каждом цикле заканчивается так:

 <div class = "column1">
   <img src = "IMG1">
</div>
<div class = "column1">
   <img src = "IMG">
</div>

Я пытаюсь достичь -

 <div class = "column1">
   <img src = "IMG1">
   <img src = "IMG2">
</div>

Мой текущий код:

    <div class = "roww"> 

    <?php if ( have_rows( 'image-collection' ) ) :

    $images = [];
    $i = 0;

    while ( have_rows( 'image-collection' ) ): the_row();

      $images[ $i ] = get_sub_field( 'image' );

      if ( get_sub_field( 'liela_bilde' ) == "True" ) { ?>

     <div class = "column"> 
        <img src = "<?php echo $images[ $i ][ 'url' ]; ?>" alt = "<?php echo 
        $images[ $i ][ 'alt' ]; ?>">
    </div>

    <?php } else { ?>

    <div class = "column1">
        <img src = "<?php echo $images[ $i ][ 'url' ]; ?>" alt = "<?php echo 
        $images[ $i ][ 'alt' ]; ?>">
    </div>


    <?php }?>
     <?php

     ++$i;

     endwhile;
     endif; ?>

     </div>

Как таковых не существует «правильного» или «неправильного» пути, это зависит от того, чего конкретно вы хотите достичь. (Что на данный момент довольно неясно, поэтому, пожалуйста, опишите это как следует.)

misorude 29.10.2018 12:15

Если у вас есть две записи, которые вы хотите перебрать, и у вас есть вывод для обеих внутри column1, то вам, очевидно, нужно вывести этот div вне цикла while.

misorude 29.10.2018 12:17

Просто использовать его один раз? На более серьезном замечании - использование и попытки создать самописную CMS - плохая идея, если вы новичок, а ваш код выглядит как попытка начать писать свою собственную CMS. Я могу ошибаться, но мне не очень непонятно, чего вы пытаетесь достичь, что вы используете (CMS? Plain php?) И т. Д.

Eugene Anisiutkin 29.10.2018 12:19

@EugeneAnisiutkin Я забыл добавить Wordpress - Расширенные настраиваемые поля.

Krizs 29.10.2018 12:22

Итак, как liela_bilde играет в это, что именно вы хотите вывести, если это правда? В этом случае будет только одно изображение, или вы хотите вывести несколько блоков column в этом случае?

misorude 29.10.2018 12:30

Я понял проблему, но сейчас не могу проверить свое решение. if ( get_sub_field( 'liela_bilde' ) == "True" ) может быть на данный момент дроппером или заменен на что-то другое. Основная проблема заключается в организации <div class = "column"> и <div class = "column1". в зависимости от оператора if они должны быть разными, и единовременно должен быть только один из них.

Eugene Anisiutkin 29.10.2018 12:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
2
6
430
3

Ответы 3

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

<?php
while($row = mysqli_fetch_array($result)){
echo "<div style='background-color:red;color:white;'>text</div>";
}
?>

Боюсь, это немного сложнее. Насколько мне известно, Wordpress have_rows( 'image-collection' ) ): the_row() должен остаться на прежнем месте.

Eugene Anisiutkin 29.10.2018 12:53

После некоторых размышлений и небольшого тестирования я думаю, что получил довольно работоспособное решение. Ключ в том, что вы должны вывести <div> за пределы цикла while. Добавив дополнительную проверку if ($i==0), можно было сделать что-то вроде echo 'class = "column"'.

Мое решение, вероятно, худшее из возможных, но оно должно работать.

В итоге ваш код должен выглядеть примерно так:

<div class = "roww"> 

<?php if ( have_rows( 'image-collection' ) ) :

        $images = [];
        $i = 0;

        ?> <div <?
        while ( have_rows( 'image-collection' ) ): the_row();

        $images[ $i ] = get_sub_field( 'image' );

        if ($i==0) {
            if ( get_sub_field( 'liela_bilde' ) == "True" ) { 
                echo 'class = "column"';
            }
            else {
                echo 'class = "column1"';
            }
        ?> > <? } ?>

        <img src = "<?php echo $images[ $i ][ 'url' ]; ?>" alt = "<?php echo 
        $images[ $i ][ 'alt' ]; ?>">

        <?php

        ++$i;

        endwhile; ?>
        </div> <?
    endif; ?>

</div>

Это не было проверено и может содержать ошибки, так как не было времени, чтобы попытаться воспроизвести вашу структуру. Однако, учитывая тот факт, что вы используете плагин Elliot Condon, он ДОЛЖЕН работает, а у вас НЕ ДОЛЖНА получается сломанный HTML из-за <div. Если да, то я где-то сделал ошибку.

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

<div class = "roww">

<?php 
    $test=true;

    if ( $test ) :

        $images = [];
        $i = 0;
        ?>
        <div 
        <?php
        while ( $test ) :

            $test1=true;

            if ($i==0) { if ($test1) echo 'class = "column"'; else echo 'class = "column1"';
            ?> > <? } ?>


            <img src = "<?php echo "Yay"; ?>" alt = "<?php echo 
            "Nay"; ?>">

            <?php
            ++$i;
            if ($i==5) { break; }
        endwhile; ?>
        </div> <?php
    endif;
?>

</div>

Выглядит немного иначе, но я старался сохранить основную логику. Изменив значения $test и $test1, вы можете изменить вывод моего примера.

Также примечание. Мой код основан на том, что я нашел на официальной странице плагина. Его можно найти здесь: Оригинал

Eugene Anisiutkin 30.10.2018 11:46

Я думаю, что вы ищете, это создать строку с элементами X и начать новую строку на этом динамическом X?

В этом случае ответ можно найти с помощью%.

if ($myIndex % 2 === 0) {
  // Do something
}

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