PHP 产品列表 - 循环结束关闭行

PHP Product Listing - End of Loop Close Row

抱歉这个标题,我不知道怎么说。

基本上,我有一个使用高级自定义字段填充产品的网页,它循环遍历产品并每行以三个为一组显示它们;每行交替颜色 - 浅灰色到深灰色。

我的问题是,我写的代码是检查每行是否有 3 个项目,所以如果产品列表行以 1 或 2 结尾,包含 div 的行不会被关闭,从而包装我的页脚并弄乱了页面的其余部分。以下是我的代码,应该很容易理解 - 你也可以看到我正在使用 LazyLoadAny - 基本上,我计算项目,如果超过 6 个,我会延迟加载其余的。在第一个项目上,我打开行容器,当有三个时,我关闭它。因此,我需要弄清楚如果该行以 1 或 2 个项目结束而不只是 3 个项目结束时如何关闭容器。

简短版本:如果 "internal-product-light" 或 "internal-product-dark" 行以 1 或 2 个产品而不是 3 个产品结尾,我该如何关闭它们?

<?php
$count = 0;
$rowCount = 0;
$rowClass = "internal-product-light";
// check if the repeater field has rows of data
if( have_rows('product_listing_repeater') ): ?>
<div class="internal-container">
    <div class="full-product-line-contain">
        <?php // loop through the rows of data
        while ( have_rows('product_listing_repeater') ) : the_row(); $count++; $rowCount++; ?>
            <?php if($rowCount  == 1) { ?>
                <div class="<?php echo $rowClass; ?>">
                <div class="product-centering">

                <?php if($count > 6) { ?>
                    <div class="js-lazyload">
                    <?php echo "<!--"; }
            } ?>
            <div class="internal-section product-line-item product-alignment clearfix">
                <div class="product-contain">
                    <?php if(get_sub_field('has_link')): ?>
                        <a href="<?php the_sub_field('link_url')?>" class="product-link">
                            <?php
                            if(get_sub_field('has_image')):
                                $singleImage = get_sub_field('block_image');
                                ?>
                                <img class="product-line-image" src="<?php echo $singleImage ?>" />
                            <?php endif; ?>
                        </a>
                    <?php endif; ?>
                    <div class="internal-content-contain-right no-float">
                        <?php if(get_sub_field('has_link')): ?>
                            <a href="<?php the_sub_field('link_url')?>" class="product-link-title">
                                <h2><?php the_sub_field('block_headline'); ?></h2>
                            </a>
                        <?php endif; ?>
                        <?php if(get_sub_field('has_link')): ?>
                            <a href="<?php the_sub_field('link_url')?>" class="product-line-btn"><?php the_sub_field('link_text')?></a>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
            <?php if($rowCount == 3) { ?>
                <?php if($count > 6) { echo "-->"; ?>
                    </div><!-- End lazy load div -->
                <?php } ?>
                </div><!-- End product centering -->
                </div><!-- End row -->
                <?php $rowCount = 0;
                if($rowClass == "internal-product-light"){ $rowClass = "internal-product-dark";}else{$rowClass = "internal-product-light";}
            } ?>
        <?php endwhile; ?>
    </div>
</div>

你的最后一个 if 语句是:

<?php if(($rowCount % 3) == 0) { ?>
    <?php if($count > 6) { echo "-->"; ?>
    </div><!-- End lazy load div -->
    <?php } ?>
    </div><!-- End product centering -->
    </div><!-- End row -->
    <?php if($rowClass == "internal-product-light"){ $rowClass = "internal-product-dark";}else{$rowClass = "internal-product-light";}
    } ?>

然后,在 while 块之后:

<?php if(($rowCount % 3) <> 0) { ?>
    <?php if($count > 6) { echo "-->"; ?>
    </div><!-- End lazy load div -->
    <?php } ?>
    </div><!-- End product centering -->
    </div><!-- End row -->
    <?php if($rowClass == "internal-product-light"){ $rowClass = "internal-product-dark";}else{$rowClass = "internal-product-light";}
    } ?>

x % y returns x/y 的余数。

所以下面的代码实际上是一个比我想象的要简单得多的解决方案 - 我将 post 代码然后分解它。

<?php
$count = 0;
$rowCount = 0;
$rowClass = "internal-product-light";
$rowInfo = get_sub_field('product_listing_repeater');
$fieldCount = count($rowInfo);
// check if the repeater field has rows of data
if( have_rows('product_listing_repeater') ): ?>
<div class="internal-container">
    <div class="full-product-line-contain">
        <?php // loop through the rows of data
        while ( have_rows('product_listing_repeater') ) : the_row(); $count++; $rowCount++; ?>
            <?php
               if($rowCount  == 1) { ?>
                <div class="<?php echo $rowClass; ?>">
                <div class="product-centering">

                <?php if($count > 6) { ?>
                    <div class="js-lazyload">
                    <?php echo "<!--"; }
            } ?>
            <div class="internal-section product-line-item product-alignment clearfix">
                <div class="product-contain">
                    <?php if(get_sub_field('has_link')): ?>
                        <a href="<?php the_sub_field('link_url')?>" class="product-link">
                            <?php
                            if(get_sub_field('has_image')):
                                $singleImage = get_sub_field('block_image');
                                ?>
                                <img class="product-line-image" src="<?php echo $singleImage ?>" />
                            <?php endif; ?>
                        </a>
                    <?php endif; ?>
                    <div class="internal-content-contain-right no-float">
                        <?php if(get_sub_field('has_link')): ?>
                            <a href="<?php the_sub_field('link_url')?>" class="product-link-title">
                                <h2><?php the_sub_field('block_headline'); ?></h2>
                            </a>
                        <?php endif; ?>
                        <?php if(get_sub_field('has_link')): ?>
                            <a href="<?php the_sub_field('link_url')?>" class="product-line-btn"><?php the_sub_field('link_text')?></a>
                        <?php endif; ?>
                    </div>
                </div>
            </div>
            <?php if($rowCount == 3 || $count == $fieldCount) { ?>
                <?php if($count > 6 || $count == $fieldCount) { echo "-->"; ?>
                    </div><!-- End lazy load div -->
                <?php } ?>
                </div><!-- End product centering -->
                </div><!-- End row -->
                <?php $rowCount = 0;
                if($rowClass == "internal-product-light"){ $rowClass = "internal-product-dark";}else{$rowClass = "internal-product-light";}
            } ?>
        <?php endwhile; ?>
    </div>
</div>

如您所见,我添加了变量 $fieldCount = count($rowInfo) 来计算 ACF 转发器字段。然后当我最初检查 3 个产品时,我添加了一个 OR 语句 - <?php if($rowCount == 3 || $count == $fieldCount) { ?> 和延迟加载检查 - <?php if($count > 6 || $count == $fieldCount) { echo "-->"; ?>

这确保如果它是 3,它会关闭 div,如果它是数组的末尾(通过 count 得出),它会关闭 div .

如有任何问题,请post进行说明。