如何在自定义模板中设置Ghost Blog自定义Routes.yaml集合标题/元描述?

时间:2019-02-03 00:08:02

标签: ghost-blog

使用Ghost博客的route.yaml文件,可以使用collections块创建由某些标签和/或其他数据组成的自定义集合。您还可以告诉此收藏使用自定义主题模板,请参见:

  1. https://docs.ghost.org/tutorials/creating-content-collections/
  2. https://docs.ghost.org/concepts/routing/#content-structure

例如:

collections:
  /example/:
    permalink: /example/{slug}/
    controller: channel
    filter: tag:example-tag
    template:
      - example

以上所有方法均有效,并且我的收藏正确使用了新的example主题文件。

问题在于,与标签页(用于example-tag)不同,我的新自定义集合没有易于记录的使用标题等的方式。

它不会从用于构建集合的标签中提取标题/元描述(这对于从单个标签构建的集合非常有用)。为了解决这个问题,我尝试了一些{{#has}}语句,但是我无法弄清楚自定义路由将适合什么上下文。

  

在上面的示例route.yaml中,自定义集合的标题最终显示为“我的网站名称(第1页)”,并且没有元描述。

此问题还扩展到“打开图”数据中,该数据列出了相同的标题,但没有自定义集合的描述。

我的猜测是,可能可以使用附加到route.yaml文件的data属性来实现此目的(请参阅:https://docs.ghost.org/concepts/routing/#data),但到目前为止我还没有找到解决方案。

  

虽然我最初尝试使用谷歌搜索解决方案的尝试是空的,但这是我对该问题的最佳参考:

  1. https://forum.ghost.org/t/dynamic-routing-page-post-data-context-in-default-hbs-nested-navigation-on-custom-collections/4204
  2. https://github.com/TryGhost/Ghost/issues/10082

2 个答案:

答案 0 :(得分:0)

只有在问题https://github.com/TryGhost/Ghost/issues/10082

中描述的解决方法才有可能

通常执行以下操作:

  1. 创建页面 Example (带有标签 example )并填写所需的元数据标题和描述
  2. routes.yaml中的更改您的集合定义 / example / 添加以下内容:data: page.example将您的集合根链接到指定页面
  3. 现在在模板定义example.hbs中,您可以使用例如{{#page}} {{content}} {{/page}}标签可插入页面中的内容。您也可以在example.hbs中包含的default.hbs模板中执行此操作。因此,将default.hbs中的<title>{{meta_title}}</title>替换为以下内容:
{{#unless page}}
  <title>{{meta_title}}</title>
{{else}}
  {{#page}}
    <title>{{meta_title}}</title>
    <meta name="description" content="{{meta_description}}"/>
  {{/page}}
{{/unless}}

这将以一般方式为您的收藏根页面设置特定的标题/描述。可以以类似方式生成schema.org元数据。不幸的是,Facebook和Twitter元数据并不是那么简单,因为default.hbs中的{{ghost_head}}标签已经在该页面上插入了网站元数据。最后说明:除了{{meta_title}}{{meta_description}},我想您可以使用定义为here的所有元数据字段。

答案 1 :(得分:0)

我找到了一种解决方法。

  1. 您可以在Ghost管理工具中创建一个名为example的页面。
  2. 按以下方式在route.yaml中自定义路线(而不是集合):
routes:
  /example/:
    controller: channel
    filter: tag:example-tag
    template: example
    data: page.example

page.example将在Ghost中使用此页面的元数据。