Fix some related content issues with content adapters

Fixes #13443
This commit is contained in:
Bjørn Erik Pedersen
2025-02-25 11:28:59 +01:00
parent 227e429267
commit 381c0da85d
8 changed files with 151 additions and 16 deletions

View File

@@ -180,6 +180,11 @@ type PageFragment interface {
resource.ResourceNameTitleProvider
}
type PageMetaResource interface {
PageMetaProvider
resource.Resource
}
// PageMetaProvider provides page metadata, typically provided via front matter.
type PageMetaProvider interface {
// The 4 page dates
@@ -251,6 +256,68 @@ type PageMetaProvider interface {
Weight() int
}
// NamedPageMetaValue returns a named metadata value from a PageMetaResource.
// This is currently only used to generate keywords for related content.
// If nameLower is not one of the metadata interface methods, we
// look in Params.
func NamedPageMetaValue(p PageMetaResource, nameLower string) (any, bool, error) {
var (
v any
err error
)
switch nameLower {
case "kind":
v = p.Kind()
case "bundletype":
v = p.BundleType()
case "mediatype":
v = p.MediaType()
case "section":
v = p.Section()
case "lang":
v = p.Lang()
case "aliases":
v = p.Aliases()
case "name":
v = p.Name()
case "keywords":
v = p.Keywords()
case "description":
v = p.Description()
case "title":
v = p.Title()
case "linktitle":
v = p.LinkTitle()
case "slug":
v = p.Slug()
case "date":
v = p.Date()
case "publishdate":
v = p.PublishDate()
case "expirydate":
v = p.ExpiryDate()
case "lastmod":
v = p.Lastmod()
case "draft":
v = p.Draft()
case "type":
v = p.Type()
case "layout":
v = p.Layout()
case "weight":
v = p.Weight()
default:
// Try params.
v, err = resource.Param(p, nil, nameLower)
if v == nil {
return nil, false, nil
}
}
return v, err == nil, err
}
// PageMetaInternalProvider provides internal page metadata.
type PageMetaInternalProvider interface {
// This is for internal use only.