参考了网上的luci学习指南,还有自己的学习,胡扯来胡扯去。
function index()local root = node()if not root.lock thenroot.target = alias("mini")root.index = trueendentry({"about"}, template("about"))local page = entry({"mini"}, alias("mini", "index"), _("Essentials"), 10)page.sysauth = "root"page.sysauth_authenticator = "htmlauth"page.index = trueentry({"mini", "index"}, alias("mini", "index", "index"), _("Overview"), 10).index = trueentry({"mini", "index", "index"}, form("mini/index"), _("General"), 1).ignoreindex = trueentry({"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) thenreturn userendrequire("luci.i18n")require("luci.template")context.path = {}luci.template.render("sysauth", {duser=default, fuser=user})return falseend
调用的模板文件,位于luci/view/sysauth.html
entry()函数,
第一个参数是定义菜单的显示(Virtual path)。
第二个参数定义相应的处理方式(target)。
alias是指向别的entry的别名,from调用的某一个view,cbi调用某一个model,call直接调用函数。
第三个参数是菜单的文本,直接添加string不会国际化,_("string"),就国际化了,
第四个参数是是同级菜单下,此菜单项的位置,从大到小。
后面跟着的index=true忘了啥意思,哎,蛋疼。。。。。。。。。。。。。