diff --git a/common/paths/pathparser.go b/common/paths/pathparser.go index 1cae710e8..8b9259bf7 100644 --- a/common/paths/pathparser.go +++ b/common/paths/pathparser.go @@ -640,7 +640,7 @@ func (p *Path) Base() string { // For pages with Type set, we treat that as the section. func (p *Path) BaseReTyped(typ string) (d string) { base := p.Base() - if typ == "" || p.Section() == typ { + if p.Section() == typ { return base } d = "/" + typ diff --git a/hugolib/page.go b/hugolib/page.go index bb3835c1e..dc0d9f4bc 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -479,7 +479,7 @@ func (ps *pageState) initCommonProviders(pp pagePaths) error { func (po *pageOutput) GetInternalTemplateBasePathAndDescriptor() (string, tplimpl.TemplateDescriptor) { p := po.p f := po.f - base := p.PathInfo().BaseReTyped(p.m.pageConfig.Type) + base := p.PathInfo().BaseReTyped(p.m.Type()) return base, tplimpl.TemplateDescriptor{ Kind: p.Kind(), Lang: p.Language().Lang, diff --git a/hugolib/page_test.go b/hugolib/page_test.go index 1da67e58f..d4185531b 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -2000,3 +2000,61 @@ title: home en b.AssertLogContains("Using index.de.md in your content's root directory is usually incorrect for your home page. You should use _index.de.md instead.") b.AssertLogContains("Using index.en.org in your content's root directory is usually incorrect for your home page. You should use _index.en.org instead.") } + +// Issue 13826 +func TestTemplateSelectionIssue13826(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +-- content/p1.md -- +--- +title: p1 (type implicitly set to page) +--- +-- content/p2.md -- +--- +title: p2 (type explicitly set to page) +type: page +--- +-- content/p3.md -- +--- +title: p3 (type explicitly set to foo) +type: foo +--- +-- content/foo/p4.md -- +--- +title: p4 (type implicitly set to foo) +--- +-- content/bar/p5.md -- +--- +title: p5 (type explicitly set to foo) +type: foo +--- +-- layouts/page/page.html -- +layouts/page/page.html +-- layouts/foo/page.html -- +layouts/foo/page.html +-- layouts/page.html -- +layouts/page.html +` + + b := Test(t, files) + + b.AssertFileContent("public/p1/index.html", "layouts/page/page.html") + b.AssertFileContent("public/p2/index.html", "layouts/page/page.html") + b.AssertFileContent("public/p3/index.html", "layouts/foo/page.html") + b.AssertFileContent("public/foo/p4/index.html", "layouts/foo/page.html") + b.AssertFileContent("public/bar/p5/index.html", "layouts/foo/page.html") + + files = strings.ReplaceAll(files, "-- layouts/page/page.html --", "-- delete-me-1.txt --") + files = strings.ReplaceAll(files, "-- layouts/foo/page.html --", "-- delete-me-2.txt --") + + b = Test(t, files) + + b.AssertFileContent("public/p1/index.html", "layouts/page.html") + b.AssertFileContent("public/p2/index.html", "layouts/page.html") + b.AssertFileContent("public/p3/index.html", "layouts/page.html") + b.AssertFileContent("public/foo/p4/index.html", "layouts/page.html") + b.AssertFileContent("public/bar/p5/index.html", "layouts/page.html") +}