Добавление тегов на страницу разрыва постов в jekyll - PullRequest
0 голосов
/ 19 октября 2019

Допустим, у меня есть следующий фронт:

title: example
date: 2019-09-16 00:00:00+2000
layout: post
categories: blog

И следующий HTML-код:

{% for post in site.posts %}
    {% for tag in post.tags %}
        <input type="checkbox">{{tag}}<br>
    {% endfor %}
{% endfor %}

Как и ожидалось, страница выглядит так, как должно, и код выглядит так, каквы ожидаете:

Как это должно выглядеть:

Correct display Correct code

Но, если я добавлю следующую переднюю тему:

tags: ["code", "test", "example", "python"]

Все ломается:

НЕПРАВИЛЬНО

Broken display (Top) Broken code

Что происходит?

jekyll -v >> jekyll 4.0.0

Драгоценные камни:

  • Руж (форматирование кода)

  • Jekyll SEO тег(SEO от _config.yml)

  • Карта сайта Jekyll (Создает файл sitemap.xml)

  • Канал Jeyll (Создает RSS-канал)

РЕДАКТИРОВАТЬ: кажется, захватывает весь пост, а не только категорию, если я добавлю это:

{% for category in site.categories %}
    <input type="checkbox" name="{{category}}" value="{{category | capitalize }}">
{% endfor %}

Что явно не так

1 Ответ

2 голосов
/ 19 октября 2019

Ошибка из-за следующего кода в meta вашего сайта:

<meta name="keywords" content="{{site.tags}}">

site.tags - это хеш всех сообщений, помеченных для данной строки. A hash здесь обозначает контейнер пар ключ-значение. Например:

{"foo" => "bar", "alpha" => "beta"}


Решения

Используйте некоторую другую переменную для обозначения ключевых слов. Например, keywords. В вашем конфигурационном файле замените ключ tags на keywords.

keywords: [
  "HTML",
  "Python",
  "CSS",
  "Coding",
  "Blog"
]

Затем обновите head.html, включив:

<meta name="keywords" content="{{ site.keywords }}">

Относительно рендеринга флажковВам нужно знать, что kramdown рассматривает все строки с 4 ведущими пробелами для обозначения кодового блока. Поэтому следующий

{% for post in site.posts %}
    {% for tag in post.tags %}
        <input type="checkbox">{{tag}}<br>
    {% endfor %}
{% endfor %}

будет производить только

    <input type="checkbox">code<br>

    <input type="checkbox">test<br>

    <input type="checkbox">example<br>

    <input type="checkbox">python<br>

(они не отображаются как входные данные HTML, а как необработанный код.)


Чтобы увидетьвнутреннее представление любого объекта, который вы собираетесь использовать в Liquid, вы можете передать его в фильтр inspect. Например, чтобы увидеть, что на самом деле является site.tags (или site.categories), вы можете проверить их с помощью:

<code><pre>{{ site.tags | inspect }}
...