2012-01-19 2 views
-1

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

Вот мой код:

<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--> 

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

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

«Если это первая итерация цикла, создайте Слой„горки“вокруг всех„“элементов скольжения

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

Я пробовал:

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

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

Я новичок в PHP fyi.

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

Thanks

+0

Причина, по которой div был создан для каждого слайда, заключается в том, что он все еще находится в цикле while. Он будет перезагружен для каждого слайда. –

ответ

2

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

<?php 
    echo '<div class="slides">'; 
    while(// the loop){ 
     // your instructions 
    } 
+0

Я сделал это для содержащего div для всего раздела; В этом разделе (и в цикле) я хочу 1 div, который обернет все слайды, а затем один div, который будет обертывать slide_nav. Я уточню свой вопрос, чтобы уточнить. – Squadrons

+0

@Squadrons. Просто поставьте их между первым циклом 'if' и' while'. – jeroen

+0

Я добавил код к моему примеру, чтобы сделать его более понятным. В цикле я хочу создать только два divs ONE TIME ONLY, а не для каждой итерации цикла. Это должно произойти внутри цикла, чтобы я мог вызывать элементы из цикла для содержимого внутри каждого из этих div. – Squadrons

0

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

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

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

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

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

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

Спасибо.

Смежные вопросы