OpenCart 4 帶來的新改變

介紹 OpenCart 4 帶來的新變化,包含底層框架、視覺化編輯器、emoji 表情符號的支援,以及各種小地方的優化及改善等等。

OpenCart 4 歷經了 5、6 年的努力,今年終於逐漸來到穩定堪用的狀態,不過 5、6 年的改版,並沒有為系統增加太多令人驚艷的強大功能,我認為主要的改變是底層框架的升級,以及系統架構的調整,因為這些都是重大基礎建設,就像一棟大樓的地基一般,必須先穩定之後,再來追求上層的功能應用,是合理的進程。

如果在底層架構尚未穩定之前,就在其上建設發展了一堆應用功能,若是底層需要再進行調整修改,則上面的應用功能就可能得被迫配合調整,不只為系統的開發增添不必要的困擾,也容易造成模組不相容,所以目前的 OpenCart 4 並沒有太多厲害的新功能,不過相信接下來的改版,應該就會比較側重在功能的擴增強化,例如近期釋出的 Blog 新功能。

即便如此,OpenCart 4 仍然修正了許多 OpenCart 3 的小缺點,帶來不少的小優化,這篇文章我將會持續更新,為大家介紹 OpenCart 帶來了那些小改進,這些小優化雖然不至於讓 OpenCart 4 的功能,能與網路上主流的開店平台分庭抗禮,但我認為這些優化讓 OpenCart 4 變得更加親民,進入的門檻變得更低,對新手電商們來說,絕對是很棒的選擇。

PHP 版本與底層框架的升級

核心程式全面以 PHP 8.x 語法的改寫,這是相當重要的更新,目前最新的 OpenCart 4.0.2.4 已經將 PHP 最低版本要求提升至 PHP 8.2,不只讓 OpenCart 4 可以享受 PHP 8.2 帶來的效能提升,商家們也不用再擔心主機環境太新的問題了,目前市面上的 Linux 主機商,估略有 9 成以上是支援 PHP 8.2 的,而未來的幾年,這個比例只會越來越接近 100%,OpenCart 4 將會維持支援最主流的環境。

關於底層框架,OpenCart 主要的底層框架包含了 Bootstrap(由 v3.3.7 升級到 v5.3.2)、JQuery(由 2.1.1 升級到 3.7.1)、Font Awesome(由 4.7.0 升級到 6.4.2),另外後台的視覺化編輯器,則由原本的 summernote 變更為強悍的 CKEditor,前面列的每一項都是大幅度的跨越式升級,這些升級對一般使用者來說,或許感覺不是那麼明顯,但是許多擴充模組也會用到這些框架,這些框架的升級也會讓模組開發者受惠,更容易開發出好用的功能擴充。

資料庫的變化

CharSet 預設變更為 utf8mb4,這有什麼功能呢? 這代表你可以在商品名稱、商品描述中,使用帶有顏色的 emoji 表情符號字元了。

在 OpenCart 3 的年代,我已經協助過近百個 OpenCart 網站,讓他們的商品名稱、商品描述能使用 emoji 表情符號字元,這些修改對我們團隊來說算是小工程,但對於不懂程式的 OpenCart 商家來說,可能就無法輕易地自行修改,我相信這也是過去讓人覺得 OpenCart 不是那麼好用的眾多因素之一,很高興 OpenCart 4 跟上了時代,將 utf8mb4 設定為預設的 charset,讓商家可以接使用 emoji 表情符號字元。

外掛系統機制

從 OpenCart 自 2.0 版與 2.2 版開始,便相繼提供了 Modification(代碼替換機制) 與 Event System(事件系統),讓第三方廠商可藉此來開發擴充功能,Event System 是類似 WordPress 的 hook 機制,但功能沒那麼強大,觸發時機很受限,有些功能的修改用 Event 機制改起來綁手綁腳,Modification(OCMod 機制) 的修改彈性就相當大,幾乎系統所有的 php 檔和 twig(版型)檔案都可以任意修改,不過 Event 機制因為限制較多,對系統造成的穩定性影響也較小,而 OCMod 機制因為可以任意修改 php 和 twig 檔,所以也容易相互衝突,對於系統升級的相容性也較低。

而從 OpenCart 4.0 開始,系統逐漸朝向可線上更新的目標,為了顧及系統穩定性,避免系統更新後發生與擴充功能相容性的問題,就不再提供 Modification(OCMod) 機制,只保留 Event 機制。

在 OpenCart 的 Marketplace (擴充功能市集),有第三方廠商提供了 for OpenCart 4.0 的 VQMod 機制,這是一套與 Modification(OCMod) 相似的代碼替換機制,讓 OpenCart 4 的使用者或開發者,得以繼續使用過去的代碼替換模組來修改程式或版型,Marketplace (擴充功能市集)上也已經出現不少使用 VQMod 來開發的擴充模組,這類模組雖然也使可以使用,但當你的 OpenCart 未來進行(小)升級時,造成系統無法運作的機會是比採用 Event 機制開發出來的模組更高的。

功能小優化-中文圖檔支援

在 OpenCart 4.0 之前的版本,開發團隊似乎比較沒又注意到對於 multibyte 語系的支援,所以在選擇圖片的對話框中,中文檔名常會出現如下圖的亂碼,這是因為在之前的版本,系統為了讓這邊的檔名不要因為太長而造成跑版,所以透過程式將過長的檔名插入一個換行字元,但因為沒有考量到 multibyte 語系(例如中文),於是在被硬插入一個換行字元之後,中文的檔案名稱就變成了下圖的亂碼樣子了。

OpenCart 4.0 改善了這個問題,改用 css 的語法來控制過長的檔名換行,所以不再使用程式暴力換行,因此中文檔案在 OpenCart 4 上面,現在已經能夠正常得顯示中文檔名了。