Как установить в настраиваемом шаблоне заголовок / мета-описание коллекции Ghost Blog Custom Routes.yaml?

Используя файл Ghost blog routes.yaml, можно использовать блок коллекций для создания настраиваемой коллекции, состоящей из некоторых тегов и / или других данных. Вы также можете указать этой коллекции использовать собственный шаблон темы, см.:

  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}} операторов, но не могу понять, в какой контекст может вписаться пользовательский маршрут.

В приведенном выше примере routes.yaml заголовок настраиваемой коллекции заканчивается как «Имя моего сайта (страница 1)», а метаописание отсутствует.

Эта проблема также распространяется на данные Open Graph, в которых перечислены идентичные заголовки, а также нет описания для настраиваемой коллекции.

Я предполагаю, что для этого можно использовать свойство данных, прикрепленное к файлу routes.yaml (см .: https://docs.ghost.org/concepts/routing/#data), но на данный момент я не нашел решения.

Хотя мои первоначальные попытки поиска решения в Google не увенчались успехом, это лучшая ссылка на проблему, которую я видел:

  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

person Necevil    schedule 03.02.2019    source источник


Ответы (2)


Я нашел способ обойти эту проблему.

  1. Вы создаете страницу под названием example в инструменте Ghost Admin.
  2. Настройте маршруты (вместо коллекций) в routes.yaml следующим образом:
routes:
  /example/:
    controller: channel
    filter: tag:example-tag
    template: example
    data: page.example

Page.example будет использовать метаданные этой страницы в Ghost.

person xiaoke    schedule 21.05.2019
comment
Мне нужно сначала попробовать это, но если это сработает ... Потрясающе! - person Necevil; 22.05.2019

Это возможно только с помощью обходного пути, описанного в проблеме: https://github.com/TryGhost/Ghost/issues/10082

Обычно делайте следующее:

  1. создайте страницу Пример (с ярлыком пример) и заполните заголовок и описание метаданных, которые хотите
  2. в routes.yaml измените определение вашей коллекции / example / и добавьте следующее: data: page.example, чтобы связать корень вашей коллекции с указанной страницей
  3. теперь в вашем определении шаблона example.hbs вы можете использовать, например, {{#page}} {{content}} {{/page}}, чтобы вставить контент со своей страницы. Вы также можете сделать это в шаблоне default.hbs, который включен в ваш example.hbs. Поэтому замените: <title>{{meta_title}}</title> в default.hbs следующим:
{{#unless page}}
  <title>{{meta_title}}</title>
{{else}}
  {{#page}}
    <title>{{meta_title}}</title>
    <meta name="description" content="{{meta_description}}"/>
  {{/page}}
{{/unless}}

Это установит конкретный заголовок / описание для корневых страниц вашей коллекции в общем виде. Аналогичным образом можно сгенерировать метаданные schema.org. К сожалению, метаданные Facebook и Twitter сделать не так просто, потому что тег {{ghost_head}} в default.hbs уже вставляет метаданные сайта на эту страницу. Последнее замечание: кроме {{meta_title}} и {{meta_description}}, я полагаю, вы могли бы использовать все поля метаданных, определенные здесь.

person Marek Gregor    schedule 20.02.2019