2021SC@SDUSC
该方法用于获取参数的所有父级导航。
该方法只有一个参数 id ,是导航id。方法返回值为 array ,是参数导航和导航的信息集合。
查找 id 为参数数值、状态 status 为1的单条信息,将查找到的信息赋值给 nav 并push到数组 breadcrumb 中,然后把 nav 的 pid 赋值给id。此操作将一直进行下去,直到 id = 0 ,最后得到数组 breadcrumb。
reverse() 方法是 JavaScript 中 array 的方法,用于反转数组中元素的顺序。最后使用 reverse() 方法翻转一下数组 breadcrumb,方法返回翻转后的数组 breadcrumb。
async get_parent_channel(id) {
const breadcrumb = [];
while (id != 0) {
const nav = await this.where({'id': id, 'status': 1}).find();
breadcrumb.push(nav);
id = nav.pid;
}
return breadcrumb.reverse();
}
此方法用于缓存频道信息。
方法体很简单,缓存的名称为 ‘get_channel_cache’ ,缓存的内容是通过方法 get_channel() 得到的(此方法在下面会分析),缓存的有效时间为(365243600)ms。
async get_channel_cache() {
const channel = await think.cache('get_channel_cache', () => {
return this.get_channel(0);
}, {timeout: 365 * 24 * 3600});
return channel;
}
此方法用于获取分类树。
此方法只有一个参数 id ,是分类id。若参数指定分类,方法返回指定分类及其子分类,不指定则返回所有分类树。此方法与上一篇中的 gettree() 方法大同小异,不再赘述。
async get_channel(id) {
id = id || 0;
const map = {'status': {'>': -1}};
let list = await this.where(map).order('sort ASC').select();
for (const v of list) {
let name = 0;
if (v.url.indexOf('http://') == -1 || v.url.indexOf('https://') == -1) {
if (!think.isEmpty(v.url) && think.isString(v.url)) {
name = v.url.split('/')[1];
if (!think.isNumberString(name) && !think.isEmpty(name)) {
name = await this.model('category').where({name: name}).getField('id', true);
}
}
}
if (name != 0 && !think.isEmpty(name)) {
const subcate = await this.model('cmswing/category').get_sub_category(name);
subcate.push(name);
v.on = subcate;
}
}
list = get_children(list, id);
const info = list;
return info;
}
此方法用于更新或编辑信息。
此方法只有一个参数 data ,是需要进行更新或编辑的信息。
首先判断 data 是否为空,若 data 为空,方法无法进行,方法结束,返回 false;data 不为空,方法继续。判断 data.id 是否为空:若为空,说明数据为新数据,需要进行添加操作;若不为空,说明数据为需要更新的数据,进行更新操作。最后更新频道缓存信息,方法结束。
async updates(data) {
if (think.isEmpty(data)) {
return false;
}
let res;
let obj;
if (think.isEmpty(data.id)) {
data.status = 1;
data.create_time = new Date().getTime();
res = await this.add(data);
if (res) {
obj = {id: res, err: 1};
} else {
obj = {err: 2};
}
} else {
data.update_time = new Date().getTime();
res = await this.update(data);
if (res) {
obj = {id: res, err: 3};
} else {
obj = {err: 4};
}
}
await update_cache('channel');
return obj;
}
};