Website

Seiten und Formulare

MarktplatzInhalte und DokumenteVersion 0.2.0manifest

Wofür sie gedacht ist ​

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.

Was das Paket leistet und was nicht ​

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.

Modelle ​

website_page ​

A page of the website

Lesegruppe: website.user. Schreibgruppe: website.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
titletextnoneneinwebsite.userim KlartextPage title
slugtextnoneneinwebsite.userim KlartextURL 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
bodylongtextnoneneinwebsite.userim KlartextPage content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables)
seo_titletextnoneneinwebsite.userim KlartextTitle shown in search results; empty means the page title
seo_descriptiontextnoneneinwebsite.userim KlartextDescription shown in search results
published_ondatenoneneinwebsite.userim KlartextDay the page went public (YYYY-MM-DD)
stateselect (draft, published, archived)noneneinwebsite.userim KlartextPage status: draft, published, archived

website_menu_item ​

An entry of the site navigation

Lesegruppe: website.user. Schreibgruppe: website.manager.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
labeltextnoneneinwebsite.userim KlartextText shown in the menu
urltextnoneneinwebsite.userim KlartextWhere the entry leads: a page slug starting with a slash or a full address
parent_idref → website_menu_itemnoneneinwebsite.userim KlartextThe entry this one is nested under; empty for a top-level entry
sequencenumbernoneneinwebsite.userim KlartextOrder among its siblings, lowest first
visibleboolnoneneinwebsite.userim KlartextWhether the entry is shown
new_windowboolnoneneinwebsite.userim KlartextWhether the link opens in a new window

website_blog_post ​

A blog post

Lesegruppe: website.user. Schreibgruppe: website.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
titletextnoneneinwebsite.userim KlartextPost title
slugtextnoneneinwebsite.userim KlartextURL part of the post, lowercase with dashes
author_nametextpublic_directoryjawebsite.usermaskiertName of the author, for the team's own records
bylinetextnoneneinwebsite.userim KlartextAuthor line shown publicly, for example the team or brand name; use a name here only if the person agreed to it
summarytextnoneneinwebsite.userim KlartextTeaser shown in listings
bodylongtextnoneneinwebsite.userim KlartextPost content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables)
tagstextnoneneinwebsite.userim KlartextComma-separated tags, for example news,product
published_ondatenoneneinwebsite.userim KlartextDay the post is dated (YYYY-MM-DD)
stateselect (draft, published, archived)noneneinwebsite.userim KlartextPost status: draft, published, archived

website_form_submission ​

A message a visitor sent through a form on the site

Lesegruppe: website.user. Schreibgruppe: website.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
form_nametextnoneneinwebsite.userim KlartextWhich form it came from, for example contact
sender_nametextinternaljawebsite.usermaskiertName the visitor gave
sender_emailtextinternaljawebsite.usermaskiertEmail address the visitor gave
sender_phonetextinternaljawebsite.usermaskiertPhone number the visitor gave
messagelongtextinternaljawebsite.usermaskiertWhat the visitor wrote
source_pagetextnoneneinwebsite.userim KlartextSlug of the page the form was on
submitted_ondatenoneneinwebsite.userim KlartextDay of the submission (YYYY-MM-DD)
consent_givenboolnoneneinwebsite.userim KlartextWhether the visitor ticked the consent box for being contacted
stateselect (new, handled, spam)noneneinwebsite.userim KlartextHandling status: new, handled, spam

website_page_translation ​

A page translated into another language; the public site shows it to visitors who read that language

Lesegruppe: website.user. Schreibgruppe: website.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
page_idref → website_pagenoneneinwebsite.userim KlartextThe page this translates
langselect (en, de, fr, pl, fi, sv, es)noneneinwebsite.userim KlartextLanguage of the translation: en, de, fr, pl, fi, sv or es
titletextnoneneinwebsite.userim KlartextTranslated page title
bodylongtextnoneneinwebsite.userim KlartextTranslated page content in Markdown
seo_titletextnoneneinwebsite.userim KlartextTranslated title shown in search results
seo_descriptiontextnoneneinwebsite.userim KlartextTranslated description shown in search results
publishedboolnoneneinwebsite.userim KlartextWhether the translation is shown; it is only reachable while its page is published

website_blog_post_translation ​

A blog post translated into another language

Lesegruppe: website.user. Schreibgruppe: website.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
post_idref → website_blog_postnoneneinwebsite.userim KlartextThe post this translates
langselect (en, de, fr, pl, fi, sv, es)noneneinwebsite.userim KlartextLanguage of the translation: en, de, fr, pl, fi, sv or es
titletextnoneneinwebsite.userim KlartextTranslated post title
summarytextnoneneinwebsite.userim KlartextTranslated teaser
bodylongtextnoneneinwebsite.userim KlartextTranslated post content in Markdown
publishedboolnoneneinwebsite.userim KlartextWhether the translation is shown; it is only reachable while its post is published

Workflows ​

website_page ​

AktionBewegtWer sie ausführen darfFreigabe
website_page.publishstate: draft → publishedwebsite.managerja
website_page.unpublishstate: published → draftwebsite.managernein
website_page.archivestate: published → archivedwebsite.managernein

website_blog_post ​

AktionBewegtWer sie ausführen darfFreigabe
website_blog_post.publishstate: draft → publishedwebsite.managerja
website_blog_post.unpublishstate: published → draftwebsite.managernein
website_blog_post.archivestate: published → archivedwebsite.managernein

website_form_submission ​

AktionBewegtWer sie ausführen darfFreigabe
website_form_submission.handlestate: new → handledwebsite.usernein
website_form_submission.mark_spamstate: new → spamwebsite.usernein

Berechtigungsgruppen ​

Von dieser App verwendete Gruppen:

  • website.manager
  • website.user

Freigabeschritte ​

Schritte, die ein Agent nur vorschlagen kann:

  • website_page.publish
  • website_blog_post.publish

Was Agenten tun können und was nicht ​

Ein Agent kann Datensätze dieser App lesen, durchsuchen, anlegen und aktualisieren sowie Aktionen ausführen, die keine Freigabe brauchen, und zwar innerhalb der Berechtigungsgruppen seines Tokens.

Diese Schritte kann er nur vorschlagen, und eine Person muss sie freigeben: 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.

Personenbezogene Daten werden als Platzhalter maskiert: website_blog_post.author_name, website_form_submission.sender_name, website_form_submission.sender_email, website_form_submission.sender_phone, website_form_submission.message.

Abhängigkeiten ​

Keine.

Installation ​

Installieren Sie sie in der App Customize (Marktplatz) oder über die Kommandozeile:

bash
obop modules install-from website

Erfordert eine Datenbank und Administratorrechte.

Selbst bauen ​

Der Modulleitfaden zeigt, wie Apps wie diese geschrieben werden