= $thread['subject'];?>
= $form_title ?>
= $conf['sitename'];?>
= $conf['sitebrief'];?>
|
= lang('threads');?>
= $runtime['threads'];?> |
= lang('posts');?>
= $runtime['posts'];?> |
= lang('users');?>
= $runtime['users'];?> |
0) { ?>
= lang('online');?>
= $runtime['onlines'];?> |
|
= lang('threads');?>
= $forum['threads'];?> |
= lang('today_posts');?>
= $forum['todayposts'];?> |
= lang('today_threads');?>
= $forum['todaythreads'];?> |
`作为整个网站的容器
- 包含导航菜单(通过`include _include(APP_PATH.'view/htm/header_nav.inc.htm');`引入)
- 新增了一个美观的页面标题区域``
5. **动态标题区域**:根据不同页面类型显示不同的标题内容:
- 帖子页面:显示帖子标题、作者信息、发布日期和查看量
- 发帖/编辑页面:显示表单标题
- 主页:显示网站名称、简介、发帖按钮和网站统计信息
- 论坛板块页面:显示板块名称、简介、公告、版主列表和板块统计信息
- 其他页面:显示默认标题
6. **响应式设计**:使用了Bootstrap的响应式类(如`container`、`col-12`、`col-md-6`等)确保页面在不同设备上都能正常显示。
7. **Hook支持**:在关键位置添加了Hook点,方便插件进行扩展。
##### header\_nav.inc.htm
**【修改内容简介】**
重新设计了导航栏内容,实现了响应式导航菜单,包括移动端和桌面端的不同显示效果,以及用户登录状态的不同显示。
**【本文件内的变量】**
- `$_forum`:array类型;单个论坛板块:
- `fid`:int类型;板块ID
- `fup`:int类型;上一级版块;为其他插件预留
- `name`:string类型;版块名称
- `rank`:int类型;显示顺序,注意**数字越大越靠前**
- `threads`:int类型;主题数
- `todayposts`:int类型;今日发回帖数量
- `todaythreads`:int类型;今日发主题贴数量
- `brief`:string类型;版块简介(允许HTML,但你可能需要使用`htmlspecialchars_decode`函数解决)
- `announcement`:string类型;版块公告(允许HTML,但你可能需要使用`htmlspecialchars_decode`函数解决)
- `accesson`:int类型;是否开启权限控制;(*建议转换成bool类型*)
- `orderby`:int类型;默认列表排序方式,其中:0 = 最后回复时间时间 `last_date`、1 = 发帖时间 `tid`
- `create_date`:int类型;板块创建时间 时间戳
- `icon`:int类型;板块是否有 icon,如果有,则这里为最后更新时间 时间戳,如果没有,则为0
- `moduids`:string类型;版块的版主用户ID,最多10个,逗号分隔
- `seo_title`:string类型;该板块的 SEO 标题,如果设置会代替版块名称;为其他插件预留
- `seo_keywords`:string类型;该板块的 SEO 关键字;为其他插件预留
- `create_date_fmt`:string类型;板块创建时间,人类可读格式
- `icon_url`:string类型;板块图标地址
- `accesslist`:array类型;特定于该板块的权限控制。
- 它对应后台板块编辑页面里的“用户权限”复选框。
- 如果没有选中的话,accesslist是空白array,权限会与当前用户组设定一样
- 如果选中的话,会是无序数组,其中有:
- `fid`:int类型;板块ID
- `gid`:int类型;用户组ID
- 可以用来与当前用户的`$gid`比对
- `allowread`:int类型;是否允许看帖(*建议转换成bool类型*)
- `allowthread`:int类型;是否发主题贴(*建议转换成bool类型*)
- `allowpost`:int类型;是否允许回帖(*建议转换成bool类型*)
- `allowattach`:int类型;是否允许上传附件(*建议转换成bool类型*)
- `allowdown`:int类型;是否允许下载附件(*建议转换成bool类型*)
- `modlist`:array类型;版块的版主用户数组
- *详见header.inc.htm里的`$user`*
**【代码实现】**
```html
```
**【代码解释】**
1. **导航栏结构**:使用Bootstrap的`navbar`组件创建了一个固定在顶部的导航栏,包含了响应式设计。
2. **移动端适配**:
- 为移动端添加了汉堡菜单按钮,点击可展开/折叠导航菜单
- 在移动端显示简化的用户菜单,仅包含头像或登录按钮
- 移动端专属的网站标志和关闭按钮
- 移动端专属的搜索框
3. **桌面端适配**:
- 左侧显示论坛板块列表
- 右侧显示用户菜单
- 使用水平分隔线区分板块列表和用户菜单
4. **板块列表**:
- 显示主页菜单项
- 遍历`$forumlist_show`数组,为每个板块创建一个菜单项
- 每个菜单项包含板块图标和名称
- 使用`data-active`属性标记当前活跃的板块,便于后续通过JavaScript添加高亮样式
5. **用户菜单**:
- 根据用户登录状态显示不同内容:
- 未登录:显示登录按钮
- 已登录:显示用户头像、用户名和下拉菜单
- 下拉菜单包含个人中心、我的帖子、我的收藏、我的积分等链接
- 管理员用户额外显示管理后台链接
- 包含登出链接
6. **Hook支持**:在关键位置添加了Hook点,方便插件进行扩展。
7. **性能优化**:使用`loading="lazy"`属性延迟加载图片,提高页面加载速度。
##### footer.inc.htm
**【修改内容简介】**
与header.inc.htm相对应,也改变了页面结构,并增加了谷歌Code Prettify来改善代码块的外观,以及一个动态给`body`元素添加“scrolled” class的辅助JS代码。
**【本文件内的变量】**
- `$db`:Object类型;代表数据库连接,其中可能包括:
- `conf`:array类型;数据库连接配置;**【禁止对外显示】**
- `master`:array类型;主数据库数据库连接配置;**【禁止对外显示】**
- `host`:string类型;数据库主机地址
- `user`:string类型;数据库用户名
- `password`:string类型;数据库密码
- `name`:string类型;数据库名称
- `tablepre`:string类型;数据库表的前缀
- `charset`:string类型;数据库的字符集
- `engine`:string类型;数据库表的引擎;每张表应该使用相同的引擎,但也说不定,因为有些插件会创建自己的表,选择自己认为合适的引擎
- `slaves`:array类型;从数据库数据库连接配置;**【禁止对外显示】**
- 内容同上。
-
> 我知道,你会觉得这个词不好听,但请注意,这个程序是在2020年10月1日(也就是GitHub更改所有新的Repository的默认分支名称从master改为main)之前发布的。我个人其实更喜欢用“servant”,因为*fate* - `rconf`:array类型;数据库连接配置;**【禁止对外显示】** - 内容同`$db[conf][master]`。 - `errno`:int类型;数据库错误码,如果没有错误是0 - `errstr`:string类型;数据库错误信息,如果没有错误则为空 - `sqls`:array类型;执行的SQL语句;**【禁止对外显示】** - `tablepre`:string类型;数据库表的前缀;**【禁止对外显示】** - `$starttime`:float类型;程序开始执行时间 - `$time`:int类型;现在时间 时间戳 - `$ip`:string类型;当前用户IP地址 - `$useragent`:string类型;当前访客的User Agent值 - `$forumlist`:array类型;完整论坛板块列表 - *详见header\_nav.inc.htm里的`$_forum`* - `$forumarr`:array类型;用户可见的论坛板块简略数组,其中: - 键是板块ID,值是板块名称 - `$fid`:int类型;当前所在的论坛板块ID(用于板块、帖子详情、编辑帖子页面) - `$conf`:Xiuno BBS配置信息(全部页面) - *详见`conf/conf.php`文件* - `$static_version`:string类型;静态资源版本号(全部页面) - `$browser`:array类型;从User Agent中提取的用户浏览器信息数组,不建议完全相信 - `device`:string类型;用户可能使用的设备,取值范围为:`pc, mobile, pad` - `name`:string类型;浏览器名称,取值范围为:`chrome, ie, robot`等 - `version`:int类型;浏览器版本,注意可能为0 -
> 为什么不建议完全相信?因为该变量的内容,也就是`get__browser`函数,是针对中国市场精心设计的。 -
> 代码注释中提及“中国国情下的判断浏览器类型,简直就是五代十国,乱七八糟”,这里的“五代十国”是一种形象化的比喻,用于描述中国市场上浏览器类型多样、判断复杂的情况。 -
> 互联网发展过程中,不同浏览器厂商采用不同的技术标准和内核,同时还存在多种兼容模式,这就使得开发者在判断用户使用的浏览器类型时面临诸多困难,就如同 “五代十国” 时期政治局势混乱、各方势力割据一样。 **【代码实现】** ```html
= cron_run();?>
```
**【代码解释】**
1. **变量初始化**:获取页脚所需的全局变量,如数据库连接、执行时间、用户信息等。
2. **调试信息**:在调试模式下显示详细的调试信息。
3. **页脚导航**:通过`include _include(APP_PATH.'view/htm/footer_nav.inc.htm');`引入页脚导航内容。
4. **页面结构闭合**:闭合`main`和`div.main-content`标签,完成页面主体结构。
5. **滚动效果**:添加JavaScript代码,当用户滚动页面时,为`body`元素添加或移除`scrolled`类,用于实现导航栏的滚动效果。
6. **JavaScript引入**:引入Xiuno BBS所需的所有JavaScript文件,包括:
- 语言文件
- jQuery
- Popper.js(Bootstrap的依赖)
- Bootstrap.js
- Xiuno.js(核心功能)
- 各种插件和工具脚本
7. **后端变量传递**:将后端的一些变量(如调试模式、伪静态状态、论坛板块列表等)传递到前端JavaScript中。
8. **代码美化**:引入Google Code Prettify库,并添加JavaScript代码自动为`pre`标签添加`prettyprint`类,实现代码块的语法高亮和美化。
9. **页面闭合**:闭合`body`和`html`标签。
10. **定时任务**:在页面末尾调用`cron_run()`函数,执行定时任务。
##### footer\_nav.inc.htm
**【修改内容简介】**
将原有的Xiuno BBS页脚部分修改成没有背景颜色、居中显示的样式。
**【本文件内的变量】**
- `$db`:Object类型;代表数据库连接
- *详见footer.inc.htm里的`$db`*
- `$starttime`:float类型;程序开始执行时间
**【代码实现】**
```html
```
**【代码解释】**
1. **页脚结构**:使用`> 我知道,你会觉得这个词不好听,但请注意,这个程序是在2020年10月1日(也就是GitHub更改所有新的Repository的默认分支名称从master改为main)之前发布的。我个人其实更喜欢用“servant”,因为*fate* - `rconf`:array类型;数据库连接配置;**【禁止对外显示】** - 内容同`$db[conf][master]`。 - `errno`:int类型;数据库错误码,如果没有错误是0 - `errstr`:string类型;数据库错误信息,如果没有错误则为空 - `sqls`:array类型;执行的SQL语句;**【禁止对外显示】** - `tablepre`:string类型;数据库表的前缀;**【禁止对外显示】** - `$starttime`:float类型;程序开始执行时间 - `$time`:int类型;现在时间 时间戳 - `$ip`:string类型;当前用户IP地址 - `$useragent`:string类型;当前访客的User Agent值 - `$forumlist`:array类型;完整论坛板块列表 - *详见header\_nav.inc.htm里的`$_forum`* - `$forumarr`:array类型;用户可见的论坛板块简略数组,其中: - 键是板块ID,值是板块名称 - `$fid`:int类型;当前所在的论坛板块ID(用于板块、帖子详情、编辑帖子页面) - `$conf`:Xiuno BBS配置信息(全部页面) - *详见`conf/conf.php`文件* - `$static_version`:string类型;静态资源版本号(全部页面) - `$browser`:array类型;从User Agent中提取的用户浏览器信息数组,不建议完全相信 - `device`:string类型;用户可能使用的设备,取值范围为:`pc, mobile, pad` - `name`:string类型;浏览器名称,取值范围为:`chrome, ie, robot`等 - `version`:int类型;浏览器版本,注意可能为0 -
> 为什么不建议完全相信?因为该变量的内容,也就是`get__browser`函数,是针对中国市场精心设计的。 -
> 代码注释中提及“中国国情下的判断浏览器类型,简直就是五代十国,乱七八糟”,这里的“五代十国”是一种形象化的比喻,用于描述中国市场上浏览器类型多样、判断复杂的情况。 -
> 互联网发展过程中,不同浏览器厂商采用不同的技术标准和内核,同时还存在多种兼容模式,这就使得开发者在判断用户使用的浏览器类型时面临诸多困难,就如同 “五代十国” 时期政治局势混乱、各方势力割据一样。 **【代码实现】** ```html