Извлечение вложенного содержимого репитера из ACF с PHP - проблема с закрывающими тегами - PullRequest
0 голосов
/ 22 декабря 2018

Я новичок в php, и мне трудно определить, где закрывающие теги (в основном, div) должны быть размещены в этом PHP, чтобы соответствовать оригинальному HTML, который я кодировал без динамического содержимого (для сайта Wordpress).Прямо сейчас мой нижний колонтитул (не показан ниже) перемещается, потому что их слишком много / недостаточно, а элементы не вкладываются должным образом.

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

PHP:

<?php

if (have_rows('pSect')):
    while (have_rows('pSect')):
        the_row();
        $productSectionTitle = get_sub_field('pSecTitle');
        echo '<div class="block_title cf" id="collectie_block_title">' . $productSectionTitle . '</div>';

        if (have_rows('prods')):
            while (have_rows('prods')):
                the_row();
                $products = get_sub_field('prods');
                echo '<div class="block cf" id="item_block">';

                if (have_rows('indivProd')):
                    while (have_rows('indivProd')):
                        the_row();
                        $individualProduct = get_sub_field('indivProd');
                        $images            = get_sub_field('images');

                        if ($images):
                            foreach ($images as $image):
                                $full_image_url = $image['url'];
                                echo '<div class="item_block_left bstretchMe cf" data-img-src="' . $full_image_url . '"></div>';
                            endforeach;
                        endif;

                        $productName = get_sub_field('product_name');
                        $productType = get_sub_field('product_type');


                        echo '<div class="item_block_right cf">' . '<div class="item_block_right_header cf">' . '<ul class="item_block_right_header_list">' . '<li id="product_title">' . $productName . '</li>' . '<li id="product_subtitle">' . $productType . '</li>' . '</ul>' . '<div class="item_block_right_viewoptions">bestellen opties</div>' . '</div>' . '<div class="item_block_right_details cf">' . '<div class="item_block_right_details_specs">' . '<h5 class="item_block_right_details_specstitle">Lorem Ipsum</h5>' . '<ul class="item_block_right_details_specslist">';

                        if (have_rows('detailList')):
                            while (have_rows('detailList')):
                                the_row();
                                $bijzonderheden = get_sub_field('bijzonderheden');
                                $message        = "working!?";
                                echo '<li>' . $bijzonderheden . '</li>';
                            endwhile;
                        endif;

                        echo '</ul>' . '</div>' . '<div class="item_block_right_details_kleuren cf">' . '<p id="item_block_right_details_kleuren_title">Kleuren</p>';

                        if (have_rows('colOps')):
                            while (have_rows('colOps')):
                                the_row();
                                $colorPick = get_sub_field('cPick');
                                echo '<div id="item_block_right_details_kleuren_swatches" style="background-color:' . $colorPick . ';"></div>';
                            endwhile;
                        endif;

                        echo '</div>' . '<div class="item_block_right_details_ordering">' . '<h5 class="item_block_right_details_orderingtitle">Lorem Ipsum</h5>' . '<p class="item_block_right_details_orderingp">' . 'All products created through DITT Bags are custom made. Details such as color, size and detailing will be discussed upon the beginning of a new project. To order a bag and begin a new project, send an inquiry to  inquiries@dittbags.com' . '</p>' . '</div>' . '</div>';
                    endwhile;
                endif;

                echo '</div>' . 
                    '</div>'; 
            endwhile;
        endif;

        echo '</div>'; 
    endwhile;
endif;

echo '</div>' . '</div>';

?>

ОРИГИНАЛЬНЫЙ HTML:

<div class="block_title cf" id="collectie_block_title">Tassen</div>

<div class="block cf" id="item_block">
  <div class="item_block_left cf">
    img img img make this a backstretch slideshow that autoplays when     item is selected
  </div>
  <div class="item_block_right cf">
    <div class="item_block_right_header cf">
      <ul class="item_block_right_header_list">
        <li id="product_title">SANNE</li>
        <li id="product_subtitle">leren backpack XL</li>
      </ul>
      <div class="item_block_right_viewoptions">bestellen opties</div>
    </div>
    <div class="item_block_right_details cf">
      <div class="item_block_right_details_specs">
        <h5 class="item_block_right_details_specstitle">Lorem     Ipsum</h5>
        <ul class="item_block_right_details_specslist">
          <li>lorem ipsum</li>
          <li>lorem ipsum</li>
          <li>lorem ipsum</li>
        </ul>
      </div>
      <div class="item_block_right_details_kleuren">
        <p id="item_block_right_details_kleuren_title">Kleuren</p>
        <div     id="item_block_right_details_kleuren_swatches">,.,.,.,.,.,.,</div>
      </div>
      <div class="item_block_right_details_ordering">
        <h5 class="item_block_right_details_orderingtitle">Lorem Ipsum</h5>
    <p class="item_block_right_details_orderingp">
      All products created through DITT Bags are custom made. Details such as color, size and detailing will be discussed upon the beginning of a new project. To order a bag and begin a new project, send an inquiry to inquiries@dittbags.com
    </p>
  </div>
