前言:模板系統核心認知
Discuz! (及衍生版) 的模板系統本質上是 HTML + PHP 變量插值。掌握修改技巧的關鍵在於:
- 理解 模板文件對應關係 (哪個文件控制哪個頁面區塊)
- 識別 可用變量 (如
$post[author]、$thread[subject]、$gid 等)
- 善用 可視化工具 (Dreamweaver / VS Code Live Preview) 即時預覽結構
- 遵循 最小改動原則:優先調整 CSS/圖片,再調整結構,最後才修改邏輯
核心模板文件速查表
| 文件 | 控制範圍 | 常見修改場景 |
header.htm | 頁面頂部:Logo、導航、搜索、用戶欄 | 換 Logo、加廣告位、調整導航結構 |
footer.htm | 頁面底部:版權、統計、ICP、友情鏈接 | 版權信息、加備案號、第三方統計碼 |
index.htm | 論壇首頁:版塊列表、公告、在線列表 | 調整版塊佈局、增加側邊欄、修改圖示 |
forumdisplay.htm | 版塊頁:主題列表、篩選、分頁 | 列表字段增減、置頂樣式、快速發帖入口 |
viewthread.htm | 主題頁框架:標題、作者信息、翻頁 | 標題 SEO、作者卡片、分享按鈕 |
viewthread_post.htm | 單樓回覆內容:頭像、簽名、樓層、操作按鈕 | 最核心:回覆佈局、簽名分隔線、等級圖標、IP 顯示 |
post.htm | 發帖/編輯頁:編輯器、標籤、附件 | 簡化編輯器、預設模板、驗證碼位置 |
member_profile.htm | 個人資料頁 | 字段增減、社交鏈接、勳章展示 |
變量識別三大法寶
- 後台模板編輯器預覽:後台 → 界面 → 風格管理 → 編輯模板 → 查看原始碼,變量以
{lang xxx}、$var、{eval ...} 形式出現。
- 瀏覽器開發者工具 + 模板註釋:開啟「模板調試」 (config_global.php
$_config['output']['template_debug'] = true;),頁面源碼會顯示 <!-- template: viewthread_post --> 邊界。
- 對照法:在 DW/VS Code 打開模板代碼,對照前台實際頁面,刪除/註釋某變量 → 刷新觀察消失內容 → 確認變量用途。
常用變量速查 (以 viewthread_post 為例)
{$post[author]} // 發帖者用戶名
{$post[authorid]} // 用戶 UID
{$post[dateline]} // 發帖時間戳
{$post[message]} // 回覆內容 (已解析 BBCode)
{$post[subject]} // 主題標題
{$post[pid]} // 回覆 PID
{$post[number]} // 樓層號
{$post[anonymous]} // 是否匿名
{$post[status]} // 狀態位 (是否置頂、精華等)
{$post[attachment]} // 附件數組
{$post[ratelog]} // 評分記錄
{$group[grouptitle]} // 用戶組標題
{$group[stars]} // 星星圖片 HTML
{$group[groupavatar]} // 用戶組頭像
$post[first] // 是否首樓 (主題帖)
$post[last] // 是否末樓
$post[icon] // 圖標
$post[url] // 當前回覆永久鏈接
仿站/重構實戰流程:以 viewthread_post 為例
- 目標頁面另存為:瀏覽器另存目標論壇單樓頁面為完整 HTML。
- 提取核心結構:DW 打開,刪除 Header/Footer/側邊欄,只保留單樓核心 DOM 結構。
- 建立對照表:列出目標結構每個區塊對應的 Discuz 變量 (如:頭像區 →
$post[avatar]、等級圖標 → $group[grouptitle] + $group[stars])。
- 變量植入:在目標結構對應位置插入 Discuz 變量,保留原有 CSS Class 或重寫為語義化 Class。
- 處理邏輯控制:Discuz 模板支援
<!--{if $post[first]}-->...<!--{/if}-->、<!--{loop $post[attachment] $att}-->...<!--{/loop}-->,按需包裹。
- 圖片/資源路徑修正:將目標站相對路徑改為
{IMGDIR}/xxx.png、{STYLEIMGDIR}/xxx.css,並上傳至對應風格目錄。
- 覆蓋測試:後台模板編輯器貼上 → 提交 → 前台強制刷新 (Ctrl+F5) → 檢查佈局、變量輸出、JS 錯誤。
- 微調 CSS:新增/修改
style.css 或 common.css 解決間距、對齊、響應式問題。
進階技巧與避坑指南
- 黃色代碼勿刪:DW 顯示黃色的 PHP 標籤 (
<? ... ?>) 是邏輯控制,刪除會導致功能失效。
- 全局變量:
$_G['setting']、$_G['forum']、$_G['uid'] 等在所有模板可用,善用減少查詢。
- 模板包含:
<!--{subtemplate common/header}--> 實現片段複用,修改共用部件只需改一處。
- 緩存機制:修改後必須「更新緩存」(後台工具) 或手動刪除
data/template/ 下對應編譯文件。
- 多風格繼承:子風格只覆蓋差異文件,父風格升級不影響子風格自定義 (Discuz X3.4+ 支援)。
- 性能:避免在模板中執行複雜邏輯/查詢,預處理放在插件/模塊,模板只負責輸出。
常見需求快速解決方案
| 需求 | 修改文件 | 關鍵操作 |
| 增加「超級版主」圖示 | index.htm / forumdisplay.htm | 在版主列表循環中加 <!--{if $mod[gid]==3}--><img src="..."><!--{/if}--> |
| 簽名加分隔線 | viewthread_post.htm | <div class="sig"><hr>{$post[signature]}</div> |
| 回覆加「樓主」標識 | viewthread_post.htm | <!--{if $post[authorid]==$thread[authorid]}--><span class="louzhu">樓主</span><!--{/if}--> |
| 隱藏游客回覆內容 | viewthread_post.htm | <!--{if $_G[uid]}-->{$post[message]}<!--{else}--><div class="login-tip">請登入查看</div><!--{/if}--> |
| 自定義滾動條/游標 | common.css | CSS ::-webkit-scrollbar、cursor: url(...) (需 IE6+/Edge 支援) |
總結
模板修改的本質是 「變量映射 + 結構重組 + 樣式適配」。熟練掌握模板文件對應、變量語義、條件/循環語法、緩存機制,配合可視化工具與瀏覽器調試,即可從零開始構建或仿製任何風格。建議從 viewthread_post.htm 入手,它是論壇核心體驗承載體,改動反饋最直觀。
- 上一篇文章: NFR 入侵檢測優化實戰:MSSQL Hello 緩衝區溢出簽名誤報根因分析與修正
- 下一篇文章: PHP 常見漏洞攻擊與防禦全景指南:從全局變量注入到文件包含 RCE
Copyright ©
程式碼之家 All Rights Reserved