Website

Páginas y formularios

MarketplaceContenido y documentosVersión 0.2.0manifest

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.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
titletextnonenowebsite.useren claroPage title
slugtextnonenowebsite.useren claroURL 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
bodylongtextnonenowebsite.useren claroPage content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables)
seo_titletextnonenowebsite.useren claroTitle shown in search results; empty means the page title
seo_descriptiontextnonenowebsite.useren claroDescription shown in search results
published_ondatenonenowebsite.useren claroDay the page went public (YYYY-MM-DD)
stateselect (draft, published, archived)nonenowebsite.useren claroPage status: draft, published, archived

website_menu_item ​

An entry of the site navigation

Grupo de lectura: website.user. Grupo de escritura: website.manager.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
labeltextnonenowebsite.useren claroText shown in the menu
urltextnonenowebsite.useren claroWhere the entry leads: a page slug starting with a slash or a full address
parent_idref → website_menu_itemnonenowebsite.useren claroThe entry this one is nested under; empty for a top-level entry
sequencenumbernonenowebsite.useren claroOrder among its siblings, lowest first
visibleboolnonenowebsite.useren claroWhether the entry is shown
new_windowboolnonenowebsite.useren claroWhether the link opens in a new window

website_blog_post ​

A blog post

Grupo de lectura: website.user. Grupo de escritura: website.user.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
titletextnonenowebsite.useren claroPost title
slugtextnonenowebsite.useren claroURL part of the post, lowercase with dashes
author_nametextpublic_directorysíwebsite.userenmascaradoName of the author, for the team's own records
bylinetextnonenowebsite.useren claroAuthor line shown publicly, for example the team or brand name; use a name here only if the person agreed to it
summarytextnonenowebsite.useren claroTeaser shown in listings
bodylongtextnonenowebsite.useren claroPost content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables)
tagstextnonenowebsite.useren claroComma-separated tags, for example news,product
published_ondatenonenowebsite.useren claroDay the post is dated (YYYY-MM-DD)
stateselect (draft, published, archived)nonenowebsite.useren claroPost 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.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
form_nametextnonenowebsite.useren claroWhich form it came from, for example contact
sender_nametextinternalsíwebsite.userenmascaradoName the visitor gave
sender_emailtextinternalsíwebsite.userenmascaradoEmail address the visitor gave
sender_phonetextinternalsíwebsite.userenmascaradoPhone number the visitor gave
messagelongtextinternalsíwebsite.userenmascaradoWhat the visitor wrote
source_pagetextnonenowebsite.useren claroSlug of the page the form was on
submitted_ondatenonenowebsite.useren claroDay of the submission (YYYY-MM-DD)
consent_givenboolnonenowebsite.useren claroWhether the visitor ticked the consent box for being contacted
stateselect (new, handled, spam)nonenowebsite.useren claroHandling 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.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
page_idref → website_pagenonenowebsite.useren claroThe page this translates
langselect (en, de, fr, pl, fi, sv, es)nonenowebsite.useren claroLanguage of the translation: en, de, fr, pl, fi, sv or es
titletextnonenowebsite.useren claroTranslated page title
bodylongtextnonenowebsite.useren claroTranslated page content in Markdown
seo_titletextnonenowebsite.useren claroTranslated title shown in search results
seo_descriptiontextnonenowebsite.useren claroTranslated description shown in search results
publishedboolnonenowebsite.useren claroWhether 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.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
post_idref → website_blog_postnonenowebsite.useren claroThe post this translates
langselect (en, de, fr, pl, fi, sv, es)nonenowebsite.useren claroLanguage of the translation: en, de, fr, pl, fi, sv or es
titletextnonenowebsite.useren claroTranslated post title
summarytextnonenowebsite.useren claroTranslated teaser
bodylongtextnonenowebsite.useren claroTranslated post content in Markdown
publishedboolnonenowebsite.useren claroWhether the translation is shown; it is only reachable while its post is published

Flujos de trabajo ​

website_page ​

AcciónMueveQuién puede ejecutarlaAprobación
website_page.publishstate: draft → publishedwebsite.managersí
website_page.unpublishstate: published → draftwebsite.managerno
website_page.archivestate: published → archivedwebsite.managerno

website_blog_post ​

AcciónMueveQuién puede ejecutarlaAprobación
website_blog_post.publishstate: draft → publishedwebsite.managersí
website_blog_post.unpublishstate: published → draftwebsite.managerno
website_blog_post.archivestate: published → archivedwebsite.managerno

website_form_submission ​

AcciónMueveQuién puede ejecutarlaAprobación
website_form_submission.handlestate: new → handledwebsite.userno
website_form_submission.mark_spamstate: new → spamwebsite.userno

Grupos de permisos ​

Grupos que usa esta aplicación:

  • website.manager
  • website.user

Pasos con aprobación ​

Pasos que un agente solo puede proponer:

  • website_page.publish
  • website_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:

bash
obop modules install-from website

Requiere 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