feat: page registry with its admin screen and signpost type
- golem15_seo_pages (migration 202610280002): the site's own frontend pages
with an address and a name per locale, kind, origin, parent, content date
and note; settings routes_reported_at
- SEO > Pages (golem15.seo.pages) after URL rules: list with kind, origin
and missing filters and the missing row state, form with the P9 partial;
the plugin's form extension saves the address and name per locale and
refuses url_required, url_invalid, url_taken and url_owned
- menu item type seo-page with a content descriptor, so each page gets
the SEO tab, resolves ok and is listed in the sitemaps grouped by kind
(pages, offers, services, landing-pages, titled per locale)
- management API GET/POST /_seo/api/v1/pages, PUT/DELETE /pages/{id} and
the MCP tools seo_list_pages, seo_create_page, seo_update_page,
seo_delete_page (in this commit because the operations parity test maps
every Pages operation to its tool)
This commit is contained in:
29
models/page/columns.yaml
Normal file
29
models/page/columns.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
# Pages list columns (UI-SPEC C21). kind and origin show their labels (the
|
||||
# controller's ListExtendRecords) and sort by the stored values.
|
||||
columns:
|
||||
url:
|
||||
label: golem15.seo::lang.pages.url
|
||||
type: text
|
||||
searchable: true
|
||||
sortable: true
|
||||
title:
|
||||
label: golem15.seo::lang.pages.title
|
||||
type: text
|
||||
searchable: true
|
||||
kind:
|
||||
label: golem15.seo::lang.pages.kind
|
||||
type: text
|
||||
sortable: true
|
||||
origin:
|
||||
label: golem15.seo::lang.pages.origin
|
||||
type: text
|
||||
sortable: true
|
||||
content_updated_at:
|
||||
label: golem15.seo::lang.pages.content_updated
|
||||
type: date
|
||||
sortable: true
|
||||
reported_at:
|
||||
label: golem15.seo::lang.pages.reported
|
||||
type: datetime
|
||||
sortable: true
|
||||
invisible: true
|
||||
43
models/page/fields.yaml
Normal file
43
models/page/fields.yaml
Normal file
@@ -0,0 +1,43 @@
|
||||
# Page form (UI-SPEC C21). url (after page_status) and title (after kind)
|
||||
# are translatable and added by the plugin's form extension, which stores
|
||||
# them per locale; the SEO tab follows.
|
||||
fields:
|
||||
page_status:
|
||||
type: partial
|
||||
path: page_status
|
||||
span: full
|
||||
context: update
|
||||
|
||||
kind:
|
||||
label: golem15.seo::lang.pages.kind
|
||||
comment: golem15.seo::lang.pages.kind_comment
|
||||
type: dropdown
|
||||
span: right
|
||||
default: page
|
||||
options:
|
||||
page: golem15.seo::lang.pages.kind_page
|
||||
offer: golem15.seo::lang.pages.kind_offer
|
||||
service: golem15.seo::lang.pages.kind_service
|
||||
landing: golem15.seo::lang.pages.kind_landing
|
||||
|
||||
parent_id:
|
||||
label: golem15.seo::lang.pages.parent
|
||||
comment: golem15.seo::lang.pages.parent_comment
|
||||
type: dropdown
|
||||
span: right
|
||||
emptyOption: golem15.seo::lang.pages.parent_none
|
||||
options: parentOptions
|
||||
|
||||
content_updated_at:
|
||||
label: golem15.seo::lang.pages.content_updated
|
||||
comment: golem15.seo::lang.pages.content_updated_comment
|
||||
type: datepicker
|
||||
mode: date
|
||||
span: left
|
||||
|
||||
note:
|
||||
label: golem15.seo::lang.pages.note
|
||||
comment: golem15.seo::lang.pages.note_comment
|
||||
type: textarea
|
||||
size: tiny
|
||||
span: full
|
||||
Reference in New Issue
Block a user