Обертывание всего набора динамического содержимого с помощью div

Я новичок в PHP, и я не могу понять, где разместить какой-то код в моем PHP, чтобы обернуть выводимый контент в div. В существующем виде это выводит эхо дважды, каждое вокруг строки «season_date» и «archive_entry». Я хотел бы обернуть все это в один div.

Возможно, это что-то действительно очевидное, но я не могу понять, что делаю не так ...

Вот код:

<?php               
    if (get_field("production_history_flexible")){
        while (has_sub_field("production_history_flexible")){
            echo '<div class="archive-wrapper">'; // BEGIN DIV HERE??
            if (get_row_layout() == "season_date"){
                echo '<h2 class="season-date">';
                the_sub_field("season_date_entry");
                echo '</h2>'; 
            }  

    if (get_row_layout() == "archive_entry"){  

    $rows = get_sub_field('archive_entry_repeater');

    if ($rows){ 
        foreach($rows as $row){ }
    }

    // Surtitle
    if(trim($row['surtitle']!=''))
        { echo '<p class="surtitle">'.$row['surtitle'].'</p>'; }    

    // Title
    if(trim($row['title']!=''))
        { echo '<h3 class="season-history-show-title">'.$row['title'].'</h3>'; }    

    // Writer
    if(trim($row['writer']!=''))
        { echo '<h4 class="season-history-writer">by '.$row['writer'].'</h4>'; }

    echo '<ul>';

    // Director
    if(trim($row['director']!=''))
        { echo '<li>Directed by '.$row['director'].'</li>'; }

    // Performers
    if(trim($row['performers']!=''))
        { echo '<li>Performed by '.$row['performers'].'</li>'; }        

    // Co-Pro
    if(trim($row['co-pro']!=''))
        { echo '<li>Co-produced with '.$row['co-pro'].'</li>'; }        


    // Dates
    if(trim($row['dates']!=''))
        { echo '<li>'.$row['dates'].'</li>'; }

    // Venue
    if(trim($row['venue']!=''))
        { echo '<li>'.$row['venue'].'</li>'; }

    echo '</ul>'; 

    }
    echo '</div>'; // END DIV WRAPPER HERE?

    }
} ?>

(Я использую плагин Advanced Custom Fields для Wordpress с надстройками для гибкого контента и ретранслятора, если это имеет значение.)


person dotwongdotcom    schedule 08.11.2014    source источник


Ответы (2)


Попробуйте этот код, который будет открывать div каждый раз, когда будет обнаружен новый сезон:

