根据 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}}