カレンダーモジュール(Calenar)が日付フィールドのある記事、イベントの表示ができ、非常にパワーフルのモジュールのひとつです。
イベントのコンテンツタイプを作成して、カレンダーに表示させ、ひとつ問題点を発見します。それはWeeklyのカレンダーでその週間の最後日にあるイベントを表示しないことです。
使用しているモジュールのバージョン:
- Drupal: 7.34
- Calendar: 7.x-3.5
- Date: 7.x-2.9
現象
- 週の開始日が月曜日、終了日が日曜と設定しています(Home » Administration » Configuration » Regional and language での設定)
- コンテンツタイプでイベント・コンテンツを作成して、そのイベントにイベントの開始、終了日時(Date型)フィールドが含まれます。
- カレンダーで、このイベントの開始日時を関連付け(Home » Administration » Structure » Views » Calendarでの「CONTEXTUAL FILTERS」で設定)
- イベントの日時を一週間の各日にして、複数のイベントを作成しました。
- カレンダーで表示すると、その週の最後の日(日曜日)にあるイベントが一件も表示されませんでした
調査
- なぜ最後の日のイベントがカレンダーに表示されないか、Viewsでイベントを取得SQL文を出力して観察してみました:
SELECT
node.title AS node_title,
node.nid AS nid,
node.created AS node_created,
'node' AS field_data_field_event_date_node_entity_type,
'node' AS field_data_field_salon_staff_node_entity_type
FROM node
LEFT JOIN field_data_field_salon_staff field_data_field_salon_staff
ON node.nid = field_data_field_salon_staff.entity_id
AND (field_data_field_salon_staff.entity_type = 'node'
AND field_data_field_salon_staff.deleted = '0')
LEFT JOIN 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'
AND field_data_field_event_date.deleted = '0')
WHERE (
( (field_data_field_salon_staff.field_salon_staff_value = 'structure') )
AND(
(DATE_FORMAT(ADDTIME(
field_data_field_event_date.field_event_date_value2, SEC_TO_TIME(-28800
)), '%Y-%m-%d %H:%i:%s') >= '2016-02-22 00:00:00'
AND DATE_FORMAT(
ADDTIME(
field_data_field_event_date.field_event_date_value, SEC_TO_TIME(-28800)
), '%Y-%m-%d %H:%i:%s') <= '2016-02-28 00:00:00') )
AND(( (node.status = '1') )))
ORDER BY node_created DESC
- 上記SQL文が一番怪しいのは以下のような部分「<= '2016-02-28 00:00:00')」
- なぜか、最後の日(日曜日)に「00:00:00」になって、28日の早朝0時に切ってしまったので、28日のイベントを取得することはできなくなりました。
解決
最後に
- Weeklyカレンダーで最後の日分のデータを取得できないのは、大きな問題なのに、あまり多くの投稿も見られず、修正もしていないことが少し不思議だと思います
- このパッチも添付して保存します(次回Dateモジュールがアップデートしたら、再度修正が必要)