2016-08-30 3 views
7

Редактировать: Я создал репозиторий here, который проверяет ответ jibe ниже. Я просто получаю пустую страницу, когда я посещаю /animals, поэтому любая помощь приветствуется!Список подкатегорий в GitHub Страницы

Это наблюдение на этот вопрос: Hierarchical Categories in GitHub Pages

В этом вопросе, я узнал, как просмотреть Сообщений конкретной иерархической категории. Теперь я пытаюсь выяснить, как перечислять подкатегории определенной иерархической категории.

Я использую Джекил на страницах GitHub, и я хочу, чтобы иметь иерархические категории, как это:

  • животных -> млекопитающие -> Кошки -> _posts -> housecat.md, tiger.md
  • животные -> млекопитающие -> собаки -> _posts -> poodle.md, doberman.md
  • животных -> рептилии -> ящериц -> _posts -> iguana.md, chameleon.md

I» d, чтобы пользователи могли посетить /animals и см. список подкатегорий (mammals и reptiles). Затем, если они перейдут на /animals/mammals, они будут видеть cats и dogs, перечисленные в подкатегориях.

В настоящее время я делаю это вручную, помещая файл index.html в каждую подкатегорию. Но это делает обновление вещей намного сложнее, чем должно быть.

Я пробовал следующий this answer, но это предназначено для одиночных тегов, а не для нескольких категорий.

Загвоздка в том, что любая конкретная категория не может быть уникальным, так что я могу иметь такие вещи, как это:

  • животных -> млекопитающие ->летучих мышей -> _posts -> vampire.md, фрукты. мкр
  • спорт -> бейсбол ->летучие мыши -> _posts -> wiffle.md, teeball.md

Я хотел бы также, чтобы иметь возможность определить frontmatter атрибуты в подкатегории, возможно, в Ind ex.html файл каждого? Например, файл animals->mammals->bats->index.html будет содержать переменную фронтмакса thumbnail со значением "VampireBat.jpg", а sports->baseball->bats->index.html будет иметь thumbnail"YellowWiffleBat.png". Я хотел бы иметь доступ к этим переменным с родительского уровня (чтобы показать миниатюру и ссылку на подкатегорию).

Моей первая мысль была, чтобы получить доступ к субкатегории непосредственно, как это:

{% for mammalType in site.categories.animals.mammals %} 
    <p>{{ mammalType.title }}</p> 
    <img src="((mammalType.thumbnail }}" /> 
{% endfor %} 

Что я обобщаю с использованием категорий от самой страницы:

{% for subcategory in page.categories %} 
    <p>{{ subcategory.title }}</p> 
    <img src="((subcategory.thumbnail }}" /> 
{% endfor %} 

Но это не работает вообще, поскольку site.categories.whatever - это список всех сообщений этой категории, игнорируя любую иерархическую информацию.

Есть ли лучший способ приблизиться к этому, кроме как сделать это вручную?

ответ

1

Смотрите simpyll.com для демо

См github для веб-кода

правопреемником уаг page_depth в качестве текущей глубины страницы, используя путь '/' в качестве счетчика переменной

{% assign page_depth = page.url | split: '/' | size %} 

назначить var page_parent в качестве пули последнего каталога, где находится «index.md»

{% assign page_parent = page.url | split: '/' | last %} 

цикл через каждую страницу на сайте

{% for node in site.pages offset:1 %} 

сайта пропуска корень

{% if node.url == '/' %} 
{{ continue }} 
{% else %} 

удалить управляющие последовательностями из каждой страницы сайта

{% assign split_path = node.url | split: "/" %} 

правопреемник вар node_last для каждой страницы на веб-сайте

{% assign node_last = split_path | last %} 

правопреемник вар node_parent как слизняк последнего корпуса каталога «index.md» для каждой страницы сайта

{% assign node_parent = node.url | remove: node_last | split: '/' | last %} 

присвойте node_url для каждой страницы сайта

{% assign node_url = node.url %} 

Переберите каждый пул на каждой странице пути на веб-сайте

{% for slug in split_path offset:1 %} 

правопреемником вар пробкового в качестве имени каждой пули, следовательно, давая ему имя

{% assign slug = slug %} 

правопреемником slug_depth с forloop.index

{% assign slug_depth = forloop.index %} 

близко

{% endfor %} 

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

{% if slug_depth == page_depth and page_parent == node_parent %}<li><a href="{{ node_url }}">{{ slug }}</a></li>{% endif %} 

получить подкаталоги для root (которые мы пропустили в начале этого скрипта). мы можем использовать только глубину, чтобы определить это.

