Передача коллекций сайтов от страницы до макета Jekyll - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь передать одно семейство сайтов в макет моей страницы, чтобы иметь возможность создать свое навигационное меню в соответствии с разделами, которые я пропускаю.

В моем _config.yml

collections:
  tt:
    output: true

На моей странице index.md:

---
layout: mylayout
title: My Great Homepage
icon: fa-home
order: 1
sec: "{{site.tt}}"
---

В моем макете:

---
layout: mylayout
---
{%- assign _sections = page.sec | flatify -%}
{%- include header.html scrolly_nav=_sections -%}

<!-- Main -->
<div id="main">
    {{page.sec | flatify}} <!-- just to debug -->
</div>

Flatify находится под _plugins / flatify.rb:

module Jekyll
    module ExpandNestedVariableFilter
      def flatify(input)
        Liquid::Template.parse(input).render(@context)
      end
    end
  end

  Liquid::Template.register_filter(Jekyll::ExpandNestedVariableFilter)

В моем макете использование {%- assign _sections = site.sec | flatify -%} работает отлично, но когда я передаю коллекцию со страницы в макет, это не работает.

Если я делаю то же самое, передавая site.title вместо site.tt от страницы до макета, все работает просто отлично. Но когда я пытаюсь передать коллекцию, она не работает.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 25 апреля 2020

Ваш плагин flatify - это круто, но он не отражает реальную жизнь.

Вы не можете использовать жидкие переменные в переднем веществе, потому что они не анализируются.

В начале страницы:

---
sec: "tt"
---

Затем со страницы или макета вы можете просто позвонить:

{%- assign _sections = site[page.sec] -%}
{%- include header.html scrolly_nav=_sections -%}

Если вы хотите отладить, вы можете использовать фильтр inspect, который просто выводит переменное содержимое .

{{ page.sec | inspect }} or {{ site[page.sec] | inspect }}
...