如何为搜索创建自定义 ghost api
How to create custom ghost api for search
想在 ghost cms 中实现搜索表单。
Visitors/user 必须能够在 post、作者和标签中搜索。
如果可能的话,一些 REST api 查询 ghost db 和 return 像其他 public ghost api 一样的结果。例如api 下面获取所有 post 包括标签和作者。
ghost.url.api('posts', 'slug', mySlugVariable, {include: 'tags, author'});
所以,我想要这样的东西,我可以在其中传递一些字符串并从数据库中获取所有匹配的数据。
我用js解决了。实际上,我没有找到任何好的解决方案,我向他们的 slack 组中的 ghost 团队提出了问题,他们建议我使用 js 解决这个问题。这就是我所做的:
Api call
$.get(
ghost.url.api('posts', { include: 'tags, author' }))
.done(function(data) {
localStorage.setItem('posts', JSON.stringify(data));
})
.fail(function(err) {
console.log(err);
});
saved all data to localStorage
localStorage.setItem('posts', JSON.stringify(data));
as user typed something in search form, I grab that search string and filter the data corresponding to that string.
// get search results
function getSearchResult(string) {
var postData = JSON.parse(localStorage.getItem('posts'));
var searchResults = postData.posts.filter(function(post) {
return post.markdown.match(string)
|| post.title.match(string)
|| post.author.name.match(string);
});
renderSearchResults(searchResults);
}
then render result accordinging
function renderSearchResults(posts) {
// my render code
}
想在 ghost cms 中实现搜索表单。 Visitors/user 必须能够在 post、作者和标签中搜索。 如果可能的话,一些 REST api 查询 ghost db 和 return 像其他 public ghost api 一样的结果。例如api 下面获取所有 post 包括标签和作者。
ghost.url.api('posts', 'slug', mySlugVariable, {include: 'tags, author'});
所以,我想要这样的东西,我可以在其中传递一些字符串并从数据库中获取所有匹配的数据。
我用js解决了。实际上,我没有找到任何好的解决方案,我向他们的 slack 组中的 ghost 团队提出了问题,他们建议我使用 js 解决这个问题。这就是我所做的:
Api call
$.get(
ghost.url.api('posts', { include: 'tags, author' }))
.done(function(data) {
localStorage.setItem('posts', JSON.stringify(data));
})
.fail(function(err) {
console.log(err);
});
saved all data to
localStorage
localStorage.setItem('posts', JSON.stringify(data));
as user typed something in search form, I grab that search string and filter the data corresponding to that string.
// get search results
function getSearchResult(string) {
var postData = JSON.parse(localStorage.getItem('posts'));
var searchResults = postData.posts.filter(function(post) {
return post.markdown.match(string)
|| post.title.match(string)
|| post.author.name.match(string);
});
renderSearchResults(searchResults);
}
then render result accordinging
function renderSearchResults(posts) {
// my render code
}