博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenWrt Web界面修改及功能实现实例说明
阅读量:6908 次
发布时间:2019-06-27

本文共 2495 字,大约阅读时间需要 8 分钟。

通过上篇文章的介绍,我们应该了解了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>

 

这样,一个页面的定制和功能的实现过程就完成了。

 

转载于:https://www.cnblogs.com/dwayne/archive/2012/04/21/2460830.html

你可能感兴趣的文章
【Linux系统编程】普通用户绑定(bind)特权端口
查看>>
代码编辑器Sublime_Text3的使用
查看>>
Docker Stack 部署web集群
查看>>
thinkphp源码分析(一)—开门篇
查看>>
猫叔产品读记 | 如何更好的玩转补贴、阿里入股B站商业化变现、儿童口腔市场怎么样?(3期)...
查看>>
Worse Is Better 思想的发展史
查看>>
力软移动框架 ionic cordova插件jpush-phonegap-plugin 极光推送配置方法 vs2017
查看>>
Will it finally: 关于 try/catch 的一些细节
查看>>
浅谈RPC
查看>>
翻译: Spring Cloud Feign使用文档
查看>>
vue-cli2 构建速度优化
查看>>
力扣(LeetCode)310
查看>>
Vue CLI 3 更改已经使用vue create 创建的项目的css pre-processor,添加stylus
查看>>
详解利用clear清除浮动的一些问题解决
查看>>
css浮动及其危害和解决方法
查看>>
【译】Go和WebAssembly:在浏览器中运行Go程序
查看>>
解决Linux下使用pm2运行nuxt2.0,IP+端口访问不了
查看>>
snabbdom源码解析(四) patch 方法
查看>>
Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip
查看>>
《Redis入门指南(第2版)》摘要
查看>>