1. 程式人生 > >openWRT學習之LUCI之一helloworld示例

openWRT學習之LUCI之一helloworld示例

備註1:本文 講述的是原生的openWRT環境下的LUCI

備註2:本文參考了諸多資料,感謝網友分享,參考資料:

文章開篇:新增一個選項,該選項處理結果:顯示hello world字串的網頁

注:我們先將頁面添加出來,然後我將分析如何為什麼這麼新增的。

目的:在system選單下新增一個名字為heyg1的選項,處理結果顯示“hello world

第一步:/usr/lib/lua/luci/controller/admin/system.lua中註冊選項:

entry({"admin", "system", "heyg1"}, template("heyg/heyg1"), _("heyg1"), 3).dependent=false

第二步:在view目錄下新增相應的heyg1.htm檔案

/usr/lib/lua/luci/view/heyg/heyg1.htm

Heyg.htm原始碼為:

<%+header%>

<h1><%:hello world%></h1>

<%+footer%>

第三步:將上面檔案新增完成後,儲存登入路由後臺可以看到結果(有時可能需要重新啟動 路由)

分析為什麼要這麼新增(個人分析,不正確相互討論,勿噴):

實際上我們看到的web介面,在luci下是以“樹-結點”的方式存在:

第一步分析:

我們看到/usr/lib/lua/luci/controller/admin/下很多

*.lua檔案,基本都是註冊模組,然後註冊“結點”,每個lua檔案都是一個結點生成檔案(初學可以這麼理解),正如我們web後臺介面看到的:在後端system就是system.lua這個結點檔案生成的。

所以我們需要在system.lua檔案中通過entry()函式去註冊我們要新增的節點hey1

entry({"admin", "system", "heyg1"}, template("heyg/heyg1"), _("heyg1"), 3).dependent=false

Entry()函式分析:

引數一:插入的節點名字,如:{adminsystemheyg1},表示在admin

system中插入節點heyg1

引數二:插入的heyg1節點要做什麼(動作時什麼),通常有下面幾種方式:

方式一:template方式,即調該節點會直接呼叫view下的相應htm檔案

方式二:cbi/form方式,會呼叫model下的相應檔案做相應的處理

方式三:call方式,會呼叫本檔案或者匯入檔案的函式

其他方式:

Alias:表示連結到其他某個節點

這裡template(heyg/heyg1)會呼叫view/heyg/heyg1.htm檔案

引數三:插入節點在對應位置的名字,在web介面對應選單中的顯示名字

這裡_(heyg1),在web的選單中顯示為heyg1

引數四:插入結點的同等級的不同分類,或者說是區別同等級下的其他結點的數字代號

這裡3,不能和同級別下的其他選項重複

在選單中級別是從小到大的顯示如:system1)、Administration(2)heyg1(3)....

Entry()函式的一些屬性解析:對於插入一個結點,該結點除了有相應的名稱和處理動作之外,它還有一些相應的屬性,我們可以手動的設定它的屬性值類似於entry().dependent=false

官方文旦中給出以下屬性:

dependent :當該節點的父節點丟失時,將該節點保護起來,不讓它被意外呼叫

leaf:如果該節點下還有其他子節點,解析到該結點時,就不向下繼續解析其子節點。

sysauth:在使用該節點時需要一個系統賬戶驗證

I18n:定義了當求頁面請求時,哪些檔案會自動載入

其他屬性(純屬自己猜測,如有不正,多多指教,勿噴):

Index:將該節點作為同級目錄下的作為首頁,或者說預設的第一個頁面

可以參考luci官方文旦:

第二步分析:根據第一步分析,我們要在相應的view目錄下新增我們的htm檔案---直接呼叫