it-swarm.it

Nascondi gli elementi passati in base alla data all'interno del ciclo foreach

Ho un componente personalizzato che visualizza gli articoli "coming soon" in base alle date. Sto cercando di nascondere tutti quegli elementi che sono passati la data odierna. Tuttavia, se non ci sono articoli futuri, non viene visualizzato il testo personalizzato.

Come posso farlo all'interno di un ciclo foreach? O come posso inserire php break? O c'è un modo migliore per farlo?

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

Devi gestire la sezione "else" al di fuori del ciclo foreach, poiché se non ci sono elementi, il ciclo foreach non verrà mai eseguito:

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

Fondamentalmente, ho aggiunto una variabile che afferma che un elemento non è stato visualizzato. Se viene visualizzato un elemento nel ciclo, allora cambio quella variabile su true. Dopo il ciclo, visualizzerò quindi il testo personalizzato se non c'erano articoli o se non era disponibile alcun articolo.

3
David Fritsch