ti-enxame.com

Ocultar itens antigos com base na data no loop foreach

Eu tenho um componente personalizado que exibe itens "em breve" com base nas datas. Estou tentando esconder todos os itens que passaram da data de hoje. No entanto, se não houver itens futuros, ele não exibirá o texto personalizado.

Como faço isso dentro de um loop foreach? Ou como posso inserir php break? Ou existe uma maneira melhor de fazer isso?

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

Você precisa manipular a seção "else" fora do loop foreach, pois se não houver itens, o loop foreach nunca será executado:

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

Basicamente, adicionei uma variável que afirma que um item não foi exibido. Se algum item do loop for exibido, então alterno essa variável para true. Após o loop, exibirei o texto personalizado se não houver itens ou se nenhum item está próximo.

3
David Fritsch