使用 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
}
我正在尝试修改其他人创建的一些代码,但由于我缺乏很多 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
}