Вставить элемент среди цикла foreach

144
01 декабря 2017, 06:41

Здравствуйте, есть цикл, который выводит изображение

<?php if ( ! empty( $atts['works'] ) ): ?>
                <?php  foreach ( $atts['works'] as $work):?>
                        <?php for($i=0; $i<count($work); $i++):?>
                             <li class="gallery-item">
                                <a href="<?=$work[$i]['url']?>" data-fancybox="gallery" class="gallery-link">
                                    <img src="<?=$work[$i]['url']?>" alt="">
                                </a>
                            </li>
                        <?php endfor;?>
                <?php endforeach;?>
            <?php endif; ?>

Мне нужно среди этих изображений вставить кастомный блок, ссылку без изображения . Вот такой

<li class="gallery-item">
   <a href="#custom-link" class="gallery-link">
   text
   </a>
 </li>

Как это можно сделать?

Answer 1

Вы только недавно начали изучение языка и не понимаете основные конструкции? Поставьте внутри цикла проверку if( $i == 3) и выводите свой блок (будет после четвёртого элемента выводится).

<?php if ( ! empty( $atts['works'] ) ): ?>
    <?php  foreach ( $atts['works'] as $work):?>
            <?php for($i=0; $i<count($work); $i++):?>
                 <li class="gallery-item">
                    <a href="<?=$work[$i]['url']?>" data-fancybox="gallery" class="gallery-link">
                        <img src="<?=$work[$i]['url']?>" alt="">
                    </a>
                </li>
                <?php if ( $i == 3 ): ?>
                    <li class="gallery-item">
                       <a href="#custom-link" class="gallery-link">text</a>
                     </li>
                <?php endif; ?>
            <?php endfor;?>
    <?php endforeach;?>
<?php endif; ?>

Или так:

Вы только недавно начали изучение языка и не понимаете основные конструкции? Поставьте внутри цикла проверку if( $i == 3) и выводите свой блок (будет после четвёртого элемента выводится).

<?php if ( ! empty( $atts['works'] ) ): ?>
    <?php  foreach ( $atts['works'] as $work):?>
            <?php for($i=0; $i<count($work); $i++):?>
                 <li class="gallery-item">
                    <?php if ( $i == 3 ): ?>
                           <a href="#custom-link" class="gallery-link">text</a>
                    <?php else: ?>
                        <a href="<?=$work[$i]['url']?>" data-fancybox="gallery" class="gallery-link">
                            <img src="<?=$work[$i]['url']?>" alt="">
                        </a>
                    <?php endif; ?>
                </li>
            <?php endfor;?>
    <?php endforeach;?>
<?php endif; ?>
Answer 2

Как вариант можно попробовать разделить массив на 2 равные части и вставить между ними вашу заглушку, получилось что-то вот такое:

<?php if( ! empty( $atts['works'] ) ): ?>
    <?php foreach ( $atts['works'] as $works):?>
        <?php list($leftWorks, $rightWorks) = array_chunk($works, ceil(count($works) / 2)); ?>
        <?php foreach ($leftWorks as $work):?>
             <li class="gallery-item">
                <a href="<?=$work['url']?>" data-fancybox="gallery" class="gallery-link">
                    <img src="<?=$work['url']?>" alt="">
                </a>
            </li>
        <?php endforeach;?>
        <li class="gallery-item">
            <a href="#custom-link" class="gallery-link">
                text
            </a>
        </li>
        <?php foreach ($rightWorks as $work):?>
             <li class="gallery-item">
                <a href="<?=$work['url']?>" data-fancybox="gallery" class="gallery-link">
                    <img src="<?=$work['url']?>" alt="">
                </a>
            </li>
        <?php endforeach;?>
    <?php endforeach;?>
<?php endif; ?>

Обратите внимание что тут используется дубляж для массивов $leftWorks и $rightWorks, желательно вынести этот цикл чтобы не было повторений.

READ ALSO
Ошибка в файле mail.php

Ошибка в файле mail.php

Разработал форму для отправки писем на почту посредством ajax и все бы ничего, но на почту приходит пустое письмоСкрипт отправки js такой:

142
Многопоточный QWebSocketServer

Многопоточный QWebSocketServer

Задача: Есть три клиента которые подключаются к веб-серверу параллельноОбработка запросов от всех трех клиентов абсолютно разная

335
члены класса напрямую или через методы

члены класса напрямую или через методы

Есть ли принципиальная разница как обращаться к членам класса внутри методов этого же класса: через методы или напрямую? У меня сложилось...

256