使用artTemplate模板开发网站(node.js + express环境)

news/2024/4/29 22:16:13/文章来源:https://blog.csdn.net/weixin_34281537/article/details/89447985

本文详细说明了如何利用artTemplate模板引擎开发网站,主要是搭配node.js、express环境进行讲解。同时在文章开头会简单介绍了模板、模板引擎概念,以及artTemplate模板引擎的发展史,比较熟悉模板、模板引擎的读者可以跳过这部分。artTemplate的语法将放在文章最后稍作说明,因为语法不是本文的重点所在,可以参考其它文章详细了解语法知识。

为什么要写作这篇文章?

在学习artTemplate模板时,大家自然而然地想到参考artTemplate官方公布的文档,也就是托管在GitHub中的项目的README。然而README中的讲解对于初次接触artTemplate,尤其是对初次接触模板引擎的初学者来说,略显深奥。本文的宗旨,就是详细地描述出使用artTemplate的具体步骤和做法,使初学者可以迅速地看到使用artTemplate所能达到的效果,为进一步学习和使用模板引擎作铺垫。

本文只是将许多参考资料加以整理而已,并不包含全新的思想等。本文中的许多例子,包括文字说明、代码等,也都是引用网络上的现成的。引用较多,在文章最后有列出主要的参考文章。

目录

  • 模板与模板引擎的概念

  • artTemplate模板引擎

  • 作为前端引擎的artTemplate的使用方法

  • 作为后端引擎的artTempalte的使用方法(搭配node.js)

  • artTemplate搭配express使用

  • artTemplate的语法

模板与模板引擎的概念

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎会生成一个标准的HTML文档。模板引擎不属于特定技术领域,它是跨领域跨平台的概念。在Asp下有模板引擎,在PHP下也有模板引擎,在C#下也有,甚至JavaScript、WinForm开发都会用到模板引擎技术。

模板引擎按实现方式,可以分类“置换型引擎 ”、“解释型引擎 ”、“编译型引擎 ”三类。
置换型引擎只是将指定模板内容(字符串)中的特定标记(子字符串)替换一下便生成了最终需要的业务数据,它实现简单,但其效率低下,无法满足高负载的应用需求。
模板引擎按运行在客户端还是运行在服务器端,可以分为“前端引擎”、“后端引擎”两类。

模板引擎可以让(网站)程序实现界面与数据分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。我们司空见惯的模板安装卸载等概念,基本上都和模板引擎有着千丝万缕的联系。模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。

artTemplate模板引擎

artTemplate是一款性能卓越的 javascript 模板引擎。它采用预编译方式让性能有了质的飞跃,并且充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现。除了性能优势外,调试功能也值得一提。模板调试器可以精确定位到引发渲染错误的模板语句,解决了编写模板过程中无法调试的痛苦,让开发变得高效,也避免了因为单个模板出错导致整个应用崩溃的情况发生。

artTemplate引擎 原本是这原本是腾讯内部公用组件之一,现已在MIT、BSD、GPL协议下开源,广大群众都可以使用了。

artTemplate引擎属于“前端引擎”同时又属于“后端引擎”,还支持预编译。

目前artTemplate的版本是3.0.3,可以从https://github.com/yourcaptai... 获得源码(forked from aui/artTemplate)。

作为前端引擎的artTemplate的使用方法

artTemplate作为前端引擎使用,上手特别快。
主要步骤有,下载template.js,制作模板,渲染模板。接下来一一详细说明。

首先需要下载
template.js (简洁语法版, 2.7kb)

然后是创建一个html文件,比如创建一个名为sample.html的文件。
我们将在其中嵌入模板。
该html文件可以比较简单如下,在头文件中引用刚刚下载的template.js(注意引用路径须根据你的环境下该文件所存放的路径进行适当调整),然后再正文中放置一个id为content的div标签(也可以是其它块标签),用来存放接下来根据模板动态生成的html内容。

