mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
cbc35c48d2
commit
5a9ecb82a3
3 changed files with 39 additions and 14 deletions
|
@ -91,6 +91,9 @@ The following is a list of values that can be used in a `permalink` definition i
|
||||||
`:slug`
|
`:slug`
|
||||||
: the content's slug (or title if no slug is provided in the front matter)
|
: the content's slug (or title if no slug is provided in the front matter)
|
||||||
|
|
||||||
|
`:slugorfilename`
|
||||||
|
: the content's slug (or filename if no slug is provided in the front matter)
|
||||||
|
|
||||||
`:filename`
|
`:filename`
|
||||||
: the content's filename (without extension)
|
: the content's filename (without extension)
|
||||||
|
|
||||||
|
|
|
@ -72,18 +72,19 @@ func NewPermalinkExpander(ps *helpers.PathSpec) (PermalinkExpander, error) {
|
||||||
p := PermalinkExpander{ps: ps}
|
p := PermalinkExpander{ps: ps}
|
||||||
|
|
||||||
p.knownPermalinkAttributes = map[string]pageToPermaAttribute{
|
p.knownPermalinkAttributes = map[string]pageToPermaAttribute{
|
||||||
"year": p.pageToPermalinkDate,
|
"year": p.pageToPermalinkDate,
|
||||||
"month": p.pageToPermalinkDate,
|
"month": p.pageToPermalinkDate,
|
||||||
"monthname": p.pageToPermalinkDate,
|
"monthname": p.pageToPermalinkDate,
|
||||||
"day": p.pageToPermalinkDate,
|
"day": p.pageToPermalinkDate,
|
||||||
"weekday": p.pageToPermalinkDate,
|
"weekday": p.pageToPermalinkDate,
|
||||||
"weekdayname": p.pageToPermalinkDate,
|
"weekdayname": p.pageToPermalinkDate,
|
||||||
"yearday": p.pageToPermalinkDate,
|
"yearday": p.pageToPermalinkDate,
|
||||||
"section": p.pageToPermalinkSection,
|
"section": p.pageToPermalinkSection,
|
||||||
"sections": p.pageToPermalinkSections,
|
"sections": p.pageToPermalinkSections,
|
||||||
"title": p.pageToPermalinkTitle,
|
"title": p.pageToPermalinkTitle,
|
||||||
"slug": p.pageToPermalinkSlugElseTitle,
|
"slug": p.pageToPermalinkSlugElseTitle,
|
||||||
"filename": p.pageToPermalinkFilename,
|
"slugorfilename": p.pageToPermalinkSlugElseFilename,
|
||||||
|
"filename": p.pageToPermalinkFilename,
|
||||||
}
|
}
|
||||||
|
|
||||||
patterns := ps.Cfg.GetStringMapString("permalinks")
|
patterns := ps.Cfg.GetStringMapString("permalinks")
|
||||||
|
@ -266,6 +267,14 @@ func (l PermalinkExpander) pageToPermalinkSlugElseTitle(p Page, a string) (strin
|
||||||
return l.pageToPermalinkTitle(p, a)
|
return l.pageToPermalinkTitle(p, a)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if the page has a slug, return the slug, else return the filename
|
||||||
|
func (l PermalinkExpander) pageToPermalinkSlugElseFilename(p Page, a string) (string, error) {
|
||||||
|
if p.Slug() != "" {
|
||||||
|
return l.ps.URLize(p.Slug()), nil
|
||||||
|
}
|
||||||
|
return l.pageToPermalinkFilename(p, a)
|
||||||
|
}
|
||||||
|
|
||||||
func (l PermalinkExpander) pageToPermalinkSection(p Page, _ string) (string, error) {
|
func (l PermalinkExpander) pageToPermalinkSection(p Page, _ string) (string, error) {
|
||||||
return p.Section(), nil
|
return p.Section(), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ var testdataPermalinks = []struct {
|
||||||
{"/:section/", true, "/blue/"}, // Section
|
{"/:section/", true, "/blue/"}, // Section
|
||||||
{"/:title/", true, "/spf13-vim-3.0-release-and-new-website/"}, // Title
|
{"/:title/", true, "/spf13-vim-3.0-release-and-new-website/"}, // Title
|
||||||
{"/:slug/", true, "/the-slug/"}, // Slug
|
{"/:slug/", true, "/the-slug/"}, // Slug
|
||||||
|
{"/:slugorfilename/", true, "/the-slug/"}, // Slug or filename
|
||||||
{"/:filename/", true, "/test-page/"}, // Filename
|
{"/:filename/", true, "/test-page/"}, // Filename
|
||||||
{"/:06-:1-:2-:Monday", true, "/12-4-6-Friday"}, // Dates with Go formatting
|
{"/:06-:1-:2-:Monday", true, "/12-4-6-Friday"}, // Dates with Go formatting
|
||||||
{"/:2006_01_02_15_04_05.000", true, "/2012_04_06_03_01_59.000"}, // Complicated custom date format
|
{"/:2006_01_02_15_04_05.000", true, "/2012_04_06_03_01_59.000"}, // Complicated custom date format
|
||||||
|
@ -102,9 +103,13 @@ func TestPermalinkExpansionMultiSection(t *testing.T) {
|
||||||
page.section = "blue"
|
page.section = "blue"
|
||||||
page.slug = "The Slug"
|
page.slug = "The Slug"
|
||||||
|
|
||||||
|
page_slug_fallback := newTestPageWithFile("/page-filename/index.md")
|
||||||
|
page_slug_fallback.title = "Page Title"
|
||||||
|
|
||||||
permalinksConfig := map[string]string{
|
permalinksConfig := map[string]string{
|
||||||
"posts": "/:slug",
|
"posts": "/:slug",
|
||||||
"blog": "/:section/:year",
|
"blog": "/:section/:year",
|
||||||
|
"recipes": "/:slugorfilename",
|
||||||
}
|
}
|
||||||
|
|
||||||
ps := newTestPathSpec()
|
ps := newTestPathSpec()
|
||||||
|
@ -120,6 +125,14 @@ func TestPermalinkExpansionMultiSection(t *testing.T) {
|
||||||
expanded, err = expander.Expand("blog", page)
|
expanded, err = expander.Expand("blog", page)
|
||||||
c.Assert(err, qt.IsNil)
|
c.Assert(err, qt.IsNil)
|
||||||
c.Assert(expanded, qt.Equals, "/blue/2012")
|
c.Assert(expanded, qt.Equals, "/blue/2012")
|
||||||
|
|
||||||
|
expanded, err = expander.Expand("posts", page_slug_fallback)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(expanded, qt.Equals, "/page-title")
|
||||||
|
|
||||||
|
expanded, err = expander.Expand("recipes", page_slug_fallback)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(expanded, qt.Equals, "/page-filename")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPermalinkExpansionConcurrent(t *testing.T) {
|
func TestPermalinkExpansionConcurrent(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue