shithub: hugo

Download patch

ref: 863a812e07193541b42732b0e227f3d320433f01
parent: f08ea02d24d42929676756950f3affaca7fd8c01
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Jan 28 14:38:10 EST 2018

create: Provide .Name to the archetype templates

This value will have a better suited value to base the titles on in your archetype templates when creating bundle ´index.md` type of files.

The internal template is updates, but you will have to update any custom archetype template to use the new `.Name` variable:

```bash
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---
```

Fixes #4348

--- a/create/content_template_handler.go
+++ b/create/content_template_handler.go
@@ -16,6 +16,7 @@
 import (
 	"bytes"
 	"fmt"
+	"path/filepath"
 	"strings"
 	"time"
 
@@ -43,6 +44,12 @@
 	// on the presence of language code in the filename.
 	Site *hugolib.Site
 
+	// Name will in most cases be the same as TranslationBaseName, e.g. "my-post".
+	// But if that value is "index" (bundles), the Name is instead the owning folder.
+	// This is the value you in most cases would want to use to construct the title in your
+	// archetype template.
+	Name string
+
 	// The target content file. Note that the .Content will be empty, as that
 	// has not been created yet.
 	source.File
@@ -51,7 +58,7 @@
 const (
 	// ArchetypeTemplateTemplate is used as initial template when adding an archetype template.
 	ArchetypeTemplateTemplate = `---
-title: "{{ replace .TranslationBaseName "-" " " | title }}"
+title: "{{ replace .Name "-" " " | title }}"
 date: {{ .Date }}
 draft: true
 ---
@@ -84,9 +91,17 @@
 	sp := source.NewSourceSpec(s.Deps.Cfg, s.Deps.Fs)
 	f := sp.NewFileInfo("", targetPath, false, nil)
 
+	name := f.TranslationBaseName()
+	if name == "index" || name == "_index" {
+		// Page bundles; the directory name will hopefully have a better name.
+		dir := strings.TrimSuffix(f.Dir(), helpers.FilePathSeparator)
+		_, name = filepath.Split(dir)
+	}
+
 	data := ArchetypeFileData{
 		Type: kind,
 		Date: time.Now().Format(time.RFC3339),
+		Name: name,
 		File: f,
 		Site: s,
 	}