PHP Получить каждый N-й элемент в цикле, но сгруппировать их по наборам из 6 - PullRequest
0 голосов
/ 08 января 2019

Я использую Slick Slider для создания слайдера событий. Каждый «слайд» состоит из группы из 6 событий разных размеров (показано на рисунке ниже):

enter image description here

PHP:

<div id="eventsList">

    <div class="eventsGroup">

        <?php foreach ($events as $event) { ?>

            <? $counter++; ?>

            <?php if ($counter == 1) { ?>
                <div>
                    <div class="gridblock">
                        <div class="gridblock_inner">
                            <?php echo $event['name']; ?>
                        </div>
                    </div>
            <?php } ?>

            <?php if ($counter == 2) { ?>
                    <div class="gridblock sixty">
                        <div class="gridblock_inner no_right_margin">
                            <?php echo $event['name']; ?>
                        </div>
                    </div>
                </div>
            <?php } ?>

            <?php if ($counter == 3) { ?>
                <div style="width:66.666667%;float:left;">
                    <div class="gridblock onehundred">
                        <div class="gridblock_inner">
                            <?php echo $event['name']; ?>
                        </div>
                    </div>
            <?php } ?>

            <?php if ($counter == 4) { ?>
                    <div class="gridblock fifty">
                        <div class="gridblock_inner">
                            <?php echo $event['name']; ?>
                        </div>
                    </div>
            <?php } ?>

            <?php if ($counter == 5) { ?>
                    <div class="gridblock fifty">
                        <div class="gridblock_inner">
                            <?php echo $event['name']; ?>
                        </div>
                    </div>
                </div>
            <?php } ?>

            <?php if ($counter == 6) { ?>               
                <div style="width:33.333333%;float:left;">

                    <div class="gridblock onehundred twohigh">
                        <div class="gridblock_inner no_right_margin doublehigh">
                            <?php  echo $event['name']; ?>
                        </div>
                    </div>

                </div>
            <?php } ?>

        <?php } ?>

    </div>

</div>

Slick Slider JS:

$('#eventsList').slick({
  dots: true,
  arrows: false,
  infinite: true,
  slidesToShow: 1,
  slidesToScroll: 1
});

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

Сначала я попробовал что-то похожее на этот шаблон:

if (($counter % 3) == 0) {
}

но это не имеет смысла, так как оно сгруппировано в 6. Как я могу сделать это, чтобы оно могло масштабироваться? Заранее спасибо.

Вот рабочая скрипка

1 Ответ

0 голосов
/ 08 января 2019

Вам просто нужно проверить, равен ли счетчик от 0 до 5 по модулю 6; переместите $counter++ в конец цикла и замените каждое сравнение на сравнение на 1 меньше, например

<?php if ($counter == 3) { ?>

становится

<?php if (($counter % 6) == 2) { ?>

Таким образом, ваш цикл в целом будет:

    <?php foreach ($events as $event) { ?>
        <div class="eventsGroup">

        <?php if (($counter % 6) == 0) { ?>
            <div>
                <div class="gridblock">
                    <div class="gridblock_inner">
                        <?php echo $event['name']; ?>
                    </div>
                </div>
        <?php } ?>

        <?php if (($counter % 6) == 1) { ?>
                <div class="gridblock sixty">
                    <div class="gridblock_inner no_right_margin">
                        <?php echo $event['name']; ?>
                    </div>
                </div>
            </div>
        <?php } ?>

        <?php if (($counter % 6) == 2) { ?>
            <div style="width:66.666667%;float:left;">
                <div class="gridblock onehundred">
                    <div class="gridblock_inner">
                        <?php echo $event['name']; ?>
                    </div>
                </div>
        <?php } ?>

        <?php if (($counter % 6) == 3) { ?>
                <div class="gridblock fifty">
                    <div class="gridblock_inner">
                        <?php echo $event['name']; ?>
                    </div>
                </div>
        <?php } ?>

        <?php if (($counter % 6) == 4) { ?>
                <div class="gridblock fifty">
                    <div class="gridblock_inner">
                        <?php echo $event['name']; ?>
                    </div>
                </div>
            </div>
        <?php } ?>

        <?php if (($counter % 6) == 5) { ?>               
            <div style="width:33.333333%;float:left;">

                <div class="gridblock onehundred twohigh">
                    <div class="gridblock_inner no_right_margin doublehigh">
                        <?php  echo $event['name']; ?>
                    </div>
                </div>

            </div>
        <?php } ?>
        </div>
        <? $counter++; ?>

    <?php } ?>
...