【问题标题】:Correct way to use div in while statement?在 while 语句中使用 div 的正确方法?
【发布时间】:2019-04-02 07:22:57
【问题描述】:

whilestatement 中使用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>

【问题讨论】:

  • 本身没有“正确”或“错误”的方式,这取决于您想要实现的具体目标。 (目前还不清楚,所以请正确描述。)
  • 如果您有两条记录要循环,并且在column1 内都有输出,那么您显然需要在 outside 的同时输出该 div循环。
  • 只用一次?更严肃的一点是 - 如果您是初学者,使用并尝试创建自己编写的 CMS 是一个坏主意,而且您的代码看起来像是在尝试开始编写自己的 CMS。我可能是错的,但我不太清楚你想要实现什么,你在使用什么(CMS?plain php?)等等。
  • @EugeneAnisiutkin 我忘了添加 Wordpress - 高级自定义字段。
  • 那么liela_bilde 是如何发挥作用的,如果那个是真的,你到底想输出什么?在那种情况下它只会是一张图片,还是在这种情况下你想输出多个column div?

标签: php html advanced-custom-fields


【解决方案1】:

我假设您可能希望在 while 循环内的 PHP 块中使用 div。如果是这样,您可以使用以下语法来完成相同的操作。

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

【讨论】:

  • 恐怕比这更难。据我所知,Wordpress have_rows( 'image-collection' ) ): the_row() 将不得不留在原地。
【解决方案2】:

经过一些思考和一些测试,我认为我得到了一个非常可行的解决方案。关键是您必须将&lt;div&gt; 放在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 插件,它应该可以工作,并且您不应该因为&lt;div 而导致 HTML 损坏。如果你这样做了,那么我在某处犯了错误。

我还创建了一个非常简化的解决方案,它不依赖于插件,可以根据您的需要进行调整,并且可以满足您的需求。代码如下:

<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 的值,您可以更改我示例的输出。

【讨论】:

  • 还有一个注释。我的代码基于我在官方插件页面上找到的内容。可以在这里找到:The Original
【解决方案3】:

我认为您正在寻找的是用 X 项创建一行并在该动态 X 上开始一个新行?

在这种情况下,可以使用 % 找到答案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多