標籤:blog http io ar os 使用 sp 檔案 on
http://www.cnblogs.com/dwayne/archive/2012/04/21/2460830.html
通過上篇文章的介紹,我們應該瞭解了Lua語言在OpenWrt Web配置頁面的基本對應功能設計方法。本文將以一個頁面為例,來說明Lua語言如何?頁面控制項以及怎麼使輸入或操作的選項在系統中生效。
頁面:
首先,我們要在System欄下建立分頁"Test by Wayne",使用cbi模組實現,修改目錄lua\luci\controller\admin下的system.lua檔案。
在function index()中添加語句:
entry({"admin", "system", "test"}, cbi("admin_system/test"), "Test by Wayne", 30).dependent=false
接下來就需要在lua\luci\model\cbi\admin_system中建立test.lua檔案並完成控制項元素編輯。
上一篇文章中已經說過,所有的控制項都由Map開始,在這裡我測試的是網路設定,語句如下:
m = Map("network", translate("Test Page by Wayne (~_~)"), translate("On this page we can learn how the .lua works."))
然後需要建立分塊”Network Configuration”。建立section之前,需要在etc/config目錄下的network檔案中添加一個配置,就取名叫netset吧,network檔案如下:
config ‘interface‘ ‘loopback‘
option ‘ifname‘ ‘lo‘
option ‘proto‘ ‘static‘
……
config ‘interface‘ ‘lan‘
option ‘ifname‘ ‘eth0‘
option ‘type‘ ‘bridge‘
option ‘proto‘ ‘static‘
……
config ‘netset‘
修改好設定檔後,使用如下語句建立section:
s = m:section(TypedSection, "netset", translate("Network Configuration"))
第一個控制項”address”屬於cbi類型的Value類型,並且定義輸入類型為ip4addr,實現如下:
ipaddr1 = s:taboption("wan1", Value, "ipaddr1", translate("address"))
ipaddr1.datatype = "ip4addr"
控制項”netmask”在這裡其實是ListValue的效果,但是此處為了擁有custom自訂的選項,設定的類型為Value,實現如下:
netmask1 = s:taboption("wan1", Value, "netmask1", translate("netmask"))
netmask1.datatype = "ip4addr"
netmask1:value("255.255.255.0")
netmask1:value("255.255.0.0")
netmask1:value("255.0.0.0")
到這裡,控制項都已經可以添加並顯示了,剩下的工作就是輸入的值如IP地址和網關資訊怎麼擷取生效了。
在進行編輯Save & Apply後,再開啟etc/config/network檔案,發現檔案內容如下:
config ‘interface‘ ‘loopback‘
option ‘ifname‘ ‘lo‘
option ‘proto‘ ‘static‘
……
config ‘interface‘ ‘lan‘
option ‘ifname‘ ‘eth0‘
option ‘type‘ ‘bridge‘
option ‘proto‘ ‘static‘
……
config ‘netset‘
option ‘ipaddr1‘ ‘192.168.1.30‘
option ‘netmask1‘ ‘255.255.255.0‘
option ‘gateway1‘ ‘192.168.1.5‘
即所操作的內容都在設定檔中自動儲存,而設定檔中的值擷取方式就很多了,我們可以使用uci命令得到。
Usage: uci [<options>] <command> [<arguments>]
Commands:
batch
export [<config>]
import [<config>]
changes [<config>]
commit [<config>]
add <config> <section-type>
add_list <config>.<section>.<option>=<string>
show [<config>[.<section>[.<option>]]]
get <config>.<section>[.<option>]
set <config>.<section>[.<option>]=<value>
delete <config>[.<section[.<option>]]
rename <config>.<section>[.<option>]=<name>
revert <config>[.<section>[.<option>]]
reorder <config>.<section>=<position>
這樣,一個頁面的定製和功能的實現過程就完成了。
OpenWrt Web介面修改及功能實現執行個體說明