【20211124】CmsWing代码分析 - src/controller/home/cover.js

该博客主要解析了JavaScript代码中关于封面处理的控制器,涉及分类获取、用户权限检查、客户端适配及SEO元素设置。通过`module.exports`导出类,实现了频道页的indexAction,包括从URL获取分类ID、获取内容及权限验证。同时,针对不同客户端展示不同模板,并设置了页面的标题、关键词和描述。代码还展示了如何获取面包屑导航信息。
摘要由CSDN通过智能技术生成

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的内容很朴素地有一个获取的部分,有一个判断用户权限的部分,有一个判断客户端情况的部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值