it-swarm-vi.com

Ẩn các mục trong quá khứ dựa trên ngày bên trong vòng lặp foreach

Tôi có một thành phần tùy chỉnh hiển thị các mục "sắp ra mắt" dựa trên ngày. Tôi đang cố gắng che giấu tất cả những món đồ đã qua ngày hôm nay. Tuy nhiên, nếu không có mục nào trong tương lai thì nó không hiển thị văn bản tùy chỉnh.

Làm thế nào để tôi làm điều đó trong một vòng lặp foreach? Hoặc làm thế nào tôi có thể chèn php phá vỡ? Hoặc có một cách tốt hơn để làm điều này?

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

Bạn cần xử lý phần "khác" bên ngoài vòng lặp foreach, vì nếu không có mục nào, vòng lặp foreach không bao giờ chạy:

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

Về cơ bản, tôi đã thêm một biến nói rằng một mục chưa được hiển thị. Nếu bất kỳ mục nào trong vòng lặp được hiển thị, thì tôi sẽ chuyển biến đó thành true. Sau vòng lặp, sau đó tôi sẽ hiển thị văn bản tùy chỉnh nếu không có mục nào hoặc nếu không có mục nào sắp diễn ra.

3
David Fritsch