我希望使用Ghost来托管博客和静态网站,因此结构可能如下所示:
/
:登录页面(而不是博客登录页面,不需要需要访问posts
)/blog/
:博客登录页面(需要访问posts
通常可以访问的index.hbs
)/page1/
等:将根据需要使用page.hbs
或page-page1.hbs
的静态页面/blog-post-whatever
/等:将使用post.hbs
的博客帖子我唯一预见到的问题是,仅
index.hbs
(据我所知)传递了posts
模板变量(请参见code on GitHub here)。在我提交拉取请求之前,很高兴知道是否:
posts
中的page.hbs
变量的现有方法? posts
到所有页面吗?还是应该将拉取请求拆分为page.hbs
并仅将其发送给那些请求?还是有更好的方法来做到这一点? 最佳答案
如果您不介意破解Ghost核心文件,则可以按照以下方法对当前版本的Ghost(0.7.4)进行操作。如果升级到新的Ghost版本,则需要重新创建此hack。
首先创建模板文件(升级后不会更改):
在以下位置创建主页模板:
内容/主题/主题名称/home.hbs
home.hbs 现在将取代 index.hbs 并将被呈现。
还可以在以下位置创建博客模板文件:
内容/主题/主题名称/blog.hbs
添加分页帖子的handlebars元素是
{{> "loop"}}
因此它应该在 blog.hbs 文件中。
同样,如果您升级到新版本的Ghost,则上述文件不会更改。
现在,在
core/server
目录中编辑以下文件:/core/server/routes/frontend.js:
前:
indexRouter.route('/').get(frontend.index);
indexRouter.route('/' + routeKeywords.page + '/:page/').get(frontend.index);
后:
indexRouter.route('/').get(frontend.index);
indexRouter.route('/blog/').get(frontend.blog);
indexRouter.route('/' + routeKeywords.page + '/:page/').get(frontend.index);
这将调用Frontend Controller ,该 Controller 将以与“索引”和“主页”相同的数据级别呈现博客页面(默认为加载最近帖子的第一页),从而使我们能够在/中使用“循环”博客/页面。
/core/server/controllers/frontend/index.js
前:
frontendControllers = {
index: renderChannel('index'),
tag: renderChannel('tag'),
后:
frontendControllers = {
index: renderChannel('index'),
blog: renderChannel('blog'),
tag: renderChannel('tag'),
/core/server/controllers/frontend/channel-config.js
前:
getConfig = function getConfig(name) {
var defaults = {
index: {
name: 'index',
route: '/',
frontPageTemplate: 'home'
},
tag: {
后:
getConfig = function getConfig(name) {
var defaults = {
index: {
name: 'index',
route: '/',
frontPageTemplate: 'home'
},
blog: {
name: 'blog',
route: '/blog/',
frontPageTemplate: 'blog'
},
tag: {
/core/server/controllers/frontend/channel-config.js
前:
indexPattern = new RegExp('^\\/' + config.routeKeywords.page + '\\/'),
rssPattern = new RegExp('^\\/rss\\/'),
homePattern = new RegExp('^\\/$');
后:
indexPattern = new RegExp('^\\/' + config.routeKeywords.page + '\\/'),
rssPattern = new RegExp('^\\/rss\\/'),
blogPattern = new RegExp('^\\/blog\\/'),
homePattern = new RegExp('^\\/$');
和
前:
if (indexPattern.test(res.locals.relativeUrl)) {
res.locals.context.push('index');
} else if (homePattern.test(res.locals.relativeUrl)) {
res.locals.context.push('home');
res.locals.context.push('index');
} else if (rssPattern.test(res.locals.relativeUrl)) {
res.locals.context.push('rss');
} else if (privatePattern.test(res.locals.relativeUrl)) {
res.locals.context.push('private');
后:
if (indexPattern.test(res.locals.relativeUrl)) {
res.locals.context.push('index');
} else if (homePattern.test(res.locals.relativeUrl)) {
res.locals.context.push('home');
res.locals.context.push('index');
} else if (blogPattern.test(res.locals.relativeUrl)) {
res.locals.context.push('blog');
} else if (rssPattern.test(res.locals.relativeUrl)) {
res.locals.context.push('rss');
} else if (privatePattern.test(res.locals.relativeUrl)) {
res.locals.context.push('private');
重新启动服务器,您应该会看到新的/blog/页面以及最近的博客文章列表
关于node.js - 有没有办法让Ghost静态页面访问index.hbs传递的 'posts'变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23640333/