2012-07-25 40 views
0

我在Drupal中創建了一個日曆模塊。由於客戶的需要,我需要能夠使用節點上的布爾變量來隱藏結束日期,並保存在CCK字段中。在Drupal中隱藏結束日期

我的問題是,我可以隱藏它,通過掛接到theme_date_display_range()主題功能,但不是在我的模塊。據我所知,這隻有在主題內纔有可能。這將意味着,我將無法隱藏結束日期,而無需使用某個主題來實現此功能。

如果我接着說,我會用一個特定的主題並與之共存,我仍然無法看到調用mytheme_date_display_range()的上下文,因此我無法知道當前節點想要顯示或隱藏結束日期。我可以把它作爲一個變量傳遞,但是會有更好的方法來做到這一點嗎?

我可能會改寫日期的主題功能來改用我的模塊嗎?如果這是最好的/正確的方式,我該如何做到這一點?

回答

1

好的,所以我覺得我找到了一個很好的解決方案,根本不使用主題功能。我仔細看了一下主題日期的theme_date_display_combination()。如果沒有設置結束日期,則只會顯示開始日期。我鉤入hook_entity_prepare_view()並檢查日期和隱藏結束時間字段是否都存在。如果是這樣,我根據布爾值取消設置的結束時間。

/** 
* Implements hook_entity_prepare_view(). 
*/ 
function kw_calendar_full_entity_prepare_view($entities, $type, $langcode) { 
    foreach ($entities as &$entity) { 
     if (isset($entity->field_event_date) && isset($entity->field_hide_endtime)  && $entity->field_hide_endtime[LANGUAGE_NONE][0]['value'] == 0) { 
      unset($entity->field_event_date[LANGUAGE_NONE][0]['value2']); 
     } 
    } 
} 

希望這會幫助別人第一天開始...