Chinaunix首页 | 论坛 | 博客
  • 博客访问: 891395
  • 博文数量: 286
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1841
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-09 16:26
文章分类

全部博文(286)

文章存档

2016年(38)

2015年(248)

我的朋友

分类: LINUX

2015-06-01 13:26:11

luci--lua-mvc-3

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 %>
注释


阅读(2407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~