0
我試圖修改別人創建的一些代碼,但由於缺乏太多的php經驗,特別是因爲它處理在drupal網站上的字段中輸入的日期,所以我很困難。使用php和drupal檢查日期
目前,php正在檢查是否有任何博客文章($ event_items)在drupal界面中創建並相應地運行。如果event_item帖子的開始日期是將來,我想要發生的事情是在網站上顯示。如果不是,則event_item帖子不會顯示,如果事件未來將顯示一條消息。
目前,如果將來沒有event_items,則沒有任何帖子會顯示在網站上,但是由於帖子仍然存檔在drupal界面中,所以郵件不會顯示。
我所做的所有嘗試都必須編輯代碼,但它已經解決了這個問題,但是排除了頁面上的某些其他功能,或者導致消息顯示在過去的每個event_item帖子中。
下面是相關的代碼:
<?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
}
?>
在正確的方向上的任何輕推,將不勝感激。
Nate,非常感謝。這極大地澄清了事情......顯然使用strtotime來獲取unix時間戳是我並不十分清楚的。我對「if itemIsInFuture」條件發生了什麼感到困惑。是這樣的概念:「如果數組項目在將來,將它放在futureEvents數組中,它將成爲新的field_collection數組。」這是正確的球場嗎?它基本上從field_collection中過濾掉所有過去的事件?無論如何,如果你能清楚這一點,我會更加欣賞,但我再次非常感謝你的迴應。 –
是的,你基本上是對的。並且要清楚:我提供的版本在功能上與您發佈的代碼相同(除了我建議的單行更改外)。以下是我如何理解(新)代碼的邏輯: (1)獲取所有事件並將它們存儲在'$ allEventsUnfilteredByDate'數組中。 (2)迭代每一個,並確定它的日期是否在未來。如果是,請將它添加到'$ eventsWithFutureStartDates'數組中。 (3)一旦我們完成了'for'循環,我們可以忽略'$ allEventsUnfilteredByDate'數組。 (4)是否有未來的事件? – Nate
(4a)是:打印每一個,並確保它們出現在正確的日期標題下方。請注意,當我們正在執行此迭代時(在第二個for循環中),原先在第一個循環中保存爲「$ field_collection」的數據現在再次可用作$ date_event變量。 (4b)否:顯示「對不起,沒有預定的事件發生。」 – Nate