2021SC@SDUSC
view/home/index_index.html
上一篇博客介绍了主页的模板继承部分,下面让我们回到index_index.html
。HTML文件的主要作用是界定界面元素,这一部分让我们暂且跳过,我们的重点是分析HTML文件调用了哪些文件。
{%topic data = "slider",limit= "5",position='home',issub="1"%}
{%for val in slider%}
{%if val.model_id==4%} {% set pic = val.pics|strToArray%}{%else%}{%set pic = val.cover_id%}{%endif%}
这一段起到了设置主题图片的作用。其他调用具体数据的也大体和这一段类似。
src/controller/home/index.js
async indexAction() {
// let p = this.get();
// return this.body="dfdfdfd";
// let ss = think.service("geetest");
// let sss = new ss();
// console.log(this.config("view").nunjucks.extname);
// auto render template file index_index.html
this.meta_title = '首页';// 标题1
this.keywords = this.config('setup.WEB_SITE_KEYWORD') ? this.config('setup.WEB_SITE_KEYWORD') : '';// seo关键词
this.description = this.config('setup.WEB_SITE_DESCRIPTION') ? this.config('setup.WEB_SITE_DESCRIPTION') : '';// seo描述
this.active = ['/', '/index', '/index.html'];
// 首页内容钩子
await this.hook('hometitle');
await this.hook('homelist');
// 右边的钩子
await this.hook('homeright');
}
这里是定义钩子和变量赋值。
if (this.isMobile) {
const map = {
'pid': 0,
'status': 1
};
// 排序
const o = {};
let order = this.get('order') || 100;
// console.log(order);
order = Number(order);
switch (order) {
case 1:
o.update_time = 'ASC';
break;
case 2:
o.view = 'DESC';
break;
case 3:
o.view = 'ASC';
break;
default:
o.update_time = 'DESC';
}
依旧和之前一样是判断浏览客户端,这里还写了一段排序。
this.assign('order', order);
const data = await this.model('document').where(map).page(this.get('page'), 10).order(o).countSelect();
this.assign('list', data);
// console.log(data);
if (this.isAjax('get')) {
for (const v of data.data) {
if (!think.isEmpty(v.pics)) {
const arr = [];
for (const i of v.pics.split(',')) {
arr.push(await get_pic(i, 1, 300, 300));
}
v.pics = arr;
}
if (!think.isEmpty(v.cover_id)) {
v.cover_id = await get_pic(v.cover_id, 1, 300, 169);
}
if (!think.isEmpty(v.price)) {
if (!think.isEmpty(get_price_format(v.price, 2))) {
v.price2 = get_price_format(v.price, 2);
}
v.price = get_price_format(v.price, 1);
}
v.uid = await get_nickname(v.uid);
v.url = get_url(v.name, v.id);
v.update_time = this.moment(v.update_time).fromNow();
}
return this.json(data);
}
return this.display(this.mtpl());
} else {
// debugger;
// console.log(think.datetime(new Date(), "YYYY-MM-DD"));
await this.hook('homeEnd');
return this.display();
}
最长的最复杂的一段。这部分让我们了解一下JQuery中使用Ajax发送GET。https://thinkjs.org/zh-cn/doc/3.0/context.html#toc-677提到了这一问题:判断是否是 ajax 请求(通过 header 中 x-requested-with 值是否为 XMLHttpRequest 判断),如果执行了 method,那么也会判断请求类型是否一致。
总结
通过最近的几次分析,大概对纯前端HTML页面和后台如何交互产生了认知。之后的分析我们将会回归核心逻辑部分,对JS文件的纯逻辑分析将会增加。