web-dev-qa-db-ja.com

foreachループ内の日付に基づいて過去のアイテムを非表示にする

日付に基づいて「近日公開」のアイテムを表示するカスタムコンポーネントがあります。今日の日付を過ぎているすべてのアイテムを非表示にしようとしています。ただし、将来のアイテムがない場合、カスタムテキストは表示されません。

Foreachループ内でどうすればよいですか?または、phpブレークを挿入するにはどうすればよいですか?またはこれを行うより良い方法はありますか?

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

アイテムがない場合、foreachループは実行されないため、foreachループの外で「else」セクションを処理する必要があります。

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

基本的に、アイテムが表示されていないことを示す変数を追加しました。ループ内のアイテムが表示されたら、その変数をtrueに切り替えます。ループの後、アイテムがない場合、または今後のアイテムがない場合は、カスタムテキストを表示します。

3
David Fritsch