Drupal
[Drupal 筆記] 透過 Drush 將網站資料同步
最近應客戶的要求,研究起「如何將網站資料庫及檔案,同步到另台主機的備份站」這個議題。
Embed inline script in Drupal
話說最近跟某客戶在玩 Highcharts 這套動態圖表函式庫;而我們為了讓資料能動態更新,data 都存放在外部的 Google Spreadsheet 裡,因此無法使用如 Easychart 或 Charts 等 Drupal 圖表模組。因此,如果要餵 Highcharts 吃存在 Google Spreadsheet 的資料,就必須手動寫 JS script 來進行設定。但在 Drupal 8 裡,這是有點麻煩的事情。
[Drupal 筆記] Multi-sites in subdirectories
今天弄清楚了一件困擾我兩年的事情 囧
話說 "Multi-sites" 是 Drupal 一個很好用的功能,核心概念就是「共享 code」,佈署一次就能建立多個站台,管理跟維護都方便。
詳細資訊可參考官方文件,或是兩年前我比現在還肉咖的時候也寫過一篇筆記,有興趣請自行參考。
如果我們 google "Drupal multi-sites",範例中常見的是「同域名,不同子網域 (subdomain)」,但我想要的作法是「不同子目錄 (subdirectory)」,後者今天才弄清楚。
以下將兩種作法各貼出來:
[Drupal 筆記] 從 file-link template,學習 Template Preprocess function
很長一段時間苦惱於「附加檔案」的外觀,直到最近,受益於學習了 Drupal API,終於知道怎麼對模板進行深度自訂。
Before |
After |
[Drupal] Dynamic override key value of configuration entities by Webform Node field value
今天完成了一個讓我鬼打牆了至少整整七天的**小**功能,就是標題寫的這個東西。
我的專案主要是用 Drupal Webform 做課程的線上報名平台。之所以需要做下面這個 custom module,是因為課程報名需要設有人數限制,但 Webform 要設定報名上限的步驟頗為麻煩,而且我也不想讓一般使用者也進去設定頁面,於是決定在 Webform Node content type 裡面新增一個「報名上限」的欄位,讓使用者把上限數字直接填在這裡,再根據這欄位裡的值,去更動對應的 Webform 底下的人數上限設定值。
[技術筆記] 學著用 Drupal API 找出 form_id
最近的 Drupal 專案需要變動 UI,我原本非常排斥學習 module 開發,但現在不得不硬著頭皮上了。以下筆記:
什麼是 Drupal API
最近剛好看到討論 API 的好文,例如這篇。API 的定義就如同 Wikipedia 所說的:
[Drupal] Webform tweak: 只顯示「必須填寫」 的欄位
最近的專案裡,有項功能是「課程報名」。要在 Drupal 底下製作高度自訂性的表單,相信大家第一個想到的模組就是 Webform。
為了讓用戶方便使用,我們先建立一個包含各類所需欄位的表單,例如姓名電話Email所屬單位性別葷素等等全部包進去,再到將 webform 設定成 "template",之後就可以輕鬆重製新的表單了。
(詳細說明可參見這篇 issue)
但並不是每個課程,報名都要填那麼多的資料,例如公司的內部訓練,也許名字單位Email 這三項填一填就好了。
我原本想到的解法是,在 webform 裡頭設一個 fieldset,叫做「隱藏區」之類的,然後在前台用 CSS 把「隱藏區」藏起來;而用 webform template 新建表單的時候,把用不到的欄位拖曳到隱藏區就行了。
(當然直接刪除也可以啦)
[Drupal] 初試自動化流程工具 Rules
Rules 是 Drupal 裡一個神器級的模組,用來執行一些自動化工作;它除了強大,學問也非常深,還有前輩為此出了一本書這樣。
Rules 常見用法包括:在用戶登入後將其導向某路徑;在用戶發布內容後寄送 email 給管理員;或可搭配 Workflow 等流程工具,將用戶體驗更進一步優化。
它的基本運作模式是這樣的:
- 事件(Events)→ 觸發
- 條件(Conditions)→ 過濾
- 執行動作
以下示範如何設定「在用戶發布文章之後,顯示系統訊息」:
[Drupal 7] 遷移「部份」文章
這邊遇到一個麻煩情勢:某 D7 網站原本架在 A server,現在想搬到 B server,但我進度拖拖拉拉,一邊處理 B server,他們又一邊在 A server 上新的稿,所以 B server 的文章進度是落後的,需要把這段時間在 A server 新增的文章搬過來。
在 D7 如果要匯出部份文章,Node export 是很好的選擇,因為它可以在內容管理頁面(/admin/content/),用勾選的方式決定哪些 node 要匯出,然後另存新檔,再到目的網站做匯入。
但這種作法有一個缺點:例如今天是一位使用者otakupapa
進行匯入動作,所有匯入的文章,作者都會變成otakupapa
。
後來發現用 drush 處理匯入的話,可以透過指令來指定作者的uid
。這種作法要成立,就是同一批匯入的文章,都是同一名作者的。所以我每次要先篩選出同一名作者的文章,再匯出成檔案。