Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Jekyll's Collection relative_directory for organizing pages/collections

Tags:

jekyll

I thought that setting the relative_directory (Jekyll Collection Docs) (github PR) property being set would help me keep my files organized without compromising my desired output, but it seems to be ignored/not used for producing files. I don't want my collections to be in the root directory, because I find it confusing to have ~10 collection folders adjacent to _assets, _data, _includes, _layouts, and others.

Fixes or alternative solutions are welcomed, as long as long as the output is the same, and my pages are in their own directory, without needing to put permalink front-matter on every single page.

_config.yaml

collections:
  root:
    relative_directory: '_pages/root'
    output: true
    permalink: /:path.html
  root-worthy:
    relative_directory: '_pages/root-worthy'
    output: true
    permalink: /:path.html
  docs:
    relative_directory: '_pages/docs'
    output: true
    permalink: /docs/:path.html

Directory Structure:

├── ...
├── _layouts
├── _pages
│   ├── root
│   │   ├── about.html
│   │   └── contact.html
│   ├── root_worthy
│   │   ├── quickstart.html
│   │   └── seo-worthy-page.html
│   └── docs
│       ├── errors.html
│       └── api.html
├── _posts
└── index.html

Desired output:

├── ...
├── _site
│   ├── about.html
│   ├── contact.html
│   ├── quickstart.html
│   ├── seo-worthy-page.html
│   └── docs
│       ├── errors.html
│       └── api.html
└── ...
like image 811
KFunk Avatar asked Oct 29 '22 23:10

KFunk


1 Answers

It seems that the PR you mention is still not merged.

For 3.1.6 and next 3.2, jekyll code is still :

@relative_directory ||= "_#{label}"

But the requester made a plugin that looks like this :

_plugins/collection_relative_directory.rb

module Jekyll
  class Collection
    def relative_directory
      @relative_directory ||= (metadata['relative_directory'] && site.in_source_dir(metadata['relative_directory']) ||  "_#{label}")
    end
  end
end
like image 151
David Jacquel Avatar answered Nov 15 '22 04:11

David Jacquel