contentlayerdev / contentlayerdev/contentlayer

Support content "sections"

Offen
#209 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
feature
Vorherrschende Sprache
TypeScript
Sterne
3.5k
Forks
192
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

One of the things that I really like about [Hugo](https://gohugo.io) is its [sections](https://gohugo.io/content-management/sections/) feature, which enables you to separate nested directories of content into well-defined groups. So instead of a kind of "flat" array of files you end up getting a nested structure like this:

```
Documentation
\_ Getting started
\_ Installation
\_ Platforms
\_ Administration
\_ Kubernetes
\_ Setup
\_ Configuration
\_ etc
```

As expected, sections can be infinitely nested and each can have its own metadata. I don't necessarily endorse the _way_ that Hugo does this (you need to sprinkle `_index.md` files throughout your tree) but I do think that having this kind of rich structure available to you is great for creating tables of content, sidebar navs, and all of that good stuff. Personally, it's the thing that I'm missing the most as I cross the chasm from mostly doing things in Hugo to doing things in JS world.

I could envision being able to do something like this in Contentlayer:

```js
export const Doc = defineDocumentType(() => ({
name: 'Doc',
filePathPattern: `**/*.md`,
fields: {
title: {
type: 'string',
description: 'The title of the doc',
required: true,
},
},
computedFields: {
url: {
type: 'string',
resolve: (post) => `/docs/${post._raw.flattenedPath}`,
},
},
}))

export default makeSource({
contentDirPath: 'docs',
documentTypes: [Doc],
// tiny little change
sections: true,
})
```

This could export an `allDocsSections` object of type `Sections` that would enable you to recurse through the tree.

```jsx


    {allDocs.sections.map(section => (

  • {section.title}




      {section.docs.map(doc => (

    • {doc.title}

    • ))}

      {section.sections.map(section => ( /* nest */ ))}

  • )}

```

This is very off the cuff but hopefully provides _some_ sense of what I'm suggesting. I'd be quite happy to help out with this if others find the idea compelling. Just wanted to register it here in this forum.

Note: Docusaurus [also supports this](https://docusaurus.io/docs/sidebar/autogenerated) using a `_category_.{json|yml}` file that creates a new "category" (basically an analogue to the sections concept) wherever it's found in the directory tree.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, die im Issue gezeigten Einstiegspunkte makeSource und defineDocumentType zu überprüfen, und verfolge anschließend, wie Dokumentpfade und berechnete Felder zu Collections wie allDocsSections werden. Vergleiche die angeforderten verschachtelten Sections und Metadaten pro Section mit den Beispielen von Hugo und Docusaurus. Als abgeschlossen gilt die Implementierung und Überprüfung der vorgeschlagenen API und der rekursiven typisierten Struktur durch geeignete Tests.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
content
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.