使用 php 和 drupal 检查日期

Checking dates with php and drupal

我正在尝试修改其他人创建的一些代码,但由于我缺乏很多 php 经验,尤其是因为它正在处理在 drupal 站点的字段中输入的日期,所以我遇到了困难。

目前,php 正在检查是否有 any 博客 posts ($event_items) 在 drupal 界面中创建并到运行 相应地。我想要发生的是 event_item post 出现在网站上,如果他们的开始日期是在未来。如果不是,则 event_item post 不显示,如果 none 的事件在将来,则显示消息。

目前,如果将来没有 event_items,post 中的 none 将显示在网站上,但消息也不会显示,因为posts 仍在 drupal 界面中存档。

我所做的所有编辑代码的尝试要么解决了问题,但错误了页面上的一些其他功能,要么导致消息显示每个 event_item post那是过去。

相关代码如下:

<?php
unset($content['field_events_event_items']['#prefix']);
unset($content['field_events_event_items']['#suffix']);
$all_events = array();
$event_items = field_get_items('node', $node, 'field_events_event_items');
    for ($i = 0; $i < count($event_items); $i++) {
        $value = field_view_value('node', $node, 'field_events_event_items', $event_items[$i]);
        $field_collection = $value['entity']['field_collection_item'][key($value['entity']['field_collection_item'])];
        $start_time[] = $field_collection['field_event_date_time']['#items'][0]['value'];
        if (date('Y-m-d 00:00:00', strtotime($field_collection['field_event_date_time']['#items'][0]['value'])) >= date('Y-m-d H:i:s')) {
            $all_events[date('Y-m-d H:i:s', strtotime($field_collection['field_event_date_time']['#items'][0]['value']))][] = $field_collection;
        }
    }
if (isset($event_items[0])) {
?>
    <div class="panel-group" id="event-listings" role="tablist" aria-multiselectable="true">
<?php

    ksort($all_events);
    $prev_date = '';
    foreach ($all_events as $date => $date_events) {
        if (date('F Y', strtotime($date)) != $prev_date) {
?>
    <h3 class="filter-group-heading"><?=(date('Y') == date('Y', strtotime($date)) ? date('F', strtotime($date)) : date('F Y', strtotime($date)))?></h3>
<?php
        }
        foreach ($date_events as $i => $date_event) {
            print render($date_event);  
        }
        $prev_date = date('F Y', strtotime($date));         
    }
?>
        </div>
<?php   
} else {
?>      
        <div>
                <p>Sorry, there are no scheduled events coming up.</p>
        </div>
<?php   
}
?>  

如有任何正确方向的推动,我们将不胜感激。

这里的主要问题似乎是 if (isset($event_items[0])) { 行。尝试将其更改为 if ($all_events) {

这是一个清理过的版本,变量名更具描述性,代码重复更少,您可以检查一下是否需要一些灵感。

<?php
unset($content['field_events_event_items']['#prefix']);
unset($content['field_events_event_items']['#suffix']);

$timeFormat                 = 'Y-m-d H:i:s';
$eventsWithFutureStartDates = array();
$allEventsUnfilteredByDate  = field_get_items('node', $node, 'field_events_event_items');

for ($i = 0; $i < count($allEventsUnfilteredByDate); $i++) {
    $value = field_view_value('node', $node, 'field_events_event_items', $allEventsUnfilteredByDate[$i]);

    $field_collection = $value['entity']['field_collection_item'][key($value['entity']['field_collection_item'])];

    $eventDateTime         = $field_collection['field_event_date_time']['#items'][0]['value'];
    $eventDateTimeUnix     = strtotime($eventDateTime);
    $eventDateTimeMidnight = date('Y-m-d 00:00:00', $eventDateTimeUnix);
    $itemIsInFuture        = ($eventDateTimeMidnight >= date($timeFormat));

    if ($itemIsInFuture) {
        $eventsWithFutureStartDates[date($timeFormat, $eventDateTimeUnix)][] = $field_collection;
    }
}

if ($eventsWithFutureStartDates) {
    ?>
    <div class="panel-group" id="event-listings" role="tablist" aria-multiselectable="true">
        <?php

        ksort($eventsWithFutureStartDates);
        $prev_date = '';
        foreach ($eventsWithFutureStartDates as $date => $date_events) {
            if (date('F Y', strtotime($date)) != $prev_date) {
                ?>
                <h3 class="filter-group-heading"><?=(date('Y') == date('Y', strtotime($date)) ? date('F', strtotime($date)) : date('F Y', strtotime($date)))?></h3>
                <?php
            }
            foreach ($date_events as $i => $date_event) {
                print render($date_event);
            }
            $prev_date = date('F Y', strtotime($date));
        }
        ?>
    </div>
    <?php
} else {
    ?>
    <div>
        <p>Sorry, there are no scheduled events coming up.</p>
    </div>
    <?php
}