参考了网上的luci学习指南,还有自己的学习,胡扯来胡扯去。
function index()
local root = node()
if not root.lock then
root.target = alias("mini")
root.index = true
end
entry({"about"}, template("about"))
local page = entry({"mini"}, alias("mini", "index"), _("Essentials"), 10)
page.sysauth = "root"
page.sysauth_authenticator = "htmlauth"
page.index = true
entry({"mini", "index"}, alias("mini", "index", "index"), _("Overview"), 10).index = true
entry({"mini", "index", "index"}, form("mini/index"), _("General"), 1).ignoreindex = true
entry({"mini", "index", "luci"}, cbi("mini/luci", {autoapply=true}), _("Settings"), 10)
entry({"mini", "index", "logout"}, call("action_logout"), _("Logout"))
end
root=node()定义了最外面的节点,也就是最上层的菜单显示。entry定义了一系列的菜单,及对应的业务处理路径。
page.sysauth = "root"
page.sysauth_authenticator = "htmlauth"
这两行是把Essentials定义为需要认证用户的登陆,可以注释掉这两行,就无需登录操作了。
page.sysauth_authenticator="htmlauth"处理的函数位于luci目录下的dispatcher.lua
function authenticator.htmlauth(validator, accs, default)
local user = luci.http.formvalue("username")
local pass = luci.http.formvalue("password")
if user and validator(user, pass) then
return user
end
require("luci.i18n")
require("luci.template")
context.path = {}
luci.template.render("sysauth", {duser=default, fuser=user})
return false
end
调用的模板文件,位于luci/view/sysauth.html
entry()函数,
第一个参数是定义菜单的显示(Virtual path)。
第二个参数定义相应的处理方式(target)。
alias是指向别的entry的别名,from调用的某一个view,cbi调用某一个model,call直接调用函数。
第三个参数是菜单的文本,直接添加string不会国际化,_("string"),就国际化了,
第四个参数是是同级菜单下,此菜单项的位置,从大到小。
后面跟着的index=true忘了啥意思,哎,蛋疼。。。。。。。。。。。。。