【问题标题】:How to modify Drupal 7 events calendar week view to include Sunday?如何修改 Drupal 7 事件日历周视图以包括星期日?
【发布时间】:2016-11-14 20:49:24
【问题描述】:

我是 Drupal 7 的新手,我遇到了一个问题,即事件日历周视图不显示周日事件,因为查询中的结束日期不正确。实际上它只显示6天。如何修改查询?我怎么才能找到它的生成位置?

以下是来自活动日历(内容)页面的查询。可以看到开始日期比较是 ">= '2016-11-14 00:00:00" 结束日期比较是 "

更改一周的第一天并没有帮助,因为它只是将六天的时间范围从周日开始,并且错过了周六和周日的活动。

选择field_data_field_event_date.delta AS field_data_field_event_date_delta,field_data_field_event_date.entity_id AS date_id_field_event_date,field_data_field_event_date.delta AS date_delta_field_event_date,node.nid AS NID,field_data_field_event_date.language AS field_data_field_event_date_language,field_data_field_event_date.bundle AS field_data_field_event_date_bundle,field_data_field_event_date.field_event_date_value AS field_data_field_event_date_field_event_date_value,field_data_field_event_date.field_event_date_value2 AS field_data_field_event_date_field_event_date_value2, field_data_field_event_date.field_event_date_rrule AS field_data_field_event_date_field_event_date_rrule, node.title AS node_title, 'node' AS field_data_field_event_date_node_entity_type, 'node' AS field_data_body_node_entity_type, 'node' AS field_data_field_event_cat_node_entity_type 从 {node} 节点 左连接 {field_data_field_event_date} field_data_field_event_date ON node.nid = field_data_field_event_date.entity_id AND field_data_field_event_date.entity_type = 'node' WHERE (( (DATE_FORMAT(field_data_field_event_date.field_event_date_value2, '%Y-%m-%d %H:%i:%s') >= '2016-11-14 00:00:00' AND DATE_FORMAT(field_data_field_event_date.field_event_date_value, '%Y-%m-%d %H:%i:%s')

【问题讨论】:

    标签: calendar drupal-7


    【解决方案1】:

    我会首先检查您的区域设置,因为您可以在那里更改一周的第一天,然后重新保存那里的值 - 可能再次尝试打开和关闭您的老人,在周一和周日之间切换。 /admin/config/regional/settings

    其次,您是否针对此问题检查了模块本身?补丁可能会发布在他们的问题队列下。

    如果一切都失败了,您可以在自定义模块中使用hook_views_query_alter 来修改生成的查询的 where 子句。我已经写了一篇关于这个钩子的博客文章,之前找到了here,但基本上你拥有查询的所有组件,所以可以在那里改变你需要的东西。例如。

     // add the condition of greater than current timestamp
     $date = gmdate('Y-m-d H:i:s');
     $view->query->where[1]['conditions'][] = array(
       'field' => 'field_mytimefield_value',
       'value' => $date,
       'operator' => '>='
     ); 
    

    【讨论】:

    • 我发现问题发生在 modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc,第 323 行。我将其更改为:$max_date = new DateTime($this->date_handler->粒度 == 'week' ? date('Y-m-d H:i:s', strtotime($this->max_date . ' +1 day')) : $this->max_date); $view_max = date_format($max_date, $format);
    • 我要评论的一件事是,仅仅更新 contrib 模块通常不是一个好主意,因为下次你去更新模块时,它会被覆盖并再次中断。我建议将此更改也放入补丁文件中,以便您可以在更新时重新应用补丁,并可能在问题队列中发布您对模块本身的修复(如果尚未发布)。或者您可以将模块移动到自定义文件夹中,因为您现在已经进行了自定义更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    相关资源
    最近更新 更多