根据 Ghost 中的上下文包含把手部分
Include handlebars partials when they exist based on context in Ghost
我有一个 customized theme for Ghost。我偶尔会拜访一位客座作家。我希望能够为每位作者添加任意数量的指向作者页面的自定义链接。
我知道 authors-{{slug}}.hbs
约定我可以用来为每个作者创建一个完整的自定义页面,但这是维护起来的噩梦。
相反,我试图在它存在时尝试包含它。根据 handlebars 文档,{{#> partial }}
应该可以工作。但是当我知道部分的确切名称时,这就有效了。
我需要部分的名称根据上下文是动态的。在我的例子中,作者的幽灵鼻涕虫。 According to the handlebar docs I need to pass in a function...
我尝试了几种方法,但 gscan
不喜欢所有方法:
{{#> (concat "partials/socials-" slug) }}
{{#> (concat "partials/socials-" (lookup . 'slug')) }}
{{#> concat "partials/socials-" (lookup . 'slug') }}
{{#> "partials/socials-{{slug}}" }}
{{#> partials/socials-{{slug}} }}
都给我:
Checking theme compatibility...
Your theme has 1 error!
----
Errors
------
Important to fix, functionality may be degraded.
- Error: Templates must contain valid Handlebars
Files: author.hbs
您以前使用过内容块吗?它们是一种重用模板代码但仍允许自定义的方法,它是您从中分叉出来的 Casper 中使用的一种方法。在 page.hbs
中查看这些行:https://github.com/jessehouwing/jessehouwingnl-Casper/blob/customized/page.hbs#L58-L65
以及 default.hbs
中显示的这一行:https://github.com/jessehouwing/jessehouwingnl-Casper/blob/customized/default.hbs#L127
您可以做的是创建一个继承现有 author.hbs
模板的自定义作者模板。对于此示例,我将通过创建 author-ghost.hbs
:
来为作者 'ghost' 创建自定义作者页面
{{!< author}}
{{#contentFor "links"}}
<ul>
<li><a href="https://example.com">Example link</a></li>
<li><a href="https://example.com">Example link</a></li>
<li><a href="https://example.com">Example link</a></li>
</ul>
{{/contentFor}}
以上代码继承了 author.hbs
并创建了一个名为 links
的块。然后在原始 author.hbs
模板中,我们可以将块引用添加到我们希望块内容出现的位置:
{{{block "links"}}}
这不仅会在自定义作者模板中插入代码,而且如果作者没有自定义作者模板,它还会优雅地退回到无输出。
希望对您有所帮助!
我遇到了同样的问题,这里是我是如何解决的。只需使用此语法中的查找。
{{#foreach navigation}}
<li class="nav-{{slug}}">
<a href="{{url}}" class="social-link" target="_blank" rel="noopener">
{{>(lookup . 'slug')}}
</a>
</li>
{{/foreach}}
我有一个 customized theme for Ghost。我偶尔会拜访一位客座作家。我希望能够为每位作者添加任意数量的指向作者页面的自定义链接。
我知道 authors-{{slug}}.hbs
约定我可以用来为每个作者创建一个完整的自定义页面,但这是维护起来的噩梦。
相反,我试图在它存在时尝试包含它。根据 handlebars 文档,{{#> partial }}
应该可以工作。但是当我知道部分的确切名称时,这就有效了。
我需要部分的名称根据上下文是动态的。在我的例子中,作者的幽灵鼻涕虫。 According to the handlebar docs I need to pass in a function...
我尝试了几种方法,但 gscan
不喜欢所有方法:
{{#> (concat "partials/socials-" slug) }}
{{#> (concat "partials/socials-" (lookup . 'slug')) }}
{{#> concat "partials/socials-" (lookup . 'slug') }}
{{#> "partials/socials-{{slug}}" }}
{{#> partials/socials-{{slug}} }}
都给我:
Checking theme compatibility...
Your theme has 1 error!
----
Errors
------
Important to fix, functionality may be degraded.
- Error: Templates must contain valid Handlebars
Files: author.hbs
您以前使用过内容块吗?它们是一种重用模板代码但仍允许自定义的方法,它是您从中分叉出来的 Casper 中使用的一种方法。在 page.hbs
中查看这些行:https://github.com/jessehouwing/jessehouwingnl-Casper/blob/customized/page.hbs#L58-L65
以及 default.hbs
中显示的这一行:https://github.com/jessehouwing/jessehouwingnl-Casper/blob/customized/default.hbs#L127
您可以做的是创建一个继承现有 author.hbs
模板的自定义作者模板。对于此示例,我将通过创建 author-ghost.hbs
:
{{!< author}}
{{#contentFor "links"}}
<ul>
<li><a href="https://example.com">Example link</a></li>
<li><a href="https://example.com">Example link</a></li>
<li><a href="https://example.com">Example link</a></li>
</ul>
{{/contentFor}}
以上代码继承了 author.hbs
并创建了一个名为 links
的块。然后在原始 author.hbs
模板中,我们可以将块引用添加到我们希望块内容出现的位置:
{{{block "links"}}}
这不仅会在自定义作者模板中插入代码,而且如果作者没有自定义作者模板,它还会优雅地退回到无输出。
希望对您有所帮助!
我遇到了同样的问题,这里是我是如何解决的。只需使用此语法中的查找。
{{#foreach navigation}}
<li class="nav-{{slug}}">
<a href="{{url}}" class="social-link" target="_blank" rel="noopener">
{{>(lookup . 'slug')}}
</a>
</li>
{{/foreach}}