<html><head><meta charset=”UTF-8″><title>basic-demo</title><script src=”template.js”></script>
</head>
<body><div id=”content”></div></body>
</html>

然后是制作模板:
本例使用一个type=”text/html”的script标签存放模板,&lt;script&gt;</script&gt;标签中包含的部分是模板本身,&lt;script&gt;</script&gt;标签只是用来存放模板的容器。

将模板内容放到&lt;script&gt;</script&gt;标签只是为了容易引用这些模板内容,
后面你将看到不将模板内容放到&lt;script&gt;</script&gt;标签中而是在javascript中以字符串的形式存放模板。

<!– 模板 –>
<script id=”test” type=”text/html”>
<h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul>
</script>

这样sample.html将变为如下样子

<html><head><meta charset=”UTF-8″><title>basic-demo</title><script src=”template.js”></script>
</head><body><div id=”content”></div><!– 模板 –><script id="test" type="text/html"><h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul></script>
</body>
</html>

然后是渲染模板的工作
即将数据等应用到模板上,以得到最终显示的效果(html文档)。

渲染模板的代码如下:

var data = {
title: '标签',
list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
};
var html = template('test', data);
document.getElementById(‘content’).innerHTML = html;

渲染代码中用到了template(id, data)方法,该方法是在template.js文件中定义的。
template(id, data) 方法根据 id 渲染模板。内部会根据document.getElementById(id)查找模板。
如果没有 data 参数,那么将返回一渲染函数。
此时知道为什么要把模板放在&lt;script&gt;标签中了吧,因为渲染模板时,template可以根据&lt;script&gt;标签的id来查找模板啦。

这样sample.html将变为如下样子

<html><head><meta charset=”UTF-8″><title>basic-demo</title><script src=”template.js”></script>
</head><body><div id=”content”></div><!– 模板 –><script id="test" type="text/html"><h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul></script><!– 渲染模板 –><script>var data = {title: ‘标签’,list: [‘文艺’, ‘博客’, ‘摄影’, ‘电影’, ‘民谣’, ‘旅行’, ‘吉他’]};var html = template(‘test’, data);document.getElementById(‘content’).innerHTML = html;</script>
</body>
</html>

然后在浏览器中打开sample.html,就会看到由artTemplate根据给定的数据将模板渲染成功的样子了。
http://aui.github.io/artTempl...

作为后端引擎的artTempalte的使用方法(搭配node.js)

artTemplate不仅可以作为前端引擎,还可以作为后端引擎使用。
artTemplate是出色的javascript引擎,搭配出色的javascript运行时环境node.js一起使用,将会非常顺畅。
所以要求读者需掌握node.js的基础知识。
本小节将详细说明node.js环境下artTemplate的使用方法,包括安装node.js、创建工作区、初始化工作区、使用npm安装NodeJS版artTemplate、创建http服务器框架、编写artTemplate模板、渲染模板

安装node.js 和 npm

可参考官方文档:https://nodejs.org/en/download/
安装最新版的node.js时会自动同时安装npm。
此处读者需掌握node.js和npm基础知识

创建工作区
创建工作区,就是指定一个空文件夹,作为工作区。 假定我们的工作区的目录名叫“myWork”,MS windows操作系统下,可以放到公共文档目录下“C:UsersPublicDocumentsmyWork”,Linux等操作系统下请自行在可用的目录下创建“myWork”文件夹。
然后进入工作区,即进入“myWork”文件夹。

初始化工作区

进入工作区,即进入“myWork”文件夹,然后执行以下命令,依据提示填入信息即可。MS Windows下可在命令行工具中进行。Linux下请注意确认是否需要root权限。
此处读者需掌握node.js和npm基础知识

npm init

执行完毕后,工作区下会出现一个package.json文件。

使用npm安装NodeJS版artTemplate
此处读者需掌握node.js和npm基础知识
进入工作区,即进入“myWork”文件夹,然后执行以下命令。MS Windows下可在命令行工具中进行。Linux下请注意确认是否需要root权限。

