分类: LINUX
2015-06-01 13:26:11
http://m.blog.csdn.net/blog/jin615567975/21454517
1、MVC
OpenWRT中采用LuCI作为它的Web interface界面框架,采用Lua语言.LUCI采用MVC,M-V-C ——Model--View--Controller,模式-视图-控制器,这是一种范型,对应:
feeds\luci\modules\admin-full\luasrc下的controller model view三个文件夹
2、模块入口在controller/admin/下,在index()函数中,使用entry函数来完成每个模块函数的注册
entry(path, target, title=nil, order=nil)
target主要分为三类:call(调用函数),template(调用htm,在view下)和cbi(定义各种控件,在model下,属于核心模块)
在cbi.lua文件中封装了所有的控件元素,例如复选框,下拉列表等
3、 <%=服务端语言的表达式可以为有返回值的方法,但返回值不能太大%>
<%可以执行服务器代码%>
<%#数据绑定%>
4、页面模块的某些子模块,wifi.lua里
如:s = m:section(NamedSection, wnet.sid, "wifi-iface", translate("Interface Configuration"))
s:tab("general", translate("General Setup"))
st = s:taboption("general", DummyValue, "__status", translate("Status"))
5、想删掉WiFi页面的高级设置
首先在network.lua里有page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wifi"), 15)
即知关键文件在wifi_overview.htm,wifi.lua
在wifi.lua里结合第四点,删除s:tab("advanced", translate("Advanced Settings"))即相关联代码即可
实际上一开始不了解LUCI架构的人很难找到,那么通过页面怎么找呢?
在谷歌浏览器看网页源码,有id="ra0.network1-iw-status",找网页对应的源码,id是非常关键的
但是直接搜ra0.network1-iw-status,什么都没有,但是搜iw-status,也许就有了
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cbi模块对应了uci的配置文件,cbi描述了对应配置文件的接口,luci的cbi解析模块会自动解析配置文件并生成对应的html文件并将相应的修改保存在配置文件
一个文件可以map多个文件,返回多个Map,示例可以看admin.lua
Map(“network”, “Network”) 对应到配置文件/etc/config/network
1、生成对应的section
function Map.section(self, class, …)
s = m:section(TypedSection, “interface”, “Interfaces”) 获取所有类型为interface的section并生成html section
class可以是
TypedSection表示根据类型获取section
NamedSection表示根据名字获取section
SimpleSection
Table
Tab
2、生成option
function AbstractSection.option(self, class, option, …)
class可以是:
Value:input控件
ListValue:下拉列表
Flag:checkbox
MultiValue:
DummyValue:纯文本
TextValue:多行input
Button:按钮
StaticList:
DynamicList:
每个section下面有多个option,我们通过s:option生成对应的option
下代码为每个section生成可选项控件,映射到proto字段
p= s:option(ListValue, “proto”, “Protocol”)
p:value(“static”, “static”)
p:value(“dhcp”, “DHCP”)
p.default = “static”
控件对应的html文件在luci\libs\web\luasrc\view\cbi目录下,例如:
Template:
<% code %>
执行代码
<% write (value) %> 或者
<%=value%>
写value的值
<% include (templatename) %>
<%+templatename%>
包含文件
<%= translate("Text to translate") %>
<%:Text to translate%>
翻译
<%# comment %>
注释