it-swarm-es.tech

Ocultar elementos anteriores según la fecha dentro del bucle foreach

Tengo un componente personalizado que muestra elementos "próximamente" basados ​​en fechas. Estoy tratando de ocultar todos esos elementos que han pasado la fecha de hoy. Sin embargo, si no hay elementos futuros, no muestra el texto personalizado.

¿Cómo lo hago dentro de un bucle foreach? ¿O cómo puedo insertar php break? ¿O hay una mejor manera de hacer esto?

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

Debe manejar la sección "else" fuera del bucle foreach, ya que si no hay elementos, el bucle foreach nunca se ejecuta:

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

Básicamente, agregué una variable que indica que un elemento no se ha mostrado. Si se muestra algún elemento en el bucle, entonces cambio esa variable a verdadero. Después del ciclo, mostraré el texto personalizado si no había elementos o si no hay ningún elemento próximo.

3
David Fritsch