npm install art-template --save

执行完毕后,工作区下会出现一个node_modules文件夹。

创建http服务器框架
然后我们创建一个最简单的http服务器框架。
此处读者需掌握node.js和npm基础知识

进入工作区,即进入“myWork”文件夹,然后执行以下命令。MS Windows下可在命令行工具中进行。
然后新建文件:server.js
编写代码如下:

var http = require(“http”);
var os = require(“os”);
http.createServer(function(request, response) {console.log(“New request arrived.”);response.end();
}).listen(3000);
console.log(“Server is running, listening on port 3000….”);

在Windows命令行下,进入工作区,执行 node server.js ,服务器就启动了。
此时在本地机器上使用浏览器访问http://localhost:3000将不会收到任何返回信息,不过服务器端的命令行工具上会显示“New request arrived.”字样。
Ctl+C退出服务器

编写artTemplate模板

在工作区下,创建index.html,并将如下代码输入index.html,并保存。
其中&lt;ul&gt;标签中的内容,就是模板代码。

<html>
<head>
<meta charset=”utf-8″>
<title>模板</title>
</head><body><div id=”main”><ul>{{each list}}<li>编号:{{$value.id}} &nbsp;&nbsp;姓名:{{$value.name}}</a></li>{{/each}}</ul></div>
</body>
</html>

渲染模板

现在,我们要改造刚才创建的创建http服务器框架。在response.end()调用之前,加上渲染模板的代码,使得服务器框架代码变为如下的样子。

var http = require(“http”);
var os = require(“os”);
http.createServer(function(request, response) {
console.log(“New request arrived.”);var template = require(‘art-template’);//数据var data = {list: [{id:’1′, name:’张三’}, {id:’2′, name:’李四’}]};//渲染模板var html = template(‘./index’, data);response.writeHead(200, {“Content-Type”: “text/html”});
response.write(html);
response.end();
}).listen(3000);
console.log(“Server is running, listening on port 3000….”);

还记得template(id, data)方法吗?这是在前端DOM环境下的用法。 其实在NodeJS环境下,它就相当于template(filename, data)了,可以将需要渲染的模板文件名当作路径传给它的第一个参数。

在Windows命令行下,进入工作区,执行 node server.js ,服务器就启动了。
此时在本地机器上使用浏览器访问http://localhost:3000将会看到Html输出了,服务器端的命令行工具上同时也会显示“New request arrived.”字样。

Ctrl+C退出服务器

artTemplate搭配express使用

express框架是由javascript语言开发的,基于Node.js平台的,快速、开放、极简的web开发框架。

安装express

express中文网上有详尽的安装手册,可以参考:http://www.expressjs.com.cn/s...

改造app.js

app.js是express的主要文件,这个文件里包含了指定模板引擎、指定视图文件默认路径的代码。需要将指定模板引擎的代码改为指定用art-template引擎。视图文件默认路径保持不变,因此无需改动。

     //——————————————start //——————————————end  

围起来的区域,是新增的内容。
代码app.set(‘view engine’, ‘jade’); 这一行是app.js默认的内容,需要注释掉,因此在前面加上了//注释符。
代码最后的“app.listen(3000);”必须加上,否则服务启动后将不会监听任何端口。
express3.0以上版本默认框架中不再包含监听端口的代码了。

