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:
7
controllers/pages/_page_status.htm
Normal file
7
controllers/pages/_page_status.htm
Normal file
@@ -0,0 +1,7 @@
|
||||
{{- with .Data -}}
|
||||
{{- if .Text -}}
|
||||
<div class="summer-callout{{ if .Warning }} summer-callout--warning{{ end }}" role="status">
|
||||
<p class="summer-callout__text">{{ .Text }}</p>
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
18
controllers/pages/config_filter.yaml
Normal file
18
controllers/pages/config_filter.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
# Pages filters (UI-SPEC C21): kind, origin and missing from the newest
|
||||
# route report.
|
||||
scopes:
|
||||
kind:
|
||||
label: golem15.seo::lang.pages.kind
|
||||
modelClass: Golem15\SEO\Models\Page
|
||||
nameFrom: kind
|
||||
scope: FilterPageKind
|
||||
origin:
|
||||
label: golem15.seo::lang.pages.origin
|
||||
modelClass: Golem15\SEO\Models\Page
|
||||
nameFrom: origin
|
||||
scope: FilterPageOrigin
|
||||
missing:
|
||||
label: golem15.seo::lang.pages.filter_missing
|
||||
modelClass: Golem15\SEO\Models\Page
|
||||
nameFrom: url
|
||||
scope: FilterPageMissing
|
||||
20
controllers/pages/config_form.yaml
Normal file
20
controllers/pages/config_form.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
# Page form (UI-SPEC C21). The address and the name per locale come from
|
||||
# the plugin's own form extension on this controller; the SEO tab is added
|
||||
# because the registry is a content type (seo-page).
|
||||
name: golem15.seo::lang.pages.name
|
||||
form: ~/plugins/golem15/seo/models/page/fields.yaml
|
||||
modelClass: Golem15\SEO\Models\Page
|
||||
defaultRedirect: golem15/seo/pages
|
||||
|
||||
create:
|
||||
redirect: golem15/seo/pages/update/:id
|
||||
redirectClose: golem15/seo/pages
|
||||
|
||||
update:
|
||||
redirect: golem15/seo/pages
|
||||
redirectClose: golem15/seo/pages
|
||||
|
||||
messages:
|
||||
create: golem15.seo::lang.pages.new
|
||||
update: golem15.seo::lang.pages.name
|
||||
deleteConfirm: golem15.seo::lang.pages.delete_confirm
|
||||
26
controllers/pages/config_list.yaml
Normal file
26
controllers/pages/config_list.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
# Pages list (UI-SPEC C21): the page registry by address; reported pages
|
||||
# missing from the newest route report are marked.
|
||||
list: ~/plugins/golem15/seo/models/page/columns.yaml
|
||||
modelClass: Golem15\SEO\Models\Page
|
||||
title: golem15.seo::lang.pages.list_title
|
||||
recordUrl: golem15/seo/pages/update/:id
|
||||
noRecordsMessage: golem15.seo::lang.pages.list_empty
|
||||
recordsPerPage: 20
|
||||
showCheckboxes: true
|
||||
showSetup: true
|
||||
filter: config_filter.yaml
|
||||
|
||||
defaultSort:
|
||||
column: url
|
||||
direction: asc
|
||||
|
||||
toolbar:
|
||||
buttons: [create, delete]
|
||||
search:
|
||||
prompt: backend::lang.list.search_prompt
|
||||
|
||||
messages:
|
||||
create: golem15.seo::lang.pages.new
|
||||
empty: golem15.seo::lang.pages.list_empty
|
||||
deleteConfirm: golem15.seo::lang.pages.delete_selected_confirm
|
||||
rowStateNegative: golem15.seo::lang.pages.state_missing
|
||||
Reference in New Issue
Block a user