
想改變 Joomla 網站某個地方的顯示方式,例如文章頁的日期位置、登入模組的欄位排列、分類列表的 HTML 結構,最直覺的做法是去改元件或模組的檔案。但這樣做,Joomla 或擴充套件一更新,你改的東西就全部被覆蓋了。
Joomla 的正確做法是樣板覆寫(Template Override):把要修改的版面檔案複製一份到樣板的 html 資料夾裡,再修改這份複本。Joomla 顯示頁面時,會優先使用樣板裡的版本,原始檔案完全不動。
這篇以 Joomla 4/5 為準。Joomla 3 的內建樣板 Protostar 已經由 Cassiopeia 取代,檔案路徑也有些不同;Joomla 3 已經停止官方支援,建議升級。
覆寫可以改哪些東西?
- 元件的畫面:例如文章頁、分類部落格、聯絡人頁面。
- 模組:例如登入模組、選單模組、最新文章模組。
- 外掛的輸出:例如文章下方的上一篇/下一篇連結。
- 共用版面(Layouts):例如文章資訊(作者、日期)、分頁、自訂欄位的顯示方式。
覆寫改的是「HTML 怎麼輸出」,不是功能本身。只是要改顏色、字體、間距的話,用 CSS 就好,不需要覆寫。
檔案要複製到哪裡?
規則是:把原始的版面檔案,複製到 templates/你的樣板/html/ 底下對應的位置。
元件
原始檔:components/com_content/tmpl/article/default.php
覆寫檔:templates/你的樣板/html/com_content/article/default.php注意中間的 tmpl 那一層不見了,覆寫的路徑是「元件名稱/畫面名稱/檔名」。Joomla 3 的原始檔放在 components/com_content/views/article/tmpl/,Joomla 4 起改成現在的位置。
模組
原始檔:modules/mod_login/tmpl/default.php
覆寫檔:templates/你的樣板/html/mod_login/default.php外掛
原始檔:plugins/content/pagenavigation/tmpl/default.php
覆寫檔:templates/你的樣板/html/plg_content_pagenavigation/default.php資料夾名稱是 plg_ 加上外掛類型與外掛名稱。
共用版面(Layouts)
原始檔:layouts/joomla/content/info_block/publish_date.php
覆寫檔:templates/你的樣板/html/layouts/joomla/content/info_block/publish_date.php文章的發佈日期、作者這些資訊,就是由這類共用版面輸出的。改一次,所有用到它的地方都會一起變。
用後台一鍵建立覆寫(推薦)
不用自己找檔案、開資料夾,Joomla 後台就能建立:
- 到「系統 → 網站樣板」(System → Site Templates)。
- 點你正在使用的樣板,進入樣板的檔案管理畫面。
- 切到「建立覆寫」(Create Overrides)分頁,會看到模組、元件、外掛、版面四個清單。
- 點要修改的項目,例如元件清單裡的
com_content底下的article,Joomla 會自動把檔案複製到html資料夾。 - 回到「編輯器」(Editor)分頁,在左側的
html資料夾裡找到剛建立的檔案,就可以直接修改。
實際範例:在文章最後加上「最後更新日期」
以文章頁為例,建立 com_content 的 article 覆寫後,打開 html/com_content/article/default.php,找到輸出文章內文的這一行:
<?php echo $this->item->text; ?>在它下面加上:
<?php if (!empty($this->item->modified)) : ?>
<p class="article-updated">
最後更新:<?php echo HTMLHelper::_('date', $this->item->modified, 'Y-m-d'); ?>
</p>
<?php endif; ?>檔案開頭如果沒有 use Joomla\CMS\HTML\HTMLHelper; 這一行,要自己加上。日期格式的其他寫法,請看Joomla 日期格式怎麼改。
修改覆寫檔的幾個原則:
- 只改需要的部分,其他照原樣保留,之後比對新版比較容易。
- 在改過的地方加上註解,寫明改了什麼、為什麼改。
- 輸出資料庫裡的文字時,用
$this->escape()處理,避免特殊符號破壞版面或造成安全問題。
替代版面:同一種畫面,做好幾種樣式
有時候不是要改掉全部,而是「某幾篇文章、某個模組」要用不一樣的樣式。這時用替代版面(Alternative Layout):
- 把覆寫檔另存一份新的檔名,例如
html/com_content/article/wide.php。可以用 FTP 下載、改名後再上傳,或在樣板編輯器新增一個檔案,把內容貼過去。 - 編輯文章時,在「選項」(Options)分頁的「版面」(Layout)選擇
wide;模組則在模組的「進階」(Advanced)分頁選擇版面。 - 沒有指定的地方,仍然使用預設的版面。
檔名不要用底線,Joomla 會把底線後面的部分當成子版面(例如分類部落格的 blog_item.php)。
用子樣板,樣板更新也不怕
直接在 Cassiopeia 這類內建樣板裡建立覆寫,Joomla 更新時,樣板本身也會跟著更新,同名的檔案可能被蓋掉。Joomla 4.1 起支援子樣板(Child Template):
- 在「系統 → 網站樣板」點 Cassiopeia。
- 按上方的「建立子樣板」(Child Template),取一個名稱。
- 到「系統 → 網站樣板樣式」(Site Template Styles),把子樣板設為網站預設的樣板。
- 之後的覆寫、
user.css都建在子樣板裡。
子樣板會沿用 Cassiopeia 的功能,只有你放進去的檔案會取代原本的,Cassiopeia 更新時不會影響你的修改。
Joomla 更新後,記得檢查覆寫
覆寫是把「當時的版本」複製一份出來。之後 Joomla 或擴充套件更新了原始檔(修正錯誤、加上新功能),你的覆寫檔不會跟著更新,可能漏掉新功能,甚至跟新版不相容而出錯。
Joomla 4 起,核心更新後如果有被覆寫的原始檔案變動了,後台的樣板管理會提示有變更需要檢查。養成幾個習慣:
- 大版本更新後,比對原始檔與覆寫檔的差異,把新版的修正補進覆寫檔。
- 不再需要的覆寫就刪掉,讓網站回到使用原始版面。
- 網站出現白畫面、版面錯亂,而錯誤訊息指向
templates/你的樣板/html/,就是覆寫檔的問題,排查方法請看Joomla 白畫面的排查順序。
第三方擴充套件也能覆寫
大部分第三方元件、模組也遵守同樣的規則(html/元件或模組名稱/),在後台「建立覆寫」的清單裡也看得到它們。但有些擴充套件有自己的樣式系統或版面設定,覆寫方式請以開發商的文件為準。
延伸閱讀
- Joomla 日期格式怎麼改?用語言覆寫與 HTMLHelper 改成台灣習慣的年月日
- Joomla 白畫面(空白頁)怎麼辦?從錯誤記錄到擴充套件衝突的完整排查順序
- Joomla JCE 編輯器自動刪除 HTML 標籤怎麼辦?保留 br、iframe 等標籤的設定方向
想改版面又不動到核心,是 Joomla 網站能長期好好維護的關鍵。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供客製化網頁設計與 RWD 響應式網站,也服務台北與全台客戶,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。