//app.jsvar express = require(‘express’);
var path = require(‘path’);
var favicon = require(‘serve-favicon’);
var logger = require(‘morgan’);
var cookieParser = require(‘cookie-parser’);
var bodyParser = require(‘body-parser’);//——————————————start
//引用artTemplate模块
var template = require(‘art-template’);
//——————————————endvar routes = require(‘./routes/index’);
var users = require(‘./routes/users’);var app = express();
// view engine setup
app.set(‘views’, path.join(__dirname, ‘views’));
//——————————————start
//用art-template引擎替换默认的jade引擎
//app.set(‘view engine’, ‘jade’);
template.config(‘base’, ”);
template.config(‘extname’, ‘.html’);
app.engine(‘.html’, template.__express);
app.set(‘view engine’, ‘html’);
//——————————————end// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, ‘public’, ‘favicon.ico’)));
app.use(logger(‘dev’));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, ‘public’)));app.use(‘/’, routes);
app.use(‘/users’, users);// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error(‘Not Found’);
err.status = 404;
next(err);
});// error handlers// development error handler
// will print stacktrace
if (app.get(‘env’) === ‘development’) {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render(‘error’, {
message: err.message,
error: err
});
});
}// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render(‘error’, {
message: err.message,
error: {}
});
});module.exports = app;app.listen(3000);

编写artTemplate模板

在工作区下,进入express文件夹中的views子文件夹,创建index.html,并将如下代码输入index.html,并保存。

注意,views文件夹下会有index.jade等三个后缀是.jade的文件存在,可以忽视它们。因为express默认支持的模板引擎是jade,所以初始化的框架中的模板是以.jade结尾的文件。也可以删除它们。

其中&lt;ul&gt;标签中的内容,就是模板代码。

<html>
<head>
<meta charset=”utf-8″>
<title>模板</title>
</head><body><div id=”main”><ul>{{each list}}<li>编号:{{$value.id}} &nbsp;&nbsp;姓名:{{$value.name}}</a></li>{{/each}}</ul></div>
</body>
</html>

渲染模板

express默认访问index路由。我们需要在index路由方法中,渲染模板。

进入routes文件夹,打开index.js,增加渲染模板的代码,如下:

