| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- local M = {}
- M.file_get_contents = function(filepath)
-
- local file, errmsg = io.open(fw.website_dir()..filepath, "r")
- if not file then
- fw.throw_string(errmsg)
- end
- local content = file:read("*a")
- if content == nil or content == "" then
- print("file_get_contents error: ",filepath)
- return ""
- end
- local replaced,c2 = engine.replace(content)
- if replaced then
- return c2
- end
- return content
- end
- M.menu_top = function()
- -- 当前请求路径
- local request_path = request.filepath() or ""
- -- 取配置
- local menuData = require("fwutils.develop.function.menu").bytecode(string.format("%d",engine.cfg.role_id()))
- if not menuData then
- return "<!-- no menu config -->"
- end
- -- 提取并排序主菜单
- local menuItems = {}
- for name, item in pairs(menuData) do
- table.insert(menuItems, {
- name = name,
- item = item,
- sort = item.sort or 0
- })
- end
- table.sort(menuItems, function(a, b)
- return a.sort > b.sort
- end)
- local html = [[
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- ]]
- -- 渲染主菜单
- for _, entry in ipairs(menuItems) do
- local name = entry.name
- local item = entry.item
- local icon = item.icon or ""
- local path = item.path or "#"
- local activeClass = ""
- if item.children then
- -- 有子菜单
- local isMegamenu = item.megamenu and " dropdown-megamenu" or ""
- -- 检查子菜单是否有激活
- local hasActiveChild = false
- local children = {}
- for childName, childItem in pairs(item.children) do
- table.insert(children, {
- name = childName,
- item = childItem,
- sort = childItem.sort or 0
- })
- if not hasActiveChild and (request_path == (childItem.path or "")) then
- hasActiveChild = true
- end
- end
- table.sort(children, function(a, b)
- return a.sort > b.sort
- end)
- -- 父菜单激活:当前页面是父菜单path,或是任一子菜单path
- if request_path == path or hasActiveChild then
- activeClass = "active-link"
- end
- html = html .. [[
- <li class="nav-item dropdown ]] .. activeClass .. [[">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- <i class="]] .. icon .. [["></i> ]] .. name .. [[
- </a>
- <ul class="dropdown-menu]] .. isMegamenu .. [[">
- ]]
- -- 渲染子菜单
- for _, child in ipairs(children) do
- local childName = child.name
- local childItem = child.item
- local childPath = childItem.path or "#"
- -- 子菜单不设置激活样式
- html = html .. [[
- <li>
- <a class="dropdown-item" href="]] .. childPath .. [[">
- <span>]] .. childName .. [[</span>
- </a>
- </li>
- ]]
- end
- html = html .. [[
- </ul>
- </li>
- ]]
- else
- -- 没有子菜单
- -- 简单的“当前页面是否激活”检查
- if request_path == path then
- activeClass = "active-link"
- end
- html = html .. [[
- <li class="nav-item ]] .. activeClass .. [[">
- <a class="nav-link" href="]] .. path .. [[">
- <i class="]] .. icon .. [["></i> ]] .. name .. [[
- </a>
- </li>
- ]]
- end
- end
- html = html .. [[
- </ul>
- ]]
- return [=[
- <nav class="navbar navbar-expand-lg">
- <div class="container">
- <div class="offcanvas offcanvas-end" id="MobileMenu">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title semibold">Navigation</h5>
- <button type="button" class="btn btn-danger btn-sm ms-auto" data-bs-dismiss="offcanvas">
- <i class="icon-clear"></i>
- </button>
- </div>
- ]=]..html..[[
- </div>
- </div>
- </nav>
- ]]
- end
- M.teacher_photos = function()
- require("app.app")
- local conn = db_conn()
- local edu_id = edu_id()
- local edu_teacher = require("app.function.edu_teacher")
- local edu_setting = require("app.function.edu_setting")
- local teacher_info = edu_teacher.get_by_id(pint("id"),edu_id,conn)
- if teacher_info == nil then
- conn:close()
- return ""
- end
- local domain_assets_cn = edu_setting.get_assets_domain_cn(edu_id,conn)
- local photos = {}
- if teacher_info.photo and type(teacher_info.photo) == "string" and teacher_info.photo ~= "" then
- local ok, decoded = pcall(function() return cjson.decode(teacher_info.photo) end)
- if ok and type(decoded) == "table" then
- photos = decoded
- end
- end
- local content = "<div><div class='home-img'><img src='"..domain_assets_cn.."/".. teacher_info.avatar.."' class='img-fluid bg-img' alt=''></div></div>"
- for i,v in ipairs(photos) do
- if type(v) == "string" then
- content = content..[[<div>
- <div class="home-img">
- <img src="]]..domain_assets_cn.."/"..v..[[" class="img-fluid bg-img" alt="">
- </div>
- </div>
- ]]
- end
- end
- conn:close()
- return content
- -- return "<h1>卧槽</h1>"
- end
- M.regist = function(env)
- for key, value in pairs(M) do
- if type(value) == "function" and key ~= "functions" and key ~= "get_all_functions" then
- env[key] = value
- end
- end
- return env
- end
- return M
|