</div>

Спасибо всем!

1 Ответ

0 голосов
/ 24 декабря 2018

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

echo '</div>' . '<div class="item_block_right_details_ordering">' . '<h5 class="item_block_right_details_orderingtitle">Lorem Ipsum</h5>' . '<p class="item_block_right_details_orderingp">' . 'All products created through DITT Bags are custom made. Details such as color, size and detailing will be discussed upon the beginning of a new project. To order a bag and begin a new project, send an inquiry to inquiries@dittbags.com' . '</p>' . '</div>' . '</div>';

В приведенном ниже коде определенно есть личные предпочтения, но пара ключевых моментовподумайте о следующем:

Вы будете использовать два типа файлов PHP: одни для представлений (где вы визуализируете HTML) и те, для которых у вас есть просто логика. Вы написали свои в большей степени в логикестиль, в котором все заключено в один массивный тег PHP.

Если вы визуализируете представление, я бы рекомендовал открывать и закрывать PHP вокруг каждой строки логики.

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

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

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

<?php if (have_rows('pSect')): ?>
    <?php while (have_rows('pSect')) : ?>
        <?php the_row(); ?>
        <?php $productSectionTitle = get_sub_field('pSecTitle'); ?>
        <div class="block_title cf" id="collectie_block_title"><?php echo $productSectionTitle; ?></div>

        <?php if (have_rows('prods')) : ?>
            <?php while (have_rows('prods')): ?>
                <?php the_row(); ?>
                <?php $products = get_sub_field('prods'); ?>
                <div class="block cf" id="item_block">
                    <?php if (have_rows('indivProd')): ?>
                        <?php while (have_rows('indivProd')): ?>
                            <?php the_row(); ?>
                            <?php
                                $individualProduct = get_sub_field('indivProd');
                                $images            = get_sub_field('images');
                            ?>

                            <?php if ($images): ?>
                                <?php foreach ($images as $image): ?>
                                    <?php $full_image_url = $image['url']; ?>
                                        <div class="item_block_left bstretchMe cf" data-img-src="<?php echo $full_image_url; ?>"></div>
                                <?php endforeach; ?>
                            <?php endif; ?>

                            <?php
                                $productName = get_sub_field('product_name');
                                $productType = get_sub_field('product_type');
                            ?>


                            <div class="item_block_right cf">
                                <div class="item_block_right_header cf">
                                    <ul class="item_block_right_header_list">
                                        <li id="product_title"><?php echo $productName; ?></li>
                                        <li id="product_subtitle"><?php $productType; ?></li>
                                    </ul>
                                </div>
                                <div class="item_block_right_viewoptions">bestellen opties</div>
                            </div>

                            <div class="item_block_right_details cf">
                                <div class="item_block_right_details_specs">
                                    <h5 class="item_block_right_details_specstitle">Lorem Ipsum</h5>
                                        <ul class="item_block_right_details_specslist">

                                            <?php if (have_rows('detailList')): ?>
                                                <?php while (have_rows('detailList')): ?>
                                                    <?php the_row(); ?>
                                                        <?php
                                                            $bijzonderheden = get_sub_field('bijzonderheden');
                                                            $message        = "working!?";
                                                        ?>
                                                        <li><?php echo $bijzonderheden; ?></li>;
                                                <?php endwhile; ?>
                                            <?php endif; ?>

                                        </ul>
                                    </div>
                                <div class="item_block_right_details_kleuren cf">
                                    <p id="item_block_right_details_kleuren_title">Kleuren</p>

                                    <?php if (have_rows('colOps')): ?>
                                        <?php while (have_rows('colOps')): ?>
                                            <?php the_row(); ?>
                                            <?php $colorPick = get_sub_field('cPick'); ?>
                                            <div id="item_block_right_details_kleuren_swatches" style="background-color:<?php echo $colorPick; ?>"></div>
                                        <?php endwhile; ?>
                                    <?php endif; ?>
                                </div>

                                <div class="item_block_right_details_ordering">
                                    <h5 class="item_block_right_details_orderingtitle">Lorem Ipsum</h5>
                                    <p class="item_block_right_details_orderingp">
                                        All products created through DITT Bags are custom made. Details such as color, size and detailing will be discussed upon the beginning of a new project. To order a bag and begin a new project, send an inquiry to  inquiries@dittbags.com
                                    </p>
                                </div>
                            </div>
                        <?php endwhile; ?>
                    <?php endif; ?>
                </div>
            <?php endwhile; ?>
        <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>

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

Вы можете использовать include для этого.

Надеюсь, это поможет.

...