Jekyll: Generator untuk menautkan ke semua subhalaman dalam hierarki statis

Saya mencoba menulis situs statis dengan Jekyll yang memiliki beberapa lapisan di dalamnya. Apa cara terbaik untuk menghasilkan tautan ke semua subhalaman dalam suatu bagian?

Misalnya, jika saya memiliki struktur situs seperti ini:

landing
- Topic A
  - Content 1
  - Content 2
  - Content 3
- Topic B
  - Content 1
  - Content 2
  - Content 3

Apa cara terbaik untuk membuat link ke masing-masing halaman Konten dari halaman Topiknya? Dan, apakah ada cara sederhana untuk menautkan ke semua halaman Topik dari halaman arahan?

Ini bukan postingan, hanya halaman statis. Akan sangat bagus jika saya bisa melakukan {% for topic.each %} ...dll. dan cetak tautannya.


person Sauce McBoss    schedule 19.01.2017    source sumber
comment
jika saya mengerti dengan baik, Anda tidak ingin memasukkan halaman ini ke dalam topik, dan menggunakan kategori untuk mengurutkan dan membuat premalink yang dihasilkan?   -  person yaitloutou    schedule 19.01.2017
comment
...Saya tidak yakin apa yang Anda maksud? Masing-masing level adalah sebuah folder, dan masing-masing berisi file index.md serta file md untuk subhalaman.   -  person Sauce McBoss    schedule 19.01.2017
comment
ada lebih dari satu pendekatan untuk menghasilkan struktur ini, Anda dapat meletakkan file md di pos, atau membuat koleksi tertentu, saya akan menjelaskan setiap metode dalam jawaban saya   -  person yaitloutou    schedule 19.01.2017


Jawaban (2)


Saya tidak akan menggunakan postingan untuk tujuan ini (seperti yang disarankan yaitloutou). Saya akan membaca hierarki dari struktur direktori (solusi 1) atau membuat dua koleksi terpisah (solusi 2). Anda dapat membiarkan koleksi dari solusi 2 berbagi tata letak yang sama jika Anda menginginkannya.


1. Menggunakan halaman

Buat struktur direktori dengan halaman index.md dan ulangi verifikasi Jekyll yang disebut 'site.pages' untuk membuat menu.

index.md
topic-a/index.md
  content-1/index.md
  content-2/index.md
  content-3/index.md
topic-b/index.md
  content-1/index.md
  content-2/index.md
  content-3/index.md

Dan ulangi semua halaman seperti ini:

<ul>
{% assign sitepages = site.pages | sort: 'order' %}
{% for sitepage in sitepages %}
  <li {% if page.url == sitepage.url %} class="active"{% endif %}>
    <a href="/id{{ sitepage.url }}">{{ sitepage.title }}</a>
  </li>
{% endfor %}
</ul>

Jika Anda menginginkan struktur bersarang, Anda dapat melakukan sesuatu seperti ini. Atau jika Anda hanya menginginkan hasil untuk Topik A, Anda dapat melakukan ini:

<ul>
{% assign sitepages = site.pages | sort: 'order' %}
{% for sitepage in sitepages %}
{% if sitepage.url contains 'topic-a' %}
  <li {% if page.url == sitepage.url %} class="active"{% endif %}>
    <a href="/id{{ sitepage.url }}">{{ sitepage.title }}</a>
  </li>
{% endif %}
{% endfor %}
</ul>

2. Menggunakan koleksi (solusi paling sederhana dan pembuatan tercepat)

Buat koleksi Topik A dan buat koleksi Topik B lainnya. File konfigurasi Anda akan terlihat seperti ini:

collections:
  topic-a:
    output: true
    permalink: /topic-a/:path/
  topic-b:
    output: true
    permalink: /topic-b/:path/

Mengeluarkan item dari satu topik berjalan seperti ini:

{% assign atopics = site.topic-a | sort: 'order' %}
{% for atopic in atopics %}
  <li {% if page.url == atopic.url %} class="active"{% endif %}>
    <a href="/id{{ atopic.url }}">{{ atopic.title }}</a>
  </li>
{% endfor %}
</ul>

