Website
Páginas y formularios
Para qué sirve
Hold the content of a public website: pages, menus, blog posts and the form submissions visitors send. This app stores and organises content; something else renders it. Publishing needs approval.
Qué hace y qué no hace el paquete
Content for a public website: pages with a slug and a draft, published, archived flow, navigation menu items, blog posts with a byline and a publish date, translations of both, and the form submissions visitors send in. When the instance runs with the public site enabled it serves the published content to visitors as a server-rendered website with SEO and no login; only the fields marked public are ever visible to them. Publishing makes content public and needs a human approval, agents may only propose it. Senders are personal data and are never public.
Modelos
website_page
A page of the website
Grupo de lectura: website.user. Grupo de escritura: website.user.
| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
title | text | none | no | website.user | en claro | Page title |
slug | text | none | no | website.user | en claro | URL path of the page without slashes at the ends, lowercase with dashes, for example about-us. The page with slug home is the front page |
body | longtext | none | no | website.user | en claro | Page content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables) |
seo_title | text | none | no | website.user | en claro | Title shown in search results; empty means the page title |
seo_description | text | none | no | website.user | en claro | Description shown in search results |
published_on | date | none | no | website.user | en claro | Day the page went public (YYYY-MM-DD) |
state | select (draft, published, archived) | none | no | website.user | en claro | Page status: draft, published, archived |
website_menu_item
An entry of the site navigation
Grupo de lectura: website.user. Grupo de escritura: website.manager.
| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
label | text | none | no | website.user | en claro | Text shown in the menu |
url | text | none | no | website.user | en claro | Where the entry leads: a page slug starting with a slash or a full address |
parent_id | ref → website_menu_item | none | no | website.user | en claro | The entry this one is nested under; empty for a top-level entry |
sequence | number | none | no | website.user | en claro | Order among its siblings, lowest first |
visible | bool | none | no | website.user | en claro | Whether the entry is shown |
new_window | bool | none | no | website.user | en claro | Whether the link opens in a new window |
website_blog_post
A blog post
Grupo de lectura: website.user. Grupo de escritura: website.user.
| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
title | text | none | no | website.user | en claro | Post title |
slug | text | none | no | website.user | en claro | URL part of the post, lowercase with dashes |
author_name | text | public_directory | sí | website.user | enmascarado | Name of the author, for the team's own records |
byline | text | none | no | website.user | en claro | Author line shown publicly, for example the team or brand name; use a name here only if the person agreed to it |
summary | text | none | no | website.user | en claro | Teaser shown in listings |
body | longtext | none | no | website.user | en claro | Post content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables) |
tags | text | none | no | website.user | en claro | Comma-separated tags, for example news,product |
published_on | date | none | no | website.user | en claro | Day the post is dated (YYYY-MM-DD) |
state | select (draft, published, archived) | none | no | website.user | en claro | Post status: draft, published, archived |
website_form_submission
A message a visitor sent through a form on the site
Grupo de lectura: website.user. Grupo de escritura: website.user.
| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
form_name | text | none | no | website.user | en claro | Which form it came from, for example contact |
sender_name | text | internal | sí | website.user | enmascarado | Name the visitor gave |
sender_email | text | internal | sí | website.user | enmascarado | Email address the visitor gave |
sender_phone | text | internal | sí | website.user | enmascarado | Phone number the visitor gave |
message | longtext | internal | sí | website.user | enmascarado | What the visitor wrote |
source_page | text | none | no | website.user | en claro | Slug of the page the form was on |
submitted_on | date | none | no | website.user | en claro | Day of the submission (YYYY-MM-DD) |
consent_given | bool | none | no | website.user | en claro | Whether the visitor ticked the consent box for being contacted |
state | select (new, handled, spam) | none | no | website.user | en claro | Handling status: new, handled, spam |
website_page_translation
A page translated into another language; the public site shows it to visitors who read that language
Grupo de lectura: website.user. Grupo de escritura: website.user.
| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
page_id | ref → website_page | none | no | website.user | en claro | The page this translates |
lang | select (en, de, fr, pl, fi, sv, es) | none | no | website.user | en claro | Language of the translation: en, de, fr, pl, fi, sv or es |
title | text | none | no | website.user | en claro | Translated page title |
body | longtext | none | no | website.user | en claro | Translated page content in Markdown |
seo_title | text | none | no | website.user | en claro | Translated title shown in search results |
seo_description | text | none | no | website.user | en claro | Translated description shown in search results |
published | bool | none | no | website.user | en claro | Whether the translation is shown; it is only reachable while its page is published |
website_blog_post_translation
A blog post translated into another language
Grupo de lectura: website.user. Grupo de escritura: website.user.
| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
post_id | ref → website_blog_post | none | no | website.user | en claro | The post this translates |
lang | select (en, de, fr, pl, fi, sv, es) | none | no | website.user | en claro | Language of the translation: en, de, fr, pl, fi, sv or es |
title | text | none | no | website.user | en claro | Translated post title |
summary | text | none | no | website.user | en claro | Translated teaser |
body | longtext | none | no | website.user | en claro | Translated post content in Markdown |
published | bool | none | no | website.user | en claro | Whether the translation is shown; it is only reachable while its post is published |
Flujos de trabajo
website_page
| Acción | Mueve | Quién puede ejecutarla | Aprobación |
|---|---|---|---|
website_page.publish | state: draft → published | website.manager | sí |
website_page.unpublish | state: published → draft | website.manager | no |
website_page.archive | state: published → archived | website.manager | no |
website_blog_post
| Acción | Mueve | Quién puede ejecutarla | Aprobación |
|---|---|---|---|
website_blog_post.publish | state: draft → published | website.manager | sí |
website_blog_post.unpublish | state: published → draft | website.manager | no |
website_blog_post.archive | state: published → archived | website.manager | no |
website_form_submission
| Acción | Mueve | Quién puede ejecutarla | Aprobación |
|---|---|---|---|
website_form_submission.handle | state: new → handled | website.user | no |
website_form_submission.mark_spam | state: new → spam | website.user | no |
Grupos de permisos
Grupos que usa esta aplicación:
website.managerwebsite.user
Pasos con aprobación
Pasos que un agente solo puede proponer:
website_page.publishwebsite_blog_post.publish
Qué pueden y qué no pueden hacer los agentes
Un agente puede leer, buscar, crear y actualizar registros de esta aplicación, y ejecutar las acciones que no requieren aprobación, dentro de los grupos de permisos de su token.
Solo puede proponer estos pasos, y una persona debe aprobarlos: website_page.publish, website_blog_post.publish, website_page.delete, website_menu_item.delete, website_blog_post.delete, website_form_submission.delete, website_page_translation.delete, website_blog_post_translation.delete.
Los datos personales se enmascaran como tokens marcadores: website_blog_post.author_name, website_form_submission.sender_name, website_form_submission.sender_email, website_form_submission.sender_phone, website_form_submission.message.
Dependencias
Ninguna.
Instalación
Instálala desde la aplicación Customize (Marketplace) o desde la línea de comandos:
obop modules install-from websiteRequiere una base de datos y derechos de administrador.
Crea la tuya
La guía de módulos explica cómo se escriben aplicaciones como esta