var express = require(‘express’);
var router = express.Router();router.get(‘/’, function(req, res, next) {//数据var data = {title: ‘国内要闻’,time: (new Date).toString(),list: [{id: ‘1’,name: ‘张三’},{id: ‘2’,name: ‘李四’}]};//渲染模板res.render(‘index’, data);});module.exports = router;

代码中的res.render(‘index’, data)调用,会调用artTemple模块中的template.__express方法,并传入模板文件名、数据。
template.__express方法是在app.js中注册给express框架的。

在Windows命令行下,进入工作区,执行 node app.js ,服务器就启动了。
此时在本地机器上使用浏览器访问http://localhost:3000将会看到Html输出了,服务器端的命令行工具上同时也会显示“New request arrived.”字样。

Ctl+C退出服务器

artTemplate的语法

以下是语法的简单说明。
简洁语法 —— artTemplate的开发者推荐使用简洁语法,简单实用,利于读写。
template.js (简洁语法版, 2.7kb)
{{if admin}}
{{include 'admin_content'}}{{each list}}
<div>{{$index}}. {{$value.user}}</div>
{{/each}}
{{/if}}

简洁语法详细说明:https://github.com/aui/artTem...

原生语法
template-native.js (原生语法版, 2.3kb)
<%if (admin){%>
<%include('admin_content')%><%for (var i=0;i<list.length;i++) {%>
<div><%=i%>. <%=list[i].user%></div>
<%}%>
<%}%>

原生语法详细说明:https://github.com/aui/artTem...

后记

本文是依据作者的实践经验整理而成。
作者的开发环境如下

  • windows 7 64bit 中文版

  • node.js 0.12.7

  • npm 2.11.3

  • express 4.13.1

文中的代码如在读者本地无法运行,请检查运行环境与作者的是否一致,不一致的话,请参考各工具版本间的变化,对代码加以修正。

如发现文中错误还请不吝赐教。

作者联系方式:yuan_aiqing@outlook.com 袁艾青

参考资料

artTemplate的Github托管
JS模板引擎介绍搜集
高性能JavaScript模板引擎原理解析
百度百科-模板引擎
为Express开发模板引擎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_760534.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python作业网站_怒刷python作业-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

以下作业题仅为参考答案 为了锻炼思维的目的 所有的底层操作都是独立实现 尽量少的引包 大家对题有更好的思路和更方便的包欢迎大家多多留言 祝愿大家共同进步1 hello word 略… 2A B A int(input())B int以下作业题仅为参考答案&#xff0c;为了锻炼思维的目的&#xff0c;所有…

linux服务器运行程序shell脚本,linux怎么执行shell脚本_网站服务器运行维护

linux如何查看防火墙是否开启_网站服务器运行维护linux查看防火墙是否开启的方法是&#xff1a;1、首先&#xff0c;执行【cd /etc/init.d/】命令&#xff0c;进入init.d目录&#xff1b;2、然后&#xff0c;执行【/etc/init.d/iptables status】命令查看防火墙状态即可。Linux…

奇奇seo优化软件_上饶seo快速优化软件手段

手段seope4c65快速优化软件上饶&#xff0c;随着网络推广方式的快速更新&#xff0c;企业网络推广部门每次都会尝试一种新的推广方式&#xff0c;效果很好。事实上&#xff0c;新的网络推广方式可能并不适合企业。因为不同的企业适合不同的网络推广方式&#xff0c;你尝试太多是…

autojs打包apk源码提取_最新女神直播间付费观看网站源码+视频教程

最新女神直播间付费观看网站源码视频教程、最新女神大秀直播间打赏视频an雷付费观看网站源码 自带直播数据这个大秀直播间的界面什么的都非常诱人&#xff0c;这个东西不便多说&#xff0c;已经全部打包。老司机明白就行。源码已测试无任何bug&#xff0c;完美搭建。里面附带了…

连筋字体在线生成_不会字体设计?有这6个在线字体生成网站就够了

各种设计好的字体样式&#xff0c;非常适用各种活动海报设计与商品促销场景&#xff0c;艺术字体生成器是一个自动生成字体的网站&#xff0c;直接选字体&#xff0c;以及字体大小&#xff0c;还有背景https://www.qt86.com/​可以在先预览效果&#xff0c;更改颜色&#xff0c…

https协议 ppt 下载卷_六个免费PPT模板下载网站(建议收藏!)

关于学习PPT的制作技巧&#xff0c;很大一部分原因莫过于为了效率&#xff0c;那么制作PPT效率最快的方式就是套模板了。我目前了解大概十个左右免费下载的PPT模板网站&#xff0c;但是质量参差不齐&#xff0c;通过自己亲测下载过程&#xff0c;筛选出六个&#xff0c;分享给大…

腾讯旗下网站的很多URL都包含“cgi-bin”,是什么意思?他们后台用什么语言?...

cgi-bin 这很有可能说明后台是C/C写的. 动态Web技术刚出来的时候, 服务器调用本地应用程序处理http请求的技术. 通常是C/C程序. 后来有了新的web开发技术后这类用的就比较少了. url后缀有个经验. php asp结尾的顾名思义可以知道是什么语言写的 .do .action .jsp 通常是java技术…

如何使用阿里云搭建个人网站

国内比较早的几个个人网站有阮一峰、月光博客等。他们都会定期的更新一些文章&#xff0c;阮一峰的更新频率大概在每月4篇&#xff0c;月光博客每天一篇。他们每天的浏览量在2万以上&#xff0c;每月最低收入都在2万以上。作为一个程序员&#xff0c;我一直想给自己找点事情做。…

蓝色给自己的网站加一个好看的跳转页面代码

新建一个文本文档&#xff0c;然后重命名为index.html 复制代码粘贴进去&#xff0c;找到本站地址www.12580sky.com替换成你要跳转的地址就可以了。 <html> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8">&…

十年建站老司机带你十分钟搭建网站

本文概要&#xff1a; 1. 域名 域名注册 域名备案 域名解析绑定 2. 服务器 虚拟主机 windows服务器 linux服务器 3. CMS建站系统 4. 总结 在如今互联网发展迅速猛进的大环境下&#xff0c;网站已经成为一个企业不可缺少的网络媒介。但网站开发行业鱼龙混杂&a…

非常牛逼的橙色的app租房网站商城手机站模板html整站

非常牛逼的橙色的app租房网站商城手机站模板html整站 gif动图 源码下载地址http://www.zuidaima.com/share/3608793364532224.htm

【使用DIV+CSS重写网站首页案例】CSS选择器

使用表格<table></table>对网站首页进行布局有缺陷&#xff0c;不能拖动版块&#xff0c;不灵活。 DIV Div是一个html的标签&#xff0c;单独使用没有意义&#xff0c;必须结合CSS使用&#xff1b; 是一个块级元素&#xff0c;单独占一行&#xff1b; 它主要用于页…

【使用DIV+CSS重写网站首页案例】CSS引入方式

CSS引入方式&#xff08;3种&#xff09; *就近原则&#xff1a;行内引入可以覆盖内部引入的效果 内部引入&#xff1a;* type"text/css" 为默认可以不写 例子&#xff1a; 1 <!DOCTYPE html>2 <html>3 4 <head>5 <meta char…

【使用DIV+CSS重写网站首页案例】CSS浮动

CSS浮动&#xff1a; 浮动的框可以向左或向右移动&#xff0c;直到它的外边缘碰到包含框或另一个浮动框的边缘为止 由于浮动框不在文件的普通流中&#xff0c;所以文档的普通流中的块框表现得就像浮动框不存在一样。 选择器之 float属性: left&#xff1a;向左移动 right&#…

【使用DIV+CSS重写网站首页案例】CSS盒子模型

CSS盒子模型 取值问题&#xff1a; 默认情况&#xff0c;padding、border、margin都为0&#xff1b; 设定区域内容的width和height&#xff0c;是区域内容框的尺寸&#xff1b; 如果设定padding/border/margin&#xff0c;weight和height要减去相应值&#xff0c;保证总尺寸不变…

【使用DIV+CSS重写网站首页案例】步骤分析与代码实现

使用DIVCSS重写网站首页案例 步骤分析&#xff1a; 第一步&#xff1a;先定义一个大的 div&#xff08;整个页面&#xff09;&#xff0c;然后嵌套 8 个小的 div&#xff08;共八行&#xff09;&#xff1b;第二步&#xff1a;(第一行)在第一个 div 里面嵌套 3 个小的 div&…

简易网站栏目解决方案(附代码)

虽然是购物系统&#xff0c;但由于没有具体需求&#xff0c;只能多加几个诸如最新动态&#xff0c;精品推荐&#xff0c;近期公告&#xff0c;热点问答等小栏目上去凑数了&#xff01;为了能更高效的制作管理站点&#xff0c;经过多番思考设计了栏目及栏目类别关系模式&#xf…

zz.NET开发人员必知的八个网站

当前全球有数百万的开发人员在使用微软的.NET技术。如果你是其中之一&#xff0c;或者想要成为其中之一的话&#xff0c;我下面将要列出的每一个站点都应该是你的最爱&#xff0c;都应该收藏到书签中去。 对于不熟悉.NET技术的朋友&#xff0c;需要说明一下&#xff0c;.NET提供…

父级元素绑定定mouseout和mouseover,移过子元素是都会触发

2019独角兽企业重金招聘Python工程师标准>>> mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素&#xff0c;都会触发 mouseover 事件。 只有在鼠标指针从元素外穿入被选元素&#xff08;到元素内&#xff09;时&#xff0c;才会触发 mouseenter 事件。 mo…

一个绝佳的学习网站技术的网站——w3school

上个月无意中进入一个网站&#xff0c;看到里面还有挺多教程的&#xff0c;不管三七二十一&#xff0c;先收藏先。进去尝试一下w3school&#xff0c;感觉非常的棒。 首先它提供整套的网站架设技术的培训教程&#xff0c;从html->css->javaScript->php->SQL->.ne…