xtpl
Version:
nodejs wrapper around xtemplate engine
243 lines (195 loc) • 5.31 kB
Markdown
# xtpl
nodejs wrapper around [xtemplate](https://github.com/xtemplate/xtemplate) engine (easier for expressjs and koajs)
[](https://npmjs.org/package/xtpl)
[](https://npmjs.org/package/xtpl)
[](https://travis-ci.org/xtemplate/xtpl)
[](https://coveralls.io/r/xtemplate/xtpl?branch=master)
[](https://gemnasium.com/xtemplate/xtpl)
## docs
### syntax
refer: https://github.com/xtemplate/xtemplate
### api
#### methods
##### config or get xtpl global option:
```javascript
Object config(option:Object)
```
option details:
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="width: 100px;">name</th>
<th style="width: 50px;">type</th>
<th style="width: 50px;">default</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoding</td>
<td>String</td>
<td>utf-8</td>
<td>xtpl file encoding</td>
</tr>
<tr>
<td>XTemplate</td>
<td>Object</td>
<td>require('xtemplate')</td>
<td>xtemplate module value</td>
</tr>
</tbody>
</table>
if options is undefined, then this method will return global config.
##### render file
```javascript
void renderFile(path:String, options:Object, callback:function)
```
parameter details:
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="width: 100px;">name</th>
<th style="width: 50px;">type</th>
<th style="width: 50px;">default</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td>path</td>
<td>String</td>
<td></td>
<td>xtpl template file</td>
</tr>
<tr>
<td>option</td>
<td>Object</td>
<td></td>
<td>
data to be rendered. the following properties will be used for control.
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="width: 100px;">name</th>
<th style="width: 50px;">type</th>
<th style="width: 50px;">default</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td>cache</td>
<td>Boolean</td>
<td>false</td>
<td>whether cache xtpl by path</td>
</tr>
<tr>
<td>setting['view encoding']</td>
<td>String</td>
<td>global encoding</td>
<td>encoding for read xtpl files</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>callback</td>
<td>function</td>
<td></td>
<td>callback</td>
</tr>
</tbody>
</table>
```
npm install xtpl xtemplate --save
```
```javascript
var xtpl = require('xtpl');
xtpl.renderFile('./x.xtpl',{
x:1
},function(error,content){
});
```
##### express adaptor
```javascript
xtpl.__express = xtpl.renderFile
```
##### clear cache
clear xtemplate cache cached by xtpl file path
```javascript
void clearCache(path:String);
```
### use for expressjs
```javascript
var app = require('express')();
app.set('views','./views');
app.set('view engine', 'xtpl');
app.use(function(req, res){
res.render('test',{data:1});
});
```
### use for koa
```javascript
var app = require('xtpl/lib/koa2')(new require('koa')(),{
views:'./views'
});
app.use(async function(ctx){
await ctx.render('test',{data:1});
});
```
## Example
├── footer.xtpl
├── header.xtpl
├── index.xtpl
├── layout.xtpl
├── layout1.xtpl
└── sub
└── header.xtpl
index.xtpl
{{extend ("./layout1")}}
{{#block ("head")}}
<!--index head block-->
<link type="text/css" href="test.css" rev="stylesheet" rel="stylesheet" />
{{/block}}
{{#block ("body")}}
<!--index body block-->
<h2>{{title}}</h2>
{{/block}}
layout1.xtpl
<html>
<head>
<meta name="charset" content="utf-8" />
<title>{{title}}</title>
{{{block ("head")}}}
</head>
<body>
{{{include ("./header")}}}
{{{block ("body")}}}
{{{include ("./footer")}}}
</body>
</html>
render
res.render("index", {title: "xtpl engine!"})
output
<html>
<head>
<meta name="charset" content="utf-8" />
<title>xtpl engine!</title>
<!--index head block-->
<link type="text/css" href="test.css" rev="stylesheet" rel="stylesheet" />
</head>
<body>
<h1>header</h1>
<h2>sub header</h2>
<!--index body block-->
<h2>xtpl engine!</h2>
<h1>footer</h1>
</body>
</html>
## changelog
https://github.com/xtemplate/xtpl/milestones
## License
xtpl is released under the MIT license.