0

我正在 Drupal 中创建一个日历模块。由于客户的需要,我需要能够使用节点上的布尔变量隐藏结束日期,保存在 CCK 字段中。

我的问题是我可以通过连接到 theme_date_display_range() 主题函数来隐藏它,但不能从我的模块中隐藏它。据我所知,这只能在主题内实现。这意味着,如果不使用启用此功能的某个主题,我将无法隐藏结束日期。

如果我然后说,我将使用某个主题并接受它,我仍然无法看到调用 mytheme_date_display_range() 的上下文,因此我无法知道当前节点是否想要显示或隐藏结束日期。我可以将它作为变量传递,但是有更好的方法吗?

我是否可以覆盖日期的主题功能以改用我的模块,如果这是最好/正确的方法,我将如何做到这一点?

4

1 回答 1

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']);
        }
    }
}

希望有一天这会对某人有所帮助...

于 2012-07-25T09:56:22.600 回答