搜档网
当前位置:搜档网 › 课题_OpenWrt Web界面修改及功能实现实例说明

课题_OpenWrt Web界面修改及功能实现实例说明

课题_OpenWrt Web界面修改及功能实现实例说明
课题_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).dep endent=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 [] []

Commands:

batch

export []

import []

changes []

commit []

add

add_list .

.