<?php
    $first = true;
    if (get_field("production_history_flexible")){
        while (has_sub_field("production_history_flexible")){
            if (get_row_layout() == "season_date"){
                if(!$first)
                    echo '</div>';
                else
                    $first = false;
                echo '<div class="archive-wrapper">';
                echo '<h2 class="season-date">';
                the_sub_field("season_date_entry");
                echo '</h2>'; 
            }  

    if (get_row_layout() == "archive_entry"){  

    $rows = get_sub_field('archive_entry_repeater');

    if ($rows){ 
        foreach($rows as $row){ }
    }

    // Surtitle
    if(trim($row['surtitle']!=''))
        { echo '<p class="surtitle">'.$row['surtitle'].'</p>'; }    

    // Title
    if(trim($row['title']!=''))
        { echo '<h3 class="season-history-show-title">'.$row['title'].'</h3>'; }    

    // Writer
    if(trim($row['writer']!=''))
        { echo '<h4 class="season-history-writer">by '.$row['writer'].'</h4>'; }

    echo '<ul>';

    // Director
    if(trim($row['director']!=''))
        { echo '<li>Directed by '.$row['director'].'</li>'; }

    // Performers
    if(trim($row['performers']!=''))
        { echo '<li>Performed by '.$row['performers'].'</li>'; }        

    // Co-Pro
    if(trim($row['co-pro']!=''))
        { echo '<li>Co-produced with '.$row['co-pro'].'</li>'; }        


    // Dates
    if(trim($row['dates']!=''))
        { echo '<li>'.$row['dates'].'</li>'; }

    // Venue
    if(trim($row['venue']!=''))
        { echo '<li>'.$row['venue'].'</li>'; }

    echo '</ul>'; 

    }

    }
    if(!$first)
        echo '</div>';
} ?>
person Maxime    schedule 08.11.2014
comment
Это было моим первоначальным порывом, но в итоге весь вывод был заключен в div. то есть: ‹div› дата сезона запись в архиве запись в архиве запись в архиве дата сезона запись в архиве запись в архиве ‹/div› Я бы хотел добиться: ‹div› дата сезона запись в архив запись в архиве запись в архиве ‹/div› ‹div› дата сезона запись в архиве запись в архиве запись в архиве ‹/div› - person dotwongdotcom; 08.11.2014
comment
Извините, я не понял, что не могу добавить форматирование к ответному комментарию. - person dotwongdotcom; 08.11.2014
comment
Спасибо Спасибо! Да! Работал как шарм. Вы можете объяснить, почему это работает? - person dotwongdotcom; 08.11.2014
comment
Конечно! На самом деле вы пытаетесь обернуть сезон в div. Цикл дает вам два типа объектов: иногда сезон, иногда запись в архиве. Каждый раз, когда мы встречаем новый сезон, нам нужно запускать div. Если мы уже встречались в предыдущем сезоне, мы также хотим закрыть упаковку div в предыдущем сезоне (отсюда и использование переменной $ first). Наконец, в конце цикла нам нужно закрыть последний открытый сезон. - person Maxime; 08.11.2014
comment
Я отредактировал код, чтобы обработать случай, когда внутри цикла не найдено сезонов. - person Maxime; 08.11.2014
comment
Блестяще. Я застрял в мыслях так сказать внутри коробки;) Спасибо за помощь !! - person dotwongdotcom; 08.11.2014

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

