web-dev-qa-db-fra.com

Masquer les éléments passés en fonction de la date dans la boucle foreach

J'ai un composant personnalisé qui affiche les éléments "à venir" en fonction des dates. J'essaie de cacher tous ces articles qui ont dépassé la date d'aujourd'hui. Cependant, s'il n'y a pas de futurs éléments, le texte personnalisé ne sera pas affiché.

Comment puis-je le faire dans une boucle foreach? Ou comment puis-je insérer php break? Ou y a-t-il une meilleure façon de faire cela?

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

Vous devez gérer la section "else" en dehors de la boucle foreach, car s'il n'y a pas d'éléments, la boucle foreach ne s'exécute jamais:

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

Fondamentalement, j'ai ajouté une variable qui indique qu'un élément n'a pas été affiché. Si un élément de la boucle est affiché, je mets alors cette variable sur true. Après la boucle, je vais ensuite afficher le texte personnalisé s'il n'y avait pas d'éléments ou si aucun élément n'est à venir.

3
David Fritsch