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