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/下很多
所以我們需要在system.lua檔案中通過entry()函式去註冊我們要新增的節點hey1
entry({"admin", "system", "heyg1"}, template("heyg/heyg1"), _("heyg1"), 3).dependent=false
Entry()函式分析:
引數一:插入的節點名字,如:{“admin”, “system”, “heyg1”},表示在admin
引數二:插入的heyg1節點要做什麼(動作時什麼),通常有下面幾種方式:
方式一:template方式,即調該節點會直接呼叫view下的相應htm檔案
方式二:cbi/form方式,會呼叫model下的相應檔案做相應的處理
方式三:call方式,會呼叫本檔案或者匯入檔案的函式
其他方式:
Alias:表示連結到其他某個節點
這裡template(“heyg/heyg1”)會呼叫view/heyg/heyg1.htm檔案
引數三:插入節點在對應位置的名字,在web介面對應選單中的顯示名字
這裡_(“heyg1”),在web的選單中顯示為heyg1
引數四:插入結點的同等級的不同分類,或者說是區別同等級下的其他結點的數字代號
這裡3,不能和同級別下的其他選項重複
在選單中級別是從小到大的顯示如:system(1)、Administration(2)、heyg1(3)....
Entry()函式的一些屬性解析:對於插入一個結點,該結點除了有相應的名稱和處理動作之外,它還有一些相應的屬性,我們可以手動的設定它的屬性值類似於entry().dependent=false
官方文旦中給出以下屬性:
dependent :當該節點的父節點丟失時,將該節點保護起來,不讓它被意外呼叫
leaf:如果該節點下還有其他子節點,解析到該結點時,就不向下繼續解析其子節點。
sysauth:在使用該節點時需要一個系統賬戶驗證
I18n:定義了當求頁面請求時,哪些檔案會自動載入
其他屬性(純屬自己猜測,如有不正,多多指教,勿噴):
Index:將該節點作為同級目錄下的作為首頁,或者說預設的第一個頁面
可以參考luci官方文旦:
第二步分析:根據第一步分析,我們要在相應的view目錄下新增我們的htm檔案---直接呼叫