Anda harus membuat direktori _topic-a dan _topic-b dengan file content-1.md, content-2.md, dll.


Perhatikan bahwa kedua solusi memiliki variabel YML yang disebut 'urutan', untuk menentukan urutan tampilan item/halaman. Ini terlihat seperti ini:

---
title: mytitle
layout: mylayout
order: 50
---
mycontent
person JoostS    schedule 19.01.2017
comment
Terima kasih atas arahannya, tapi bukan itu yang saya inginkan. Contoh yang Anda berikan hanya mencantumkan semua halaman di situs--apakah ada cara untuk menguraikan hanya entri yang terdapat dalam folder saat ini? Misalnya. item di topic-a/index.md hanya akan menyertakan konten untuk topik-a. (Tidak ada apa pun dari topik-b atau beranda.) - person Sauce McBoss; 19.01.2017
comment
Saya telah memperbarui jawaban untuk menunjukkan kepada Anda cara membuat daftar Topik A saja, menggunakan pendekatan halaman. - person JoostS; 19.01.2017
comment
Saya setuju bahwa solusi 2 adalah solusi terbersih, dan dapat ditingkatkan lebih lanjut dengan menggunakan kumpulan semua artikel ini dan mengetik sebagai atribut elemen koleksi.. - person yaitloutou; 20.01.2017

Saya akan mengusulkan 2 cara di sini, Anda dapat menentukan yang "terbaik" sesuai dengan kebutuhan/situasi spesifik Anda, dan mana yang terdengar lebih disesuaikan dengannya.

pertama-tama, "postingan" dan "halaman" pada dasarnya hanyalah kumpulan file md/html. dengan beberapa variabel yang dikaitkan ke masing-masing variabel.

untuk menghasilkan file dengan struktur ini, Anda dapat:

1. Menggunakan _posts dan page.categories

  1. letakkan semua sub-file di _posts (2017-01-01- hanyalah penampung)

    _posts/
       - 2017-01-01-content-a-1.md
       - 2017-01-01-content-a-2.md
       - 2017-01-01-content-a-3.md
       - 2017-01-01-content-b-1.md
       - 2017-01-01-content-b-2.md
       - 2017-01-01-content-b-3.md
    
  2. tambahkan kategori yang sesuai ke setiap file:

    2.1. untuk postingan caontent-a-* tambahkan kategori: topik-a (dalam urutan ini) dengan menambahkan baris ini di materi depan yaml di atas masing-masingnya:

    ---
     layout: page                  # or any appropriate layout 
     category: topic-a
     ---

    2.2. untuk postingan caontent-b-* tambahkan kategori: topik-b

  3. tetapkan premalink untuk mengabaikan tanggal, dan buat struktur yang diinginkan, dengan menambahkan baris berikut ke _config.yml :

    defaults:
     -
       scope:
         path: "_posts" # to all the file in posts
       values:
         permalink: /landing/:categories/:title.html # set this as default permalink value
    

Anda masih dapat menentukan permalinks per posting di bagian depannya, atau cukup menambahkan baris permalink ke setiap bagian depan folder md.

di atas akan menghasilkan struktur yang diinginkan.

  1. melewati semua

    {% for entry in site.posts %}
       {% if entry.category == type-a %}
          <!-- do A stuff -->
       {% elsif entry.category == type-b %}
          <!-- do B stuff -->
       {% endif %}
    {% endfor %}
    

2. Menggunakan koleksi:

mirip dengan yang di atas, namun alih-alih menggunakan _postscollection yang sudah ada, Anda akan memulai dengan membuat koleksi baru (salah satu keuntungannya adalah Anda tidak perlu menambahkan date )

salah satu pendekatan di atas akan menghasilkan struktur ini di dalam _site

landing/
  type-a/
    content-a-1/
      index.html
    content-a-2/
      index.html
    ...
  type-b/
    ... 
person yaitloutou    schedule 19.01.2017