Вот что я придумал, хотя, вероятно, есть более элегантный способ кодировать это .. это работает :)

                    <?php
                    $module_open; // set var
                    $module_close; // set var
                    
                    function content_module_open(){
                        global $module_open;
                        global $module_close;
                        
                        if($module_open !== TRUE){
                            echo '<div class="content-module">';
                            $module_open = true; 
                            $module_close = false; 
                        }
                    }
                    
                    function content_module_close(){
                        global $module_open;
                        global $module_close;
                        
                        if($module_close !== TRUE){
                            echo '</div><!-- content-module -->';
                            $module_close = true; 
                            $module_open = false;
                        }
                    }
                    
                ?>
                <?php if (have_rows('flexible_content_types')): ?>
                                                
                    <?php while (have_rows('flexible_content_types')): the_row(); ?>

                        <?php if (get_row_layout() == 'heading_h1'): ?>
                            <?php content_module_open();?>
                
                            <h1 class=""><?php the_sub_field('heading'); ?></h1>
            
                        <?php elseif (get_row_layout() == 'heading_h2'): ?>
                            <?php content_module_open();?>
                    
                            <h2 class=""><?php the_sub_field('heading'); ?></h2>
            
                        <?php elseif (get_row_layout() == 'paragraph_content'): ?>
                            <?php content_module_open();?>
                    
                            <?php the_sub_field('content'); ?>

                        <?php elseif (get_row_layout() == 'faq_accordion'): ?>
                            <?php content_module_open();?>                      
        
                        <?php if (have_rows('faqs')): ?>
                        <?php $count = 0 ?>
                        <div class="accordion" id="faqAccordion">
                            <?php while (have_rows('faqs')): the_row(); ?>
                            <?php $count++; ?>
                            <div class="card">
                                <div class="card-header" id="heading<?php echo $count; ?>">
                                    <h2 class="clearfix mb-0">
                                        <a class="btn btn-link" role="button" data-toggle="collapse" data-target="#collapse<?php echo $count; ?>" aria-expanded="<?php if ($count === 1){echo 'true';}else{echo 'false';} ?>" aria-controls="collapse<?php echo $count; ?>">
                                            <?php the_sub_field('question');echo $count; ?> 
                                            <i class="fas fa-<?php if ($count === 1){echo 'plus';}else{echo 'minus';} ?>"></i>
                                        </a>                                    
                                    </h2>
                                </div>
                                <div id="collapse<?php echo $count; ?>" class="collapse <?php if ($count === 1){echo 'show';} ?>" aria-labelledby="heading<?php echo $count; ?>" data-parent="#faqAccordion">
                                    <div class="card-body"><?php the_sub_field('answer'); ?></div>
                                </div>
                            </div>
                            <?php endwhile; ?>
                        </div>
                        <?php endif; ?>
                   
                      <?php elseif (get_row_layout() == 'timeline'): ?>
                        <?php content_module_open();?>                          
                        
                        <?php if (have_rows('timeline_items')): ?>
                                <ul class="timeline">
                                <?php $time = 0 ?>
                           <?php while (have_rows('timeline_items')): the_row(); ?>
                                <?php $time++; ?>
                                <li class="<?php if ($time % 2 == 0){echo "timeline-inverted";} ?>">
                                    <div class="timeline-date"><?php the_sub_field('year'); ?></div>
                                  <div class="timeline-badge"><i class="fa fa-map-signs"></i></div>
                                  <div class="timeline-panel">
                                     <div class="timeline-heading">
                                        <h4 class="timeline-title"><?php the_sub_field('title'); ?></h4>
                                     </div>
                                     <div class="timeline-body">
                                        <p><?php the_sub_field('content'); ?></p>
                                     </div>
                                  </div>
                               </li>

                            <?php endwhile; ?>
                                </ul>
                        <?php endif; ?>
                    <?php elseif (get_row_layout() == 'association_list'): ?>
                        <?php content_module_open();?>
                    
                            the_sub_field('associations');
                                the_sub_field('association_logo');
                                the_sub_field('assoc_title');
                                the_sub_field('assoc_description');
                    <?php elseif (get_row_layout() == 'call_to_action'): ?>
        
                        <?php content_module_close(); ?>
        
                        <?php if($module===0){echo $close;} ?>
                        
                        <div class="content-cta cta-tabs cta-<?php the_sub_field('cta_style') ?> text-center">

                            <?php if (get_sub_field('cta_heading')): ?>
                                <h1 class=""><?php the_sub_field('cta_heading') ?></h1>
                            <?php endif; ?>                         

                            <?php if (get_sub_field('sub_text')): ?>
                                <p class="lead"><?php the_sub_field('sub_text') ?></p>
                            <?php endif; ?>

                            <?php if (get_sub_field('button_text') && get_sub_field('button_link')): ?>
                                <a href="<?php the_sub_field('button_link') ?>" class="btn btn-lg <?php the_sub_field('button_color') ?>"><?php the_sub_field('button_text') ?></a>                         
                            <?php endif; ?>

                        </div><!-- end div#content-cta -->

                    <?php elseif (get_row_layout() == 'testimonial_slider'): ?>

                    <?php content_module_close(); ?>

                        <?php if (have_rows('testimonials')): ?>
                            <div id="testimonial-slider" class="owl-carousel">

                            <?php while (have_rows('testimonials')): the_row(); ?>
                                <div class="testimonial">
                                    <div class="testimonial-content">
                                        <div class="testimonial-icon">
                                            <i class="fas fa-quote-left"></i>
                                        </div>
                                        <p class="description"><?php the_sub_field('testimonial'); ?></p>
                                    </div>
                                    <h3 class="title"><?php the_sub_field('author'); ?></h3>
                                    <span class="post"><?php the_sub_field('role'); ?></span>
                                </div>
                            <?php endwhile; ?>

                        </div>
                    
                    <?php endif; //testimonials ?>
        
                <?php endif; // get_row_layout ?>

            <?php endwhile; // have_rows?>

        <?php else: ?>
            <div class="content-module">
                <?php the_content(); ?>         
            </div><!-- end div.content-module -->
        <?php endif; ?>

Это откроет оболочку с функцией content_module_open (), если она еще не открыта, для каждого элемента в цикле гибкого содержимого. И он закрывает его перед CTA и Testimonials ..

person revive    schedule 16.03.2021