Website

Strony i formularze

MarketplaceTreści i dokumentyWersja 0.2.0manifest

Do czego służy ​

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.

Co pakiet robi, a czego nie robi ​

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.

Modele ​

website_page ​

A page of the website

Grupa odczytu: website.user. Grupa zapisu: website.user.

PoleRodzajKlasa danychDane osoboweGrupaAgenci widząOpis
titletextnoneniewebsite.userjawniePage title
slugtextnoneniewebsite.userjawnieURL 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
bodylongtextnoneniewebsite.userjawniePage content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables)
seo_titletextnoneniewebsite.userjawnieTitle shown in search results; empty means the page title
seo_descriptiontextnoneniewebsite.userjawnieDescription shown in search results
published_ondatenoneniewebsite.userjawnieDay the page went public (YYYY-MM-DD)
stateselect (draft, published, archived)noneniewebsite.userjawniePage status: draft, published, archived

website_menu_item ​

An entry of the site navigation

Grupa odczytu: website.user. Grupa zapisu: website.manager.

PoleRodzajKlasa danychDane osoboweGrupaAgenci widząOpis
labeltextnoneniewebsite.userjawnieText shown in the menu
urltextnoneniewebsite.userjawnieWhere the entry leads: a page slug starting with a slash or a full address
parent_idref → website_menu_itemnoneniewebsite.userjawnieThe entry this one is nested under; empty for a top-level entry
sequencenumbernoneniewebsite.userjawnieOrder among its siblings, lowest first
visibleboolnoneniewebsite.userjawnieWhether the entry is shown
new_windowboolnoneniewebsite.userjawnieWhether the link opens in a new window

website_blog_post ​

A blog post

Grupa odczytu: website.user. Grupa zapisu: website.user.

PoleRodzajKlasa danychDane osoboweGrupaAgenci widząOpis
titletextnoneniewebsite.userjawniePost title
slugtextnoneniewebsite.userjawnieURL part of the post, lowercase with dashes
author_nametextpublic_directorytakwebsite.userzamaskowaneName of the author, for the team's own records
bylinetextnoneniewebsite.userjawnieAuthor line shown publicly, for example the team or brand name; use a name here only if the person agreed to it
summarytextnoneniewebsite.userjawnieTeaser shown in listings
bodylongtextnoneniewebsite.userjawniePost content in Markdown (a safe subset: headings, lists, links, emphasis, code, quotes, tables)
tagstextnoneniewebsite.userjawnieComma-separated tags, for example news,product
published_ondatenoneniewebsite.userjawnieDay the post is dated (YYYY-MM-DD)
stateselect (draft, published, archived)noneniewebsite.userjawniePost status: draft, published, archived

website_form_submission ​

A message a visitor sent through a form on the site

Grupa odczytu: website.user. Grupa zapisu: website.user.

PoleRodzajKlasa danychDane osoboweGrupaAgenci widząOpis
form_nametextnoneniewebsite.userjawnieWhich form it came from, for example contact
sender_nametextinternaltakwebsite.userzamaskowaneName the visitor gave
sender_emailtextinternaltakwebsite.userzamaskowaneEmail address the visitor gave
sender_phonetextinternaltakwebsite.userzamaskowanePhone number the visitor gave
messagelongtextinternaltakwebsite.userzamaskowaneWhat the visitor wrote
source_pagetextnoneniewebsite.userjawnieSlug of the page the form was on
submitted_ondatenoneniewebsite.userjawnieDay of the submission (YYYY-MM-DD)
consent_givenboolnoneniewebsite.userjawnieWhether the visitor ticked the consent box for being contacted
stateselect (new, handled, spam)noneniewebsite.userjawnieHandling status: new, handled, spam

website_page_translation ​

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

Grupa odczytu: website.user. Grupa zapisu: website.user.

PoleRodzajKlasa danychDane osoboweGrupaAgenci widząOpis
page_idref → website_pagenoneniewebsite.userjawnieThe page this translates
langselect (en, de, fr, pl, fi, sv, es)noneniewebsite.userjawnieLanguage of the translation: en, de, fr, pl, fi, sv or es
titletextnoneniewebsite.userjawnieTranslated page title
bodylongtextnoneniewebsite.userjawnieTranslated page content in Markdown
seo_titletextnoneniewebsite.userjawnieTranslated title shown in search results
seo_descriptiontextnoneniewebsite.userjawnieTranslated description shown in search results
publishedboolnoneniewebsite.userjawnieWhether the translation is shown; it is only reachable while its page is published

website_blog_post_translation ​

A blog post translated into another language

Grupa odczytu: website.user. Grupa zapisu: website.user.

PoleRodzajKlasa danychDane osoboweGrupaAgenci widząOpis
post_idref → website_blog_postnoneniewebsite.userjawnieThe post this translates
langselect (en, de, fr, pl, fi, sv, es)noneniewebsite.userjawnieLanguage of the translation: en, de, fr, pl, fi, sv or es
titletextnoneniewebsite.userjawnieTranslated post title
summarytextnoneniewebsite.userjawnieTranslated teaser
bodylongtextnoneniewebsite.userjawnieTranslated post content in Markdown
publishedboolnoneniewebsite.userjawnieWhether the translation is shown; it is only reachable while its post is published

Przepływy pracy ​

website_page ​

AkcjaPrzenosiKto może uruchomićZatwierdzenie
website_page.publishstate: draft → publishedwebsite.managertak
website_page.unpublishstate: published → draftwebsite.managernie
website_page.archivestate: published → archivedwebsite.managernie

website_blog_post ​

AkcjaPrzenosiKto może uruchomićZatwierdzenie
website_blog_post.publishstate: draft → publishedwebsite.managertak
website_blog_post.unpublishstate: published → draftwebsite.managernie
website_blog_post.archivestate: published → archivedwebsite.managernie

website_form_submission ​

AkcjaPrzenosiKto może uruchomićZatwierdzenie
website_form_submission.handlestate: new → handledwebsite.usernie
website_form_submission.mark_spamstate: new → spamwebsite.usernie

Grupy uprawnień ​

Grupy używane przez tę aplikację:

  • website.manager
  • website.user

Kroki zatwierdzania ​

Kroki, które agent może tylko zaproponować:

  • website_page.publish
  • website_blog_post.publish

Co agenci mogą, a czego nie mogą ​

Agent może odczytywać, wyszukiwać, tworzyć i aktualizować rekordy tej aplikacji oraz uruchamiać akcje niewymagające zatwierdzenia, w ramach grup uprawnień swojego tokenu.

Te kroki może tylko zaproponować, a człowiek musi je zatwierdzić: 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.

Dane osobowe są maskowane jako tokeny zastępcze: website_blog_post.author_name, website_form_submission.sender_name, website_form_submission.sender_email, website_form_submission.sender_phone, website_form_submission.message.

Zależności ​

Brak.

Instalacja ​

Zainstaluj ją w aplikacji Customize (Marketplace) lub z wiersza poleceń:

bash
obop modules install-from website

Wymaga bazy danych i uprawnień administratora.

Zbuduj własną ​

Przewodnik po modułach pokazuje, jak pisze się takie aplikacje