行事曆


行事曆 想要在你的 drupal 網站上放一個行事曆嗎? 請參考這篇文章: Cookbook: Prepare an Event-Calendar for Drupal 7。 以下是我大略照做, 再用中文按照自己真實步驟重寫的筆記。

首先要安裝幾個模組: drush dl ctools calendar date views 然後啟動 calendar、 date、 Views UI 等等幾個模組。 Drupal 會自動找出其他需要的相依模組並請你確認一併啟動。

在 「架構」的 「內容類型」 底下點選 「新增內容類型」。 我把它的 「名稱」 取做 「活動/事件」; 「機器名稱」 取做 「event」。

「活動/事件」 內容類型的欄位 新增欄位時, 選擇 「Date (ISO format)」。 我叫它 「活動日期/時間」 (圖中藍框; 等一下會用到), 而它的 「機器可讀名稱」 則設成 field_event_date (圖中綠框; 等一下也會用到) 好了。 順便也加一個 「標籤 (Tags)」 欄位。

設定 「活動日期/時間」 欄位時, 勾選 「必須填寫欄位」, 也勾選 「Collect an end date」, 但是不勾選 「Collect an end date」 之下的 「必要」。 又, 點一下 「More settings and values」 出現更多選項。 「Date entry options」 挑一個臺灣人比較習慣的日期格式。

從樣版產生一個 view 再進入 「架構」 => 「Views」, 點選 「Add view from template」 (從樣版產生一個 view)。 剛才你為 「Date (ISO format)」 欄位的 「機器可讀名稱」 取什麼名字, 現在就選相同名字出現的那個樣版。 (圖中綠框) 「檢視名稱」 我填入 「行事曆」; 「機器可讀名稱」 就填 「calendar」 吧。

然後會被帶到新產生的 view 的設定頁面。 我只修改 「路徑」 欄位, 把又臭又長的 「calendar-node-field-event-date/month」 改成簡短的 「calendar」。 儲存之後, 馬上到 「架構」 => 「選單」 => 「Main menu」 => 「列出連結」=> 「新增連結」 把剛剛設定的簡短路徑填到選單裡面去。

離開管理介面後, 現在就可以從主選單進入行事曆了! 有時可能會出現一堆 「Warning:Illegal string offset 'data' 於 template_preprocess_calendar_month()...」 的錯誤訊息, 就算重新整理網頁也消不掉。 這時請編輯 sites/all/modules/calendar/theme/theme.inc 或 sites/default/modules/calendar/theme/theme.inc 在這個檔案裡面搜尋到 「$cell = $data」, 在 $cell = $data['data']; 這句話上面加上一句:

    if (!is_array($data)) continue;

然後再重新整理網頁就 ok 了。 詳見 這一頁

當然, 目前行事曆內並沒有任何內容。 要先從 「新增內容」 裡面選取 「活動/事件」, 新增幾筆資料, 才看得出來。 提醒: 一開始只有管理員 admin 可以新增這類型的內容。 請到 「使用者」 的 「權限」 分頁開放 「活動/事件」 的新增/修改/刪除等等權限給更多使用者。

如何「只顯示時分而不顯示年月日」 如果你新增的活動/事件是單日的活動, 那麼行事曆會顯示活動/事件的起迄時間。 不過預設的顯示會把年月日也一起顯示出來 -- 這有點累贅而且佔用版面。 想要只顯示時分 (而不顯示年月日) 就要這樣做:

  1. 在 「設定」 => 「日期與時間」 底下的 「格式」 分頁, 按下 「新增格式」。
  2. 在 「格式字串」 內填入 「G:i」 並按下 「新增格式」
  3. 仍舊在 「設定」 => 「日期與時間」 底下, 切換回 「類型」 分頁, 按下 「新增日期類型」。
  4. 「日期類型」 填 「時分」; 「機器可讀名稱」 填 hour_minute; 「日期格式」 選取剛剛新增的 (可能在最底下) 簡短時分格式。 最後按下 「新增日期類型」
  5. 在 「架構」 => 「views」 底下的 「行事曆」 按下 「編輯」。
  6. 在 「欄位」 底下, 點選 「內容: 活動日期/時間」 (先前 「Date (ISO format)」 欄位的名稱; 圖中藍框) 並將 「Choose how users view dates and times:」 改選為剛剛建立的 「時分」 日期類型。
  7. 被帶回 「行事曆」 的編輯畫面, 要記得按 「儲存」 才算生效。

以上參考 Show Time of Event Only in Calendar