{% if slug_depth == 1 and page.url == '/' and slug != 'search.json' and slug != 'sitemap.xml' %}<li><a href="{{ node_url }}">{{{slug}}</a></li>{% endif %} 

близко, если и

{% endif %} 
{% endfor %} 

Итого:

{% assign page_depth = page.url | split: '/' | size %} 
    {% assign page_parent = page.url | split: '/' | last %} 
    {% for node in site.pages offset:1 %} 
    {% if node.url == '/' %} 
    {{ continue }} 
    {% else %} 
    {% assign split_path = node.url | split: "/" %} 
    {% assign node_last = split_path | last %} 
    {% assign node_parent = node.url | remove: node_last | split: '/' | last %} 
    {% assign node_url = node.url %} 
    {% for slug in split_path offset:1 %} 
    {% assign slug = slug %} 
    {% assign slug_depth = forloop.index %} 
    {% endfor %} 
    {% if slug_depth == page_depth and page_parent == node_parent %} 
    <li><a href="{{ node_url }}">{{ slug }}</a></li> 
    {% endif %} 
    {% if slug_depth == 1 and page.url == '/' and slug != 'search.json' and slug != 'sitemap.xml' %} 
    <li><a href="{{ node_url }}">{{{slug}}</a></li> 
    {% endif %} 
    {% endif %} 
    {% endfor %} 
+0

Объясните свой код, пожалуйста. –

+0

Там вы за Германа Доппеса. :) – Simpyll

+0

Это именно то, что я искал. Спасибо! –

1

Как было предложено в моем удаленном ответе, я публикую улучшенную версию ответа на предыдущий вопрос. Я также добавляю информацию, чтобы ответить на ваши новые вопросы (также удалены):

Спасибо за ответ. Это почти работает, но у него есть несколько проблем. Самое главное, он не поддерживает подкатегории с тем же именем (например, животные-> летучие мыши и бейсбол-> летучие мыши). Он также перечисляет каждую подкатегорию и каждое сообщение под определенной категорией. Я только хочу перечислить подкатегории, а не сообщения. Есть ли способ изменить свой подход для удовлетворения этих требований? - Кевин Workman вчера

Измените свой _config.yml соответственно

collections: 
    animals: 
     output: true 
     mammals: 
      output: true 
      cats: 
       output: true 
      dogs: 
       output: true 
     reptiles: 
      output: true 
      lizards: 
       output: true 

затем создал структуру:

mkdir -p _animals/reptiles/lizards 
mkdir -p _animals/mammals/cats 
mkdir _animals/mammals/dogs 

добавить свои Md файлы и все index.html вам нужно сделать список вы хотите. , который будет индексировать элементы с фильтром. В верхней директории, ваша коллекция животных должна выглядеть следующим образом (index.html в каждой папке):

очистителя

root/ 
└── _animals/ 
    ├── index.html 
    ├── mammals 
    │ ├── cats 
    │ │ ├── housecat.md 
    │ │ └── tiger.md 
    │ ├── dogs 
    │ │ ├── doberman.md 
    │ │ └── poodle.md 
    │ └── index.html 
    └── reptiles 
     └── lizards 
      ├── chameleon.md 
      └── iguana.md 

нового вы можете перечислить только подкатегории с или без углубляясь (с дополнительными параметрами) _includes/list_subcategories.html

{% assign animals = site.animals| sort:'title' %} 
{% assign from = page.url | remove: '/index.html' %} 
{% assign deep = (page.url | split: '/' | size) + 1 %} 
{% for animal in animals %} 
{% assign d = animal.url | remove: '/index.html' | split: '/' | size %} 
{% if animal.url != page.url and animal.url contains from and animal.url contains "index" and (include.dig or deep == d) %} 
<a href={{ animal.url | prepend: site.baseurl }}>{{animal.title}}</a> 
{% endif %} 
{% endfor %} 

улучшены аналогичен список животных _includes/list_animals.html

{% assign animals = site.animals| sort:'title' %} 
{% assign from = page.url | remove: '/index.html' %} 
{% assign deep = (page.url | split: '/' | size) + 1 %} 
{% for animal in animals %} 
{% assign d = animal.url | remove: '/index.html' | split: '/' | size %} 
{% if animal.url contains "index" or animal.url == page.url %} 
{% else %} 
    {% if animal.url contains from and (include.dig or deep == d) %} 
    <a href={{ animal.url | prepend: site.baseurl }}>{{animal.title}}</a> 
    {% endif %} 
{% endif %} 
{% endfor %} 

список всех подкатегорий и все животные в animals/index.html:

--- 
title: animals 
--- 
{% include list_subcategories.html dig=true %} 
<hr> 
{% include list_animals.html dig=true %} 

Например, чтобы получить список всех млекопитающих и subcategoeries в animals/mammals/index.html:

--- 
title: animals 
--- 
{% include list_subcategories.html %} 
<hr> 
{% include list_animals.html %} 

Наконец сформированная структура должна выглядеть это (с некоторым индексом.HTML):

очиститель

root/ 
├─ _animals/ 
│ └─── ... 
└── _site 
    └── animals 
     ├── index.html 
     ├── mammals 
     │ ├── cats 
     │ │ ├── housecat.html 
     │ │ └── tiger.html 
     │ ├── dogs 
     │ │ ├── doberman.html 
     │ │ └── poodle.html 
     │ └── index.html 
     └── reptiles 
      └── lizards 
       ├── chameleon.html 
       └── iguana.html 

решает свой вопрос. Я перешел из таксономии, чтобы копать, но вы могли бы также различить животных-> летучих мышей и бейсбольных битов, поставив taxonomy="baseball/bats" или taxonomy="animals/bats".

+0

Опять же, спасибо за Ваш ответ. Я пытаюсь заставить это работать, но когда я перехожу к '/ examples', я просто получаю пустую страницу. У вас есть что-то такое? –

+0

Я создал репозиторий, который следует за вашим подходом, но я все равно получаю пустую страницу, если я перехожу к '/ animals': https://github.com/KevinWorkman/GitHubPagesTest –

+0

В вашей _config.yml есть 2 вещи. 1. Вы должны удалить 'ссылка:/Категории /: slug' 2. Вы должны добавить' BaseUrl: «/ GitHubPagesTest» ' Кроме того, он не должен иметь дату перед именем уценкой файл. – jibe