OpenWRT luci使用详解和实例

CBI 模块的具体使用

m = Map("ctw", translate("微信连WiFi"))
s = m:section(TypedSection, "wifi")
s.addremove = false --可以添加模块,如果true,每次点击添加都会添加完整的一个模块的内容让用户输入
s.anonymous = true

首先是把整个UCI文件 Map 一下,然后再通过 section 方法进行对应,匿名节点爱用 TypedSection 非匿名节点采用 NamedSection

m:section(TypedSection,"wifi","描述信息")
m:section(NamedSection,"wifi","system","描述信息")

然后就是各个模块的映射:

Value 是普通的输入框

TextValue 则是类是textarea的文本输入框体

DummyValue 则是直接显示不可输入的内容框

Flag 则是复选框的,如果是勾选则为1 true 这样的关键词,没有勾选则为 0 false 这样的关键词

ListValue 则是下拉式列表框,这个框体里面可以提供下拉列表值

MultiValue 则是复选框,多个都被选中的时候会出现 option appid "1 2 3" 这样的内容

StaticList 则是复选框,但是会采用 list 方式存储而不是option 方式存储

FileUpload 文件上传,至少能记录文件名称

FileSelect 文件选择,选择设备系统中的文件名称

appid = s:option(Value, "appid", translate("<font color='red'>应用ID(appid)</font>"),"每个微信公共号唯一的appid标示")
appid:value("智能预选择值内容")
appid:depends("mode","fit");  #depends(key,value)  只有当对应的key=value的时候才能显示这个选项
appsecret = s:option(TextValue, "appsecret", translate("应用Secret(appsecret)"),"非必填项目,填写后可以用于高级功能")

enable = s:option(Flag, "enable", translate("Enable))
enable.rmempty = false -- 值为空时不删除
o = s:option(ListValue, "enable", translate("Enable"))
o:value("1", translate("Enable"))
o:value("0", translate("Disable"))
o = s:option(MultiValue, "enable", translate("Enable"))
o:value("1", translate("1"))
o:value("2", translate("2"))

关于依赖值的设计,支持多个依赖

auth:depends({mode="sta", eap_type="peap", encryption="wpa2"})

显示密码形式

acct_secret.password = true
encr.override_values = true                                                                                          
encr.override_depends = true

非常有用的写法,可以方便快捷的通过开关设置字符串类型的值

encryption = s:option(Flag,"encryption",translate("是否启用加密"))    
encryption.default = encryption.enabled                                     
encryption.enabled = "wpa-psk2"                                             
encryption.disabled = "none"

button = modex:option(Button, "modename", "桥接模式")
button.inputtitle = translate("切换")
button.inputstyle = "apply"
function button.write(self, section, value)
    AbstractValue.write(self, section, value)
    luci.sys.call("uci set network.lan.ifname=\"eth0.1 eth0.2\" ;uci del network.wan")
    --self.inputtitle = translate("路由模式")
    return
end

——————————————————————————–

刷新按钮

hup = s2:option(Button, "_refresh", translate("Refresh"))                              
hup.inputstyle = "reload"                                                              
function hup.write(self, section)                                                      
        luci.http.redirect(luci.dispatcher.build_url("admin/network/network",""))      
end

——————————————————————————–

实现表单的效果

f = SimpleForm("sac_list", translate("AP列表"), translate("当设备工作在AC模式时显示AP状态列表"))
f.reset = false
f.submit = false

t = f:section(Table, {{client_ip="192.168.10.16",client_status="Online"},{client_ip="192.168.16.2",client_status="offline"}})
t:option(DummyValue, "client_ip", translate("IP地址"))
t:option(DummyValue, "client_status", translate("设备状态"))

term = t:option(Button, "delete", translate("删除"))
term.inputstyle = "remove"
function term.write(self, section)
    null, self.tag_error[section] = os.execute("rm /tmp/ac/*")
end

0 0 投票数
Article Rating
此条目发表在OpenWRT分类目录,贴了, , 标签。将固定链接加入收藏夹。
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论