2021SC@SDUSC
src/controller/home/cover.js
cover是英语单词,词性为动词和名词,意为“遮盖,掩蔽,涉及,包含,洒土;覆盖物,避难所,掩护,封面”。
根据名称推测,应该是和封面相关的代码。当然也有可能是遮蔽的意思,究竟是什么就只能看看后面的代码了。
module.exports = class extends think.cmswing.home {};
module.exports 对象是由模块系统创建的。在我们自己写模块的时候,需要在模块最后写好模块接口,声明这个模块对外暴露什么内容,module.exports 提供了暴露接口的方法。
整个文件里只包含这一个赋值操作。module.exports在上一篇中已经提及了,如果还是不明白可以看这一篇,讲述了用法https://blog.csdn.net/xqnode/article/details/60610885
// 频道页
async indexAction() {
const get = this.get('category') || 0;
let id = 0;
const query = get.split('-');
if (get !== 0) {
id = query[0].slice(1);
}
注释说这是频道页。index的动作,索引相关。首先是get到了category,即分类;然后使用-进行分割,最后再定出id。
let cate = await this.category(id);
cate = think.extend({}, cate);
关于let关键字的用法参见此处:https://www.w3school.com.cn/js/js_let.asp。使用 let 关键字重新声明变量可以解决这个问题。在块中重新声明变量不会重新声明块外的变量。也就是说,在这一段重新声明了一个叫做cate的变量,并且不影响其他可能存在的cate变量。
await关键字在上次也已经讨论过用法了。cate是category的简写,因此我们猜测实际上是根据id获得内容并处理。对于extend的运用可以参见此处https://blog.csdn.net/qq_40994734/article/details/107074709
let roleid = 8;// 游客
// 访问控制
if (this.is_login) {
roleid = await this.model('member').where({id: this.is_login}).getField('groupid', true);
}
const priv = await this.model('cmswing/category_priv').priv(cate.id, roleid, 'visit');
if (!priv) {
const error = this.controller('cmswing/error');
return error.noAction('您所在的用户组,禁止访问本栏目!');
}
访问控制部分。roleid指的是用户的角色。首先是检查是否登录,未登录时roleid即用户身份就是8(游客),如果登录,就在成员模型里找到用户的身份。之后一行的priv是检查用户的这个身份组能否通过对这个栏目的访问。如果不能,就报错,返回一个noAction。
this.meta_title = cate.meta_title ? cate.meta_title : cate.title; // 标题
this.keywords = cate.keywords ? cate.keywords : ''; // seo关键词
this.description = cate.description ? cate.description : ''; // seo描述
获取标题,关键字和描述。注释里的seo是什么呢?另外是我们或许熟悉的三元表达式,写成这样确实简练了不少。
// 频道页只显示模板,默认不读取任何内容
// 内容可以通过模板标签自行定制
// 获取面包屑信息
const breadcrumb = await this.model('cmswing/category').get_parent_category(cate.id, true);
this.assign('breadcrumb', breadcrumb);
/* 模板赋值并渲染模板 */
this.assign('category', cate);
let temp = cate.template_index ? `${cate.template_index}` : `index`;
注释说的很好,这里是获取面包屑信息。面包屑是什么?我们可以看看这里讲解的动态面包屑https://zhuanlan.zhihu.com/p/71744331,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级。
// 判断浏览客户端
if (this.isMobile) {
temp = cate.template_m_index ? `${cate.template_m_index}` : `index`;
return this.display(`home/mobile/cover_${temp}`);
} else {
return this.display(`home/cover_${temp}`);
}
很常用的一个方式,判断浏览客户端,从而展示不同的内容。怎么判断是否是移动端呢?其实有一个简单的JS库可以使用,链接在这里https://blog.csdn.net/weixin_34319640/article/details/85725894
总结
cover.js的内容很朴素地有一个获取的部分,有一个判断用户权限的部分,有一个判断客户端情况的部分。