我正在Drupal中创建一个日历模块。由于客户的需求,我需要能够在节点上使用布尔变量隐藏结束日期,保存在CCK字段中。
我的问题是我可以通过挂钩theme_date_display_range()主题函数来隐藏它,但不能从我的模块中隐藏它。据我所知,这只能在主题内实现。这意味着,如果不使用启用此功能的特定主题,我将无法隐藏结束日期。
如果我说,我将使用某个主题并与之共存,我仍然无法看到mytheme_date_display_range()被调用的上下文,因此我无法知道当前节点想要显示或隐藏结束日期。我可以将它作为变量传递,但是有更好的方法可以做到这一点吗?
我是否可能会覆盖日期的主题功能而不是使用我的模块,如果这是最佳/正确的方式,我该如何做?
答案 0 :(得分: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']);
}
}
}
希望有一天能帮到某人......