LimeSurvey 7 欄位名稱重構
From LimeSurvey Manual
欄位名稱與回應表重構 - LimeSurvey 7
LimeSurvey 7 對回應表與欄位名稱的產生方式進行了大幅整理。 此次更新讓長期沿用的內部命名慣例更現代化,並為外掛程式、整合及未來開發建立更可預測、更穩健的基礎。
本頁面聚焦於回應表與欄位名稱的重構。
由於這是結構性變更,任何依賴舊有命名的自訂作業都可能需要更新。 本頁面說明有哪些變更、如何安全地進行測試,以及如何為升級做好準備。
1. 變更內容
1.1 新的資料表名稱
LimeSurvey 現在對與作答結果相關的資料表採用一致的命名方式。
| 舊資料表名稱 | 新資料表名稱 |
|---|---|
old_survey_<sid>_<timestamp>
|
old_responses_<sid>_<timestamp>
|
old_survey_<sid>_timings_<timestamp>
|
old_timings_<sid>_<timestamp>
|
survey_<sid>
|
responses_<sid>
|
survey_<sid>_timings
|
timings_<sid>
|
任何參照這些資料表的 SQL 查詢、整合或外掛程式都可能需要調整。
1.2 新的欄位名稱結構
欄位名稱現在遵循可預測且一致的格式。範例:
Q<questionId>- 根問題Q<questionId>_S<subquestionId>- 子問題Q<questionId>_C<suffix>- 評論或其他欄位- 排序欄位:
Q<questionId>_S<subquestionId>- 排序項目現在是子問題(請參閱 1.3) - 時間欄位:依情況為問題層級或群組層級
這取代了舊版以 sidXgidXqid 為基礎的命名方式。
1.3 排序問題
排序問題現在的運作方式與其他以子問題為基礎的問題類型相同:
- 項目即子問題。 可排序的項目以子問題(類型
R)的形式儲存,而非答案選項。 - 欄位名稱採用標準的子問題格式
Q<questionId>_S<subquestionId>(每個被排序的項目一個)。 - 作答結果儲存在單一 JSON 欄
Q<questionId>中,為項目代碼的有序陣列,其中位置即為名次。範例:["3", "1", "2"]
2. 為什麼這很重要
此次整理針對多年來正式定義並使用的命名模式,將其調整為一致且穩健的結構,作為我們未來發展的基礎。
這類結構性變更很少是簡單的。它們涉及許多外掛程式與整合所依賴的系統部分,因此往往因為複雜度而被延後。但保持一致且可預測,對於長期穩定性相當重要。
現在處理這項變更,可讓 LimeSurvey 更簡潔、更易於擴充,即使這項變更在表面上幾乎看不出來。
3. 如何預覽新的欄位名稱
若要查看任何現有欄位名稱將如何對應到新的 LS7 結構,您可以執行以下步驟:
- 備份資料庫,因為這些變更無法復原,若發生問題,擁有變更前的資料庫將有助於還原
- 簽出 develop-major 分支:
git checkout develop-major
或直接在此分支複製/下載專案:https://github.com/LimeSurvey/LimeSurvey/tree/develop-major - 載入管理頁面以觸發變更腳本
- 回報執行變更腳本期間遇到的任何錯誤
- 研究新的資料表名稱與欄位名稱
- 測試您的外掛程式/佈景主題,並修正與資料表名稱和/或欄位名稱相關的錯誤
用於將舊欄位名稱轉換為新欄位名稱的函式如下:
getFieldName($tableName, $fieldName, $questions, $sid, $gid, $cd)
參數
- $tableName - 原始資料表名稱
- $fieldName - 原始欄位名稱
- $questions - 根問題及其子問題
- $sid - 問卷 ID
- $gid - 群組 ID
- $cd - 是否套用條件設計工具邏輯
結果
此函式會傳回該作答欄位的新 LS7 欄位名稱。
4. 如何安全地測試變更
強烈建議在升級正式環境之前,先在專用環境中測試 LS7。
4.1 在獨立環境中安裝 LS7
請從以下位置下載最新的 LS7:
https://community.limesurvey.org
請將其與您目前的環境分開安裝。
4.2 匯入您現有的資產
請使用以下項目進行測試:
- 問卷
- 問題佈景主題
- 管理員佈景主題
- 問題佈景主題
- 外掛程式
- 自訂 JavaScript
- 您建置的任何自訂整合
請檢查在使用新的資料表與欄位名稱命名方式後,一切是否仍正常運作。 請更新所有依賴舊命名方式的程式碼。
4.3 如何觸發遷移?
若您想在測試安裝環境中預覽遷移邏輯:
- 備份您的資料庫。
- 安裝 LS7 版本。
- 載入任一管理頁面以執行遷移腳本。
- 檢閱資料表與欄位名稱的變更。
- 測試應用程式。
- 如有必要,請更新自訂程式碼。
4.4 回報問題
感謝您及早參與測試。 若您發現核心有任何異常,請回報給我們,以便我們盡快修正。
5. 可能需要更新的項目
以下項目可能需要調整:
- 參照舊欄位名稱或資料表名稱的外掛程式
- 您自行建置的任何自訂整合
- 使用以欄位名稱為基礎之選擇器的 JavaScript
- 與作答結果相關識別碼互動的自訂佈景主題
- 依賴先前命名方式的整合
- 匯入舊的匯出檔,例如問卷、佈景主題、問題佈景主題等
這是預期中的情況,也是升級流程的一部分。
6. 摘要
- LS7 全面整理了回應表與欄位名稱的命名方式
- 這是 LS7 主要的後端結構性變更
- 強烈建議在獨立環境中進行測試
getFieldName()可協助預覽未來的命名方式- 請視需要更新自訂程式碼
- 請及早回報問題,以協助穩定正式版本