Создание элемента внутри цикла php while - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь настроить слайд-шоу внутри цикла wordpress. Для этого мне нужен один раздел содержимого слайда и один раздел, который выполняет навигацию.

Вот мой код:

<div id="upcoming_shows">
        <?php if ( $shows->have_posts() ) : ?>
            <?php /* Start the Loop */ ?>               
            <?php while ( $shows->have_posts() ) : $shows->the_post(); ?>
                <?php //get rid of auto drafts and trash posts
                    $p_status =  get_post_status( $post );
                    if ($p_status != 'trash' and $p_status != 'auto-draft') : 
                ?>
<!--I WANT A containing DIV HERE created only once-->
               <div id="slides">
                    <div class="slide" id="slide-<?php echo $post->ID; ?>">
                        <?php the_post_thumbnail(); ?>
                        <p class="show_date"><?php echo get_field('show_date'); ?></p>
                        <h1 class="band_names"><a href="<?php the_permalink(); ?>" alt="link to blog post page"><?php the_title(); ?></a></h1>
                    </div><!--end Slide-->
<!--AND IT WILL END HERE-->
               </div><!-- end SLIDES CONTAINING DIV--> 
<!--THEN ANOTHER DIV HERE CONTAINING THE SLIDES_NAV-->
<div id="slides_nav"> <!--CREATE THIS ONLY ONCE as a wrapper-->
 <p class="band_names"><a href=#slide-"<?php $post->ID; ?>"><?php the_title(); ?></a></p>
</div><!--end slides nav CONTAINER-->
                <?php endif; ?><!--end Auto Draft check-->
            <?php endwhile; ?>          
            <?php endif; ?><!--end if haveposts-->


        </div><!--end upcoming_shows-->

То, что я хотел бы сделать, - это обернуть элементы классом «slide» в div, называемый «slides», а затем создать еще один набор элементов, обернутый в div, который называется «slides_nav».

Я не могу придумать, как сказать:

"Если это первая итерация цикла, создайте div, который называется" slides ", вокруг всех элементов" slide ".

«Если это первая итерация цикла, создайте div, называемый« slide_nav », чтобы обернуть элементы навигации по слайдам» (который также будет создан внутри цикла (они будут названием поста $ show и страница-внутренняя ссылка на слайд с идентификатором, соответствующим href slide_nav.)

Я пытался:

<?php $i=0;
    if ($i == 0) {
        echo '<div id="slides">';
        $i++;
    };

и он правильно создал div, но делал это для каждого слайда (я также добавил условное выражение для закрытия div).

Я новичок в PHP.

Я посмотрел на некоторые ответы, чтобы создать что-то внутри цикла, и попробовал несколько, но я считаю, что из-за недостатка знаний в области программирования я упустил простое решение.

Спасибо

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Почему бы вам не создать его до цикла?

<?php
    echo '<div class="slides">';
    while( // the loop ){
        // your instructions
    }
0 голосов
/ 20 января 2012

Для всех других новичков в PHP, которые могут наткнуться на это, вот что я нашел лучшим ответом.

Создание div вне цикла гораздо проще, чем любое другое возможное решение.Хотя я мог условно заставить div слайдов отображаться внутри цикла и содержать каждый div слайдов, логика для этого работала бы только один раз в этом цикле.

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

Причина, по которой я задал этот вопрос, заключалась в том, что я предполагал, что создание двух циклов для получения одинаковой информации из одного и того же запроса к БД было плохой практикой.

Я не знаю, считается ли создание этих двух отдельных циклов хорошей практикой или нет, но я знаю, что программировать на FAR проще.

Если кто-нибудь может сказать мне,Это хорошая или плохая практика (выполнение избыточных запросов и циклов для одной и той же информации), чтобы упростить процесс создания хорошей (или необходимой) разметки. Я предоставлю вам правильный ответ.

Спасибо.

...