Maják
Maják je CMS pro Pirátské weby. Postavený je na Wagtail.
Pod pokličkou
Wagtail a Django jsou poměrně vyspělé frameworky. Vždy mysli na to, že problém co řešíš, už pravděpodobně řešil někdo před tebou. A obvykle existuje elegantní řešení.
Pár užitečných odkazů:
A za zmínku stojí Awesome Wagtail jako přehled pluginů a rozšíření pro Wagtail.
Rozšíření která používáme:
-
wagtail-metadata
- upravený template
shared/templates/wagtailmetadata/parts/tags.html
- upravený template
Struktura projektu
.
├── donate = app na web dary.pirati.cz
├── elections2021 = app na količní web k volbám 2021
├── senate = app na web senat.pirati.cz
├── senat_campaign = app na weby kandidátů na senátory
├── districts = app na web kraje.pirati.cz
├── region = app na weby krajskych sdruzeni
├── district = app na weby mistnich sdruzeni
├── uniweb = app na univerzalni webove stranky
...
├── majak = Django projekt s konfigurací Majáku
├── shared = app se sdílenými static soubory a templaty pro weby
├── calendar_utils = app s modelem a utilitami na iCal kalendáře
├── tuning = app na tuning administračního rozhraní Majáku
└── users = app s custom user modelem a SSO, apod.
Poznámky k uspořádání:
- nesdílíme a nemícháme modely zděděné z
Page
mezi jednotlivými appkami a weby, abychom předešli rozbití cizího webu - části definice tříd stránek sdílíme jako mixin pattern (
shared.models.ArticleMixin
,share.models.SubpageMixin
, apod.) - sdílet se mohou obyčejné Django modely z
models.Model
, ale umístěné v nějaké appce/knihovně určené pro sdílení (shared
,calendar_utils
, apod.), nikoliv mezi weby (mezi appkami na weby by nikdy neměly vzniknout závislosti)
Konfigurace webu
Konfigurace konkrétního webu (odkazy do patičky, Matomo ID, apod.) se definuje v
kořenové xxxHomePage
webu. Je to pro uživatele snažší na správu než
Site Settings
Wagtailu pro konfigurace webů. A pro vývojáře je to skoro jedno.
Z různých podstránek webu se k té konfiguraci dostaneme přes property root_page
kterou přidává shared.models.SubpageMixin
. V xxxHomePage
webu je třeba
definovat root_page
tak, aby vedla na self
.
Styleguide
Některé weby využívají Pirátskou UI styleguide pro vzhled. Idea je, že se budou sdílet nejen statické assety (CSS, JS, ...), ale i univerzální kusy template, které se dají includovat v různých webech (patička webu, karta článku do přehledu, atp.).
Sdílené části využívané na více webech se umísťují do:
shared/static/styleguideXX/ = statické assety (CSS, JS, obrázky, ...)
shared/templates/styleguideXX/ = snippety pro include v templatech
XX
v názvu adresáře je číslo major a minor verze šablony. Např. styleguide18
obsahuje věci ze šablony verze 1.8.x
. Důvodem je snažší migrace na novější
verze šablony, které mohou obsahovat nekompatibilní změny. Každý web tak může
(a nemusí) migrovat nezávisle dle potřeby.
Různé verze šablony jsou k vidění na styleguide.pirati.cz
Kalendáře
Pro práci s kalendáři v iCal formátu je připravena appka calendar_utils
.
Poskytuje CalendarMixin
do modelu, který přidá fieldy calendar_url
pro
editaci a calendar
pro vazbu na model Calendar
(který se plní a automaticky
spravuje na pozadí). Typicky se použije ve Wagtail settings pro web, kde stačí
calendar_url
zpřístupnit pro editaci.
Kalendář se stáhne při uložení modelu obsahujícího CalendarMixin
.
Appka přidává management command update_callendars
, který stahuje a updatuje
kalendáře. Je třeba ho pravidelně volat na pozadí (přes CRON).
Celery (Import z Jekyllu)
Import z Jekyll GitHub repozitářů pirátských webů je řešen asynchroně přes Celery. Celery využívá Redis, který může běžet např. lokálně, typicky 6379: V envu pak je pak potřeba mít nastavený Celery broker: