it-swarm.com.de

Vergangene Elemente basierend auf dem Datum in der foreach-Schleife ausblenden

Ich habe eine benutzerdefinierte Komponente, die "demnächst" Elemente basierend auf Datumsangaben anzeigt. Ich versuche, alle Elemente zu verbergen, die nach dem heutigen Datum liegen. Wenn es jedoch keine zukünftigen Elemente gibt, wird der benutzerdefinierte Text nicht angezeigt.

Wie mache ich das in einer foreach-Schleife? Oder wie kann ich PHP break einfügen? Oder gibt es dafür einen besseren Weg?

<?php foreach ($this->items as $item) : ?>
    <?php if($item->state ==1 && strtotime($item->event_date) > strtotime(JFactory::getDate())): ?>
        <div class="cont">
            <!-- Display values from DB -->
        </div>
    <?php elseif($item->state ==1 && strtotime($item->event_date) < strtotime(JFactory::getDate())): ?>
        <!-- Dont display anything -->
    <?php else: ?>
        <div class="cont">
            <!-- Display custom text -->
        </div>
    <?php endif; ?>
<?php endforeach; ?>
1
Kannan Naidu

Sie müssen den Abschnitt "else" außerhalb der foreach-Schleife behandeln, da die foreach-Schleife niemals ausgeführt wird, wenn keine Elemente vorhanden sind:

<?php $item_displayed = false; ?>
<?php foreach ($this->items as $item) : ?>
    <?php if($item->state ==1 && strtotime($item->event_date) > strtotime(JFactory::getDate())): ?>
        <?php $item_displayed = true; ?>
        <div class="cont">
            <!-- Display values from DB -->
        </div>
    <?php endif; ?>
<?php endforeach; ?>
<?php if (!$item_displayed) : ?>
    <div class="cont">
        <!-- Display custom text -->
    </div>
<?php endif; ?>

Grundsätzlich habe ich eine Variable hinzugefügt, die besagt, dass ein Element nicht angezeigt wurde. Wenn ein Element in der Schleife angezeigt wird, setze ich diese Variable auf true. Nach der Schleife werde ich dann den benutzerdefinierten Text anzeigen, wenn keine Artikel vorhanden waren oder wenn kein Artikel ansteht.

3
David Fritsch