创建页面选项
1. module("luci.controller.admin.loogson", package.seeall) -–模块入口
2. --/usr/lib/lua/luci/controller/admin/loogson.lua
3. function index()
4. entry({"admin", "loogson"}, alias("admin", "loogson", "loogson"), _("SZ-Loogson"), 30).index = true --创建一级目录SZ-Loogson选项
5.
6. entry({"admin", "loogson", "loogson"}, cbi("admin_loogson/loogson"), _("BoardType"), 1) --创建二级目录loogson选项
7.
8. entry({"admin", "loogson", "control"}, cbi("admin_loogson/control"), _("Control"), 2) --创建二级目录control选项
9. end
10.
entry(path, target, title=nil, order=nil)
1.“path”:其中的“admin”表示为管理员添加脚本,“loogson”即为一级菜单名,“control”为二级菜单名。系统会自动在对应的菜单中生成菜单项。比如想在“System”菜单下创建一个菜单项,那么一级菜单名可以写为“system”。
2.“target”为调用目标,调用目标分为三种,分别是执行指定方法(Action)、访问指定页面(Views)以及调用CBI Module。
第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为“call("function_name")”,然后在该lua文件下编写名为function_name的函数就可以调用了。
第二种可以访问指定的页面,比如写为“template("myapp/mymodule")”就可以调用/usr/lib/lua/luci/view/myapp/mymodule.htm文件了。
第三种主要应用在配置界面,比如写为“cbi("myapp/mymodule")”就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua文件了。
3.title和order是针对管理员菜单的,其中的title即是显示在网页上的内容。这里我们创建“/usr/lib/lua/luci/controller/loogson.lua”文件,定义我们的入口为“loogson”。
4.从上面的程序可以看出,在“SZ-Loogson”选项卡下共有两个分选项,名称分别为“BoardType”和“Control”。根据cbi指示的目录,在“/usr/lib/lua/luci/model/cbi/admin_loogson”目录下有loogson.lua和control.lua两个文件,两个界面类似,我们选取"Control"界面讲述。
创建选项页面
1.在/etc/config/下面创建对应的uci配置文件
如文件路径为“/etc/config/njitclient”,内容如下:
config login
option username ''
option password ''
option ifname 'eth0'
option domain ''
2.然后我们要在CBIModule的lua文件中首先需要映射与存储文件的关系
m = Map("njitclient ", "NJIT Client", "Configure NJIT 802.11x client")
第一个参数即为配置文件存储的文件名,不包含路径,比如按上述创建的 “njitclient”,而第二是“配置页面标题”,第三个参数 “配置页面说明”,如下所示:
3.接下来需要创建与配置文件中对应的Section,Section分为两种,NamedSection和TypedSection,前者根据配置文件中的Section名,而后者根据配置文件中的Section类型,这里我们使用后者,代码如下。同时我们设定不允许增加或删除Section(“.addremove = false”),以及不显示Section的名称(“.anonymous = true”)。
s = m:section(TypedSection, "login", "")
s.addremove = false
s.anonymous = true
4.接下来我们需要创建Section中不同内容的交互(创建Option),常见的比如有Value(文本框)、ListValue(下拉框)、Flag(选择框)等等
require("luci.sys") --调用luci.sys
m =Map("njitclient", translate("NJIT Client"),translate("Configure NJIT 802.11x client."))
--将配置文件与m变量映射
s =m:section(TypedSection, "login", "") --创建配置文件中对应的section类型
s.addremove = false --不允许增减section
s.anonymous = true --不显示section name
enable = s:option(Flag, "enable",translate("Enable")) --为enableoption创建选择框Enable
name= s:option(Value, "username", translate("Username"))
pass= s:option(Value, "password", translate("Password"))
pass.password = true
domain = s:option(Value, "domain",translate("Domain"))
ifname = s:option(ListValue,"ifname", translate("Interfaces"))
for k, v in ipairs(luci.sys.net.devices())do
if v ~= "lo" then
ifname:value(v) --给下拉框赋值(增加选项)
end
end
local apply =luci.http.formvalue("cbi.apply") --用来获取点击按钮后发送出去的表单
if apply then
io.popen("/etc/init.d/njitclient restart") --执行脚本
end
return m
创建页面执行脚本
RT=50
run_njit()
{
local enable
config_get_bool enable $1 enable
if [ $enable ]; then
local username
local password
local domain
local ifname
config_get username $1 username
config_get password $1 password
config_get domain $1 domain
config_get ifname $1 ifname
if [ "$domain" != "" ]; then
njit-client $username@$domain $password $ifname &
else
njit-client $username $password $ifname &
fi
echo "NJIT Client has started."
fi
}
start()
{
config_load njitclient
config_foreach run_njit login
}
stop()
{
killall njit-client
killall udhcpc
echo "NJIT Client has stoped."
}