2019-10-21 04:22:28 -04:00
---
2023-07-29 05:15:54 -04:00
title: Page bundles
2022-11-17 10:14:29 -05:00
description: Content organization using Page Bundles
categories: [content management]
2023-12-04 09:14:18 -05:00
keywords: [page,bundle,leaf,branch]
2019-10-21 04:22:28 -04:00
menu :
docs:
2023-05-22 10:43:12 -04:00
parent: content-management
2022-11-17 10:14:29 -05:00
weight: 30
weight: 30
2023-12-04 09:14:18 -05:00
toc: true
2019-10-21 04:22:28 -04:00
---
Page Bundles are a way to group [Page Resources ](/content-management/page-resources/ ).
A Page Bundle can be one of:
2020-08-14 12:31:01 -04:00
- Leaf Bundle (leaf means it has no children)
- Branch Bundle (home page, section, taxonomy terms, taxonomy list)
2019-10-21 04:22:28 -04:00
| | Leaf Bundle | Branch Bundle |
2023-07-29 05:15:54 -04:00
|-------------------------------------|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
2019-10-21 04:22:28 -04:00
| Usage | Collection of content and attachments for single pages | Collection of attachments for section pages (home page, section, taxonomy terms, taxonomy list) |
2023-07-29 05:15:54 -04:00
| Index file name | `index.md` [^fn:1] | `_index.md` [^fn:1] |
2022-11-17 10:14:29 -05:00
| Allowed Resources | Page and non-page (like images, PDF, etc.) types | Only non-page (like images, PDF, etc.) types |
2019-10-21 04:22:28 -04:00
| Where can the Resources live? | At any directory level within the leaf bundle directory. | Only in the directory level **of** the branch bundle directory i.e. the directory containing the `_index.md` ([ref](https://discourse.gohugo.io/t/question-about-content-folder-structure/11822/4?u=kaushalmodi)). |
2023-07-29 05:15:54 -04:00
| Layout type | [`single` ](/templates/single-page-templates/ ) | [`list` ](/templates/lists ) |
2019-10-21 04:22:28 -04:00
| Nesting | Does not allow nesting of more bundles under it | Allows nesting of leaf or branch bundles under it |
| Example | `content/posts/my-post/index.md` | `content/posts/_index.md` |
2023-07-29 05:15:54 -04:00
| Content from non-index page files...| Accessed only as page resources | Accessed only as regular pages |
2019-10-21 04:22:28 -04:00
2023-07-29 05:15:54 -04:00
## Leaf bundles
2019-10-21 04:22:28 -04:00
A _Leaf Bundle_ is a directory at any hierarchy within the `content/`
directory, that contains an ** `index.md` ** file.
2023-07-29 05:15:54 -04:00
### Examples of leaf bundle organization {#examples-of-leaf-bundle-organization}
2019-10-21 04:22:28 -04:00
```text
content/
├── about
│ ├── index.md
├── posts
│ ├── my-post
│ │ ├── content1.md
│ │ ├── content2.md
│ │ ├── image1.jpg
│ │ ├── image2.png
│ │ └── index.md
│ └── my-other-post
2023-12-04 09:14:18 -05:00
│ └── index.md
2019-10-21 04:22:28 -04:00
│
└── another-section
├── ..
2023-12-04 09:14:18 -05:00
└── not-a-leaf-bundle
2019-10-21 04:22:28 -04:00
├── ..
2023-12-04 09:14:18 -05:00
└── another-leaf-bundle
└── index.md
2019-10-21 04:22:28 -04:00
```
In the above example `content/` directory, there are four leaf
bundles:
2023-12-04 09:14:18 -05:00
about
2019-10-21 04:22:28 -04:00
: This leaf bundle is at the root level (directly under
`content` directory) and has only the `index.md` .
2023-12-04 09:14:18 -05:00
my-post
2019-10-21 04:22:28 -04:00
: This leaf bundle has the `index.md` , two other content
Markdown files and two image files.
2022-11-17 10:14:29 -05:00
- image1, image2:
2022-09-13 14:34:24 -04:00
These images are page resources of `my-post`
2020-05-18 09:24:58 -04:00
and only available in `my-post/index.md` resources.
2022-11-17 10:14:29 -05:00
- content1, content2:
2022-09-13 14:34:24 -04:00
These content files are page resources of `my-post`
2022-11-17 10:14:29 -05:00
and only available in `my-post/index.md` resources.
2022-09-13 14:34:24 -04:00
They will **not** be rendered as individual pages.
2020-05-18 09:24:58 -04:00
2023-12-04 09:14:18 -05:00
my-other-post
2019-10-21 04:22:28 -04:00
: This leaf bundle has only the `index.md` .
2023-12-04 09:14:18 -05:00
another-leaf-bundle
2019-10-21 04:22:28 -04:00
: This leaf bundle is nested under couple of
directories. This bundle also has only the `index.md` .
{{% note %}}
The hierarchy depth at which a leaf bundle is created does not matter,
as long as it is not inside another **leaf** bundle.
{{% /note %}}
2023-07-29 05:15:54 -04:00
### Headless bundle
2019-10-21 04:22:28 -04:00
A headless bundle is a bundle that is configured to not get published
anywhere:
2022-11-17 10:14:29 -05:00
- It will have no `Permalink` and no rendered HTML in `public/` .
- It will not be part of `.Site.RegularPages` , etc.
2019-10-21 04:22:28 -04:00
But you can get it by `.Site.GetPage` . Here is an example:
```go-html-template
{{ $headless := .Site.GetPage "/some-headless-bundle" }}
{{ $reusablePages := $headless.Resources.Match "author*" }}
< h2 > Authors< / h2 >
{{ range $reusablePages }}
< h3 > {{ .Title }}< / h3 >
{{ .Content }}
{{ end }}
```
_In this example, we are assuming the `some-headless-bundle` to be a headless
bundle containing one or more **page** resources whose `.Name` matches
`"author*"` ._
Explanation of the above example:
1. Get the `some-headless-bundle` Page "object".
2022-11-17 10:14:29 -05:00
2. Collect a _slice_ of resources in this _Page Bundle_ that matches
2019-10-21 04:22:28 -04:00
`"author*"` using `.Resources.Match` .
2022-11-17 10:14:29 -05:00
3. Loop through that _slice_ of nested pages, and output their `.Title` and
2019-10-21 04:22:28 -04:00
`.Content` .
---
2023-07-29 05:15:54 -04:00
A leaf bundle can be made headless by adding below in the front matter
2019-10-21 04:22:28 -04:00
(in the `index.md` ):
2023-12-04 09:14:18 -05:00
{{< code-toggle file = content/headless/index.md fm = true > }}
2019-10-21 04:22:28 -04:00
headless = true
2023-05-22 10:43:12 -04:00
{{< / code-toggle > }}
2019-10-21 04:22:28 -04:00
There are many use cases of such headless page bundles:
2022-11-17 10:14:29 -05:00
- Shared media galleries
- Reusable page content "snippets"
2019-10-21 04:22:28 -04:00
2023-07-29 05:15:54 -04:00
## Branch bundles
2019-10-21 04:22:28 -04:00
A _Branch Bundle_ is any directory at any hierarchy within the
`content/` directory, that contains at least an ** `_index.md` ** file.
This `_index.md` can also be directly under the `content/` directory.
{{% note %}}
Here `md` (markdown) is used just as an example. You can use any file
type as a content resource as long as it is a content type recognized by Hugo.
{{% /note %}}
2023-07-29 05:15:54 -04:00
### Examples of branch bundle organization
2019-10-21 04:22:28 -04:00
```text
content/
├── branch-bundle-1
2023-12-04 09:14:18 -05:00
│ ├── branch-content1.md
│ ├── branch-content2.md
│ ├── image1.jpg
│ ├── image2.png
│ └── _index.md
2019-10-21 04:22:28 -04:00
└── branch-bundle-2
├── _index.md
└── a-leaf-bundle
└── index.md
```
In the above example `content/` directory, there are two branch
bundles (and a leaf bundle):
2023-12-04 09:14:18 -05:00
branch-bundle-1
2019-10-21 04:22:28 -04:00
: This branch bundle has the `_index.md` , two
other content Markdown files and two image files.
2023-12-04 09:14:18 -05:00
branch-bundle-2
2019-10-21 04:22:28 -04:00
: This branch bundle has the `_index.md` and a
nested leaf bundle.
{{% note %}}
The hierarchy depth at which a branch bundle is created does not
matter.
{{% /note %}}
2020-11-27 03:26:24 -05:00
[^fn:1]: The `.md` extension is just an example. The extension can be `.html` , `.json` or any valid MIME type.