首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

DedeCMS 5.7 聯動類型無法顯示的根因與修復方案

     編輯:PHP 相關知識

DedeCMS 後台添加自定義字段選「聯動類型」時,前台或後台無法正確加載二級選項,甚至報 JS 錯誤。經排查,核心原因是 路徑變量 $cmspath 缺少結尾斜杠,導致 JS/CSS 資源路徑錯誤(如 https://domain.com/include/...js 變成 https://domain.cominclude/...js)。

現象確認

  • 打開瀏覽器開發者工具(F12)→ Network/Console,過濾 JS,發現相關聯動腳本(如 linked.js、jquery.linked.js)狀態 404。
  • 請求 URL 明顯缺少路徑分隔符。

修復文件與代碼

文件:include/customfields.func.php

搜索 $cmspath 相關代碼(多處),找到類似:

$cmspath = ( (empty($cfg_cmspath) || !preg_match('/[/$]/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );

方案一:補充判斷補全斜杠(推薦,風險最小)

// 在上述代碼之後添加
if (substr($cmspath, -1, 1) !== '/') {
    $cmspath .= '/';
}

方案二:修正正則表達式(一勞永逸)

// 直接修改正則,匹配結尾是否為 /
$cmspath = ( (empty($cfg_cmspath) || !preg_match('/[\/]$/', $cfg_cmspath)) ? $cfg_cmspath.'/' : $cfg_cmspath );

原正則 /[/$]/ 邏輯錯誤: 字符類 [$/] 匹配「$」或「/」,但 $ 在正則中本意是「行尾」,放在字符類內變成字面量「$」。導致以「/」結尾也判定為不匹配,強制拼接「/」,產生雙斜杠;不以「/」結尾卻以「$」結尾(不可能)則不拼接。修正為 /[\/]$/ 專門匹配結尾斜杠。

驗證修復

  1. 保存文件,清空瀏覽器緩存(或強制刷新 Ctrl+F5)。
  2. 重新進入後台編輯含聯動字段的文檔/欄目,檢查二級選項是否正常加載。
  3. F12 Network 確認 JS 請求返回 200。

同類路徑問題排查清單

  • cfg_cmspath 設置:後台「系統基本參數」→「站點根網址」應以 / 結尾(如 https://domain.com/ 或 /)。
  • 其他引入 JS/CSS 的模板標簽:{$cfg_cmspath}、{$cfg_templets_skin} 等,確保輸出路徑正確。
  • Nginx/Apache 靜態資源代理配置是否導致路徑截斷。

這是一個典型的「路徑拼接缺少分隔符」低級 Bug,修正正則或補充判斷即可徹底解決。建議項目中統一封裝 getCmsPath() 方法,集中處理路徑規範化,避免分散在各處重複造輪子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved