tommy351/hexo — pull request #467 by chenall (2014-01-25 16:17:25+00:00)
Title: add helper plugins `list_posts`,`get_posts`

使用这两个可以很方便的获取符合条件的文章.

默认参数如下:

```js
{
query:{tags: '',categories: '',operator: ''},
count: 6, //要获取的文章数量
orderby: 'date', //排序依据, 'random' ,代表随机排序.
order: -1, //正反排序, -1 反向,,其它正向.
ulClass: '',
liClass: '',
style: 'list',
separator: ', ',
class: 'post',//ulClass和liClass如果省略时该参数有效,ulClass = class,liClass= class + '-list-item';
}
```
### query参数介绍

加上`query`参数可以根据指定条件进行符合条件的文章.

若设置了`tags`参数,只要文章的标签有其中之一该文章就会被列出来.
` categories` 参数和`tags`参数一样.根据分类查询.

`tags`和` categories` 可以使用字符串(多个使用','分隔)或数组,还可以直接从post中获取,比如posts.tags

注: 为了使用方便,有经过特殊处理,标签和分类查找是不区分大小写的.所以`grub4dos`和`GRUB4DOS`是一样的

`operator` 是操作符号,指定查询条件的关系,默认是'and',每一个查询条件都要符合.如果是'or',就是只要有一个条件符合就行了.

你还可以添加其它查询,比如,以下查找id是8的文章(当然了你需要在文章中设置id的值.)
```
query{id:8}
```
查询参数还可以是一个自定义函数,function(data){return xxxxxx}
这个函数可以自己写,只有一个参数,

比以下例子就可以列出包含字符串"通用"的文章
```
list_posts(query:{title: function(data){return /通用/.test(data)}});
```
通过自定义函数,你可以实现功能更强大的查询;

### 简单应用例子

1. 获取最近更新的8个贴子列表
```js
list_posts({count:8,orderby: "updated",order:-1}
```
2. 获取最近更新的并且有带标签'GRUB4DOS'的贴子
```js
list_posts({count:8,orderby: "updated",order:-1,query:{tags: 'GRUB4DOS'}}
```
3. 在主题中使用,可以根据文章的标签和分类查找相关贴子 #437
`operator` 是 `or` ,所以只要分类或标签有在列表中就行.
```js
list_posts({query{operator:'or', 'tags: item.tags,categories: item.categories}})
```
4. 获取随机贴子列表
```
list_posts({orderby: 'random'})
```

注: 参数可以组合使用,这样很方便提取特定的文章..

以上是list_posts的功能,主要是返回一个网页可显示的列表.

如果你还需要自己处理,这时可以使用`get_posts`

如下,可以获取到包含标签`grub4dos`的所有文章.

```
var posts = get_posts({query:{tags: 'GRUB4DOS'}});
posts.forEach(function(post){
...
})
```