Как отобразить блок кода в конце цикла foreach только один раз - PullRequest
0 голосов
/ 27 апреля 2018

Ниже у меня есть следующий оператор foreach с вложенным в него оператором if. Я сталкиваюсь с проблемой, которую не могу понять.

Я хочу, чтобы следующий код был включен в else-statement, но не был в цикле foreach. Я пробовал функцию прерывания, но она разрывает цикл, который я не хочу. Я также попытался изменить структуру цикла, добавив endforeach перед конечной скобкой для else-statement, но это просто нарушило код.

По сути, я просто хочу, чтобы мой цикл foreach работал нормально, но затем для else-statement необходимо заполнить moreEventsContainer. Я не могу придумать, как это сделать.

У кого-нибудь есть идеи?

  echo '<div class="moreEventsContainer">
          <div id="moreEventsWrap" class="total-center">
           <span class="moreEventsLink">SEE ALL EVENTS</span>
           <div class="rightArrow"></div>
         </div>
       </div>'

;

Вот что я хочу вывести:

enter image description here

Без перерыва он делает это:

enter image description here

С перерывом я получаю только это:

enter image description here

Полный код:

foreach ($event_rows as $event_row) {
    $event_name = $event_row['event_name'];
    $display_date = $event_row['display_date'];
    $event_description = $event_row['small_desc'];
    $end_date = new DateTime($event_row['end_date']);
    $date = new DateTime('now');
    if ($date >= $end_date) {
        //$noEvents = 'No events are scheduled yet.';
        $noEvents = '
        <div id="noEvents">
        </div>
        ';
    } else {
        echo '<div class="eventBlock">';
        echo '<div class="total-center eventBlockWrap">';
        echo '<span class="displayDate">'. $display_date .'</span>';
        echo '<span class="eventName">'. $event_name .'</span>';
        echo '<p class="dGsmall margNone">'. $event_description .'</p>';
        echo '</div>';
        echo '</div>';
        break;
        echo '<div class="moreEventsContainer">
                <div id="moreEventsWrap" class="total-center">
                    <span class="moreEventsLink">SEE ALL EVENTS</span>
                    <div class="rightArrow"></div>
                </div>
            </div>'
        ;
    }
}

1 Ответ

0 голосов
/ 27 апреля 2018

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

$AtLeastOneEvent = false;
foreach ($event_rows as $event_row) {
    $event_name = $event_row['event_name'];
    $display_date = $event_row['display_date'];
    $event_description = $event_row['small_desc'];
    $end_date = new DateTime($event_row['end_date']);
    $date = new DateTime('now');
    if ($date >= $end_date) {
        //$noEvents = 'No events are scheduled yet.';
        $noEvents = '
        <div id="noEvents">
        </div>
        ';
    } else {
        $AtLeastOneEvent = true;
        echo '<div class="eventBlock">';
        echo '<div class="total-center eventBlockWrap">';
        echo '<span class="displayDate">'. $display_date .'</span>';
        echo '<span class="eventName">'. $event_name .'</span>';
        echo '<p class="dGsmall margNone">'. $event_description .'</p>';
        echo '</div>';
        echo '</div>';           
     }
}

if ($AtLeastOneEvent == true) 
{
 echo '<div class="moreEventsContainer">
                <div id="moreEventsWrap" class="total-center">
                    <span class="moreEventsLink">SEE ALL EVENTS</span>
                    <div class="rightArrow"></div>
                </div>
            </div>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...