mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-26 05:30:54 +03:00
resources/page: Add :contentbasename and :contentbasenameorslug permalink tokens
See #11722
This commit is contained in:
parent
157d3703c3
commit
cb7a4339b7
3 changed files with 45 additions and 13 deletions
|
@ -317,6 +317,14 @@ Use these tokens when defining the URL pattern. You can also use these tokens wh
|
||||||
`:slugorfilename`
|
`:slugorfilename`
|
||||||
: The slug as defined in front matter, else the content's file name without extension, applicable to the `page` page kind.
|
: The slug as defined in front matter, else the content's file name without extension, applicable to the `page` page kind.
|
||||||
|
|
||||||
|
`:contentbasename`
|
||||||
|
: The content base name, as defined in [`File.ContentBaseName`], applicable to pages backed by a file.
|
||||||
|
|
||||||
|
`:contentbasenameorslug`
|
||||||
|
: The content base name, else the slug as defined above.
|
||||||
|
|
||||||
|
[`File.ContentBaseName`]: /methods/page/file/#contentbasename
|
||||||
|
|
||||||
For time-related values, you can also use the layout string components defined in Go's [time package]. For example:
|
For time-related values, you can also use the layout string components defined in Go's [time package]. For example:
|
||||||
|
|
||||||
[time package]: https://pkg.go.dev/time#pkg-constants
|
[time package]: https://pkg.go.dev/time#pkg-constants
|
||||||
|
|
|
@ -79,19 +79,21 @@ func NewPermalinkExpander(urlize func(uri string) string, patterns map[string]ma
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
"slugorfilename": p.pageToPermalinkSlugElseFilename,
|
"slugorfilename": p.pageToPermalinkSlugElseFilename,
|
||||||
"filename": p.pageToPermalinkFilename,
|
"filename": p.pageToPermalinkFilename,
|
||||||
|
"contentbasename": p.pageToPermalinkContentBaseName,
|
||||||
|
"contentbasenameorslug": p.pageToPermalinkContentBaseNameOrSlug,
|
||||||
}
|
}
|
||||||
|
|
||||||
p.expanders = make(map[string]map[string]func(Page) (string, error))
|
p.expanders = make(map[string]map[string]func(Page) (string, error))
|
||||||
|
@ -307,6 +309,26 @@ func (l PermalinkExpander) pageToPermalinkSections(p Page, _ string) (string, er
|
||||||
return p.CurrentSection().SectionsPath(), nil
|
return p.CurrentSection().SectionsPath(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pageToPermalinkContentBaseName returns the URL-safe form of the content base name.
|
||||||
|
func (l PermalinkExpander) pageToPermalinkContentBaseName(p Page, _ string) (string, error) {
|
||||||
|
if p.File() == nil {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return l.urlize(p.File().ContentBaseName()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// pageToPermalinkContentBaseNameOrSlug returns the URL-safe form of the content base name, or the slug.
|
||||||
|
func (l PermalinkExpander) pageToPermalinkContentBaseNameOrSlug(p Page, a string) (string, error) {
|
||||||
|
name, err := l.pageToPermalinkContentBaseName(p, a)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
if name != "" {
|
||||||
|
return name, nil
|
||||||
|
}
|
||||||
|
return l.pageToPermalinkSlugElseTitle(p, a)
|
||||||
|
}
|
||||||
|
|
||||||
func (l PermalinkExpander) translationBaseName(p Page) string {
|
func (l PermalinkExpander) translationBaseName(p Page) string {
|
||||||
if p.File() == nil {
|
if p.File() == nil {
|
||||||
return ""
|
return ""
|
||||||
|
|
|
@ -46,6 +46,8 @@ var testdataPermalinks = []struct {
|
||||||
{"/:sections[0]/:sections[last]/", true, "/a/c/"}, // Sections
|
{"/:sections[0]/:sections[last]/", true, "/a/c/"}, // Sections
|
||||||
{"/\\:filename", true, "/:filename"}, // Escape sequence
|
{"/\\:filename", true, "/:filename"}, // Escape sequence
|
||||||
{"/special\\::slug/", true, "/special:the-slug/"}, // Escape sequence
|
{"/special\\::slug/", true, "/special:the-slug/"}, // Escape sequence
|
||||||
|
{"/:contentbasename/", true, "/index/"}, // Content base name
|
||||||
|
{"/:contentbasenameorslug/", true, "/index/"}, // Content base name or slug
|
||||||
|
|
||||||
// Failures
|
// Failures
|
||||||
{"/blog/:fred", false, ""},
|
{"/blog/:fred", false, ""},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue