Drupal: prečo a ako ho používame
Drupal, pre niektorých známe a pre iných úplne cudzie CMS (Content Management System), ktoré konkuruje aj známejším systémom ako Wordpress alebo Joomla. U nás na firme sa mu venujeme už od jeho prehistorických verzií (6 a 7) a dnes ho udržiavame na desiatkach webov vo verzii 10.
Toto CMS používame pre prípady, kedy klient potrebuje plnú kontrolu nad obsahom a aktualizuje ho aj na dennej báze. Za tú dobu, čo Drupal používame, sme spoznali jeho dobré i zlé stránky, a preto sme dali dokopy zhrnutie prístupu, ktorý volíme pri vývoji webu v Drupale.
Prečo sme sa rozhodli pre Drupal?
Pár rokov dozadu sme robili prieskum a rozhodovali sa, aký CMS systém chceme používať v našom technologickom balíčku. K dispozícii bolo veľa možností, no po ich prefiltrovaní sme skončili pri výbere medzi open-source kandidátmi: Wordpress a Drupal.
Wordpress nie je pre nás úplný “fit”. Je síce viac lightweight ako Drupal a pre širokú verejnosť populárnejší, no nespĺňal našu požiadavku byť založený na nejakom PHP framework-u a rovnako sa nezakladal ani na princípoch OOP (Object Oriented Programming). Pozitívom je, že väčšina pluginov je vyvíjaná komunitou, avšak nie sú nijako kontrolované, z čoho plynie bezpečnostné riziko. Pluginy, ktoré považujeme za funkcionalitu jadra CMS, nie sú voľne dostupné a rovnako sa nám nepozdáva ani ideológia automatických aktualizácií, kedy sa jedným klikom aktualizuje celý web, vrátane pluginov, nad databázou zbehnú migrácie a človek môže len dúfať, že web funguje. Wordpress vnímame ako CMS pre blogy a menšie weby, no nie ako CMS pre väčšie projekty, kde je častokrát potrebné riešiť rozšírenie funkcionality na mieru pre klienta.
Na základe spomínaných, ale aj iných ďalších kritérií, sme sa rozhodli používať Drupal. Rozhodnutie dodnes neľutujeme, dokonca medzitým sa posunul - v ponímaní OOP - ešte ďalej, čo nám umožňuje aj lepšie rozširovanie jeho jadra. Napriek väčšej robustnosti (ktorú nepovažujeme za negatívum) je založený na PHP frameworku Symfony a jadro Drupalu poskytuje širokú škálu funkcionality (cacheovanie, viacjazyčnosť, používateľské role a veľa iného). Moduly v Drupale sú, rovnako ako tie Wordpress-ové, vyvíjané komunitou a skoro všetky sú zadarmo - v rámci oficiálnej stránky drupal.org, sú kontrolované a schvaľované, čo minimalizuje bezpečnostné riziko. Samozrejme nájdu sa aj platené moduly, kde sa ale väčšinou jedná o moduly z balíčkov služieb alebo moduly rôznych väčších spoločností, ktoré sa venujú vývoju Drupalu. Veľkým plusom je aj to, že vývojári dokážu v Drupale vytvárať rôzne druhy entít a blokov, čo dokáže zmierniť úroveň abstrakcie a uľahčiť tak prácu aj vývojárom aj editorom webov.
Naša konfigurácia pre projekty
Dnes prevádzkujeme Drupal v Docker kontajneroch, najčastejšie v kombinácii s MariaDB databázou. Nájdu sa ale aj prípady, kedy klient vyžaduje iný databázový server, napríklad PostgreSQL. Keďže nový projekt štartujeme pomerne často, používame nástroj Yeoman, v rámci ktorého máme vytvorenú šablónu na inicializáciu nových webov.
Na správu balíčkov používame známy Composer (PHP manažér balíčkov), cez ktorý inštalujeme či už samotné jadro Drupalu, alebo iné vendor závislosti v podobe Drupal modulov, ktoré štandardne používame.
Najbežnejšími z týchto modulov, ktoré používame skoro stále, sú nasledovné:
- Antibot – Prevencia pred SPAMom
- Admin toolbar - Vylepšená lišta administrácie
- Composer patches - Úprava / oprava chýb jednotlivých modulov pri inštalačnom procese
- Better exposed filters - Vylepšené filtre pre Views
- BigPipe sessionless - Optimalizácia a cacheovanie
- Components - Komponentový prístup k vývoju
- Honeypot – Prevencia pred SPAMom
- Metatag – Meta informácie o webe
- Pathauto - Automatické generovanie URL adries na základe vzoru
- Paragraphs - Entity pre lepší prístup k práci s obsahom
- Sitemap – Generovanie sitemap pre SEO a vyhľadávanie
- Token - Vytváranie a používanie dynamických tokenov pri práci editácii obsahu
- Webform - Pokročilé formuláre pre Drupal
- Realtime SEO – SEO komponenty pre jednotlivé stránky
Témy a treťostranné knižnice
Pri vývoji webov vždy tvoríme vlastné témy, ktoré vychádzajú z navrhnutého dizajnu. Ako základnú tému používame Radix, z ktorej vytvárame svoju vlastnú tému. Táto téma je založená na CSS knižnici Bootstrap, čo umožňuje jednoduchý a rýchly vývoj jednotlivých frontend-ových komponentov, z ktorých následne skladáme bloky a celé stránky. Tieto komponenty tvoríme za pomoci už spomínaného modulu Components, ktorý prináša komponentový prístup pri implementácií Twig šablón. Radix je štandardne konfigurovaný, aby používal Webpack, ktorý slúži ako “module builder”, preto ho používame aj my a len mierne ho modifikujeme pre naše potreby.
Niekedy samozrejme projekty vyžadujú reaktívnejší prístup, vtedy siahame po Drupale v jeho headless konfigurácií a na frontend-e používame framework React.
Pri implementácii webu si držíme balíček knižníc, ktorým vytvárame niektoré z komponentov webu, hlavne z dôvodu, aby sme udržali jednotnosť v rámci rôznych projektov. V tomto balíčku máme knižnicu Bootstrap (ktorej nutnosť použitia vychádza už z hlavnej témy), Swiper pre galériové/slider komponenty a knižnicu Select2 pre výberové polia, ostatné CSS pravidlá a JS skripty sa snažíme písať naše vlastné (niekedy sa ukáže rozumnejšie použiť nejakú už existujúcu a udržiavanú treťostrannú knižnicu, vtedy po nej samozrejme siahneme).
Pre zabezpečenie kvality kódu v prípade CSS a JS súborov používame internú konfiguráciu pravidiel pre Stylelint a Eslint.
Ako skladáme stránky dnes
Ako dlhoročný problém sme vnímali v Drupale skladanie stránok, ktoré nemali jednotnú šablónu - boli unikátne svojim vizuálom. Nastavovanie pravidiel blokov, ako na ktorých stránkach, jazykoch alebo entitách sa majú zobraziť, bolo príliš zložité.
To všetko sa ale zmenilo s príchodom modulu Layout Builder. Tým sa zmenil aj náš prístup, akým vytvárame tieto stránky s unikátnym vizuálom. Dizajn webu komponujeme tak, aby bloky boli znovu použiteľné a nastavujeme pravidlá tak, aby bloky vyzerali vizuálne dobre, nech sú na stránkach akokoľvek usporiadané. Každý blok má svoju Twig šablónu, CSS a JS súbory, čo zabezpečuje jeho izolovanosť od ostatných blokových komponentov. Nemusíme sa viac trápiť s tým, že zmena jedného pravidla môže rozbiť vizuál iných stránok. Pre spomínané účely vytvárame špecifický typ obsahu (typ stránky), ktorý môže byť vyskladaný z knižnice rôznych blokov podľa potrieb dizajnu. V tom nám značne pomáhajú moduly Custom Blocks, Paragraphs a Components.
Stránky, ktorých dizajn vyzerá šablónovo (detaily článok, produktov, členov tímu a iné), vytvárame štandardným prístupom bez Layout builderu, kde im vytvárame špecifické Twig šablóny pre rôzne módy zobrazenia. Tu nám zase značne pomáhajú moduly ako Fields, Paragraphs, Taxonomy terms, Views a iné.
Ako udržiavame Drupal rýchly
Vždy sa snažíme stránku udržiavať čo najrýchlejšiu (Kto nie, však?), preto používame vstavané moduly pre optimalizáciu Drupalu ako Internal Page Cache, alebo BigPipe alebo je ešte aj modul ako BigPipe Sessionless, ktoré zabezpečujú cacheovanie stránok Drupale pre návštevníkov.
Pre každú stránku doťahujeme nutné CSS štýly a JS skripty pre knižnice, ktoré sú vždy potrebné, ako napríklad Bootstrap. Tým, že používame modul Layout Builder, stránky môžu byt vyskladané z rôznych komponentov (bloky, node-y, paragrafy, média a iné) a nie je možné dopredu určiť, ktoré CSS štýly a JS skripty pre spomínané komponenty bude potrebné. Tento problém riešime automatickým vytváraním tzv. Libraries v hooku, ktorý zo súborov v priečinku komponentu automaticky vytvára knižnicu. Tú prikladáme k Twig šablóne komponentu, čo zabezpečí načítanie len tých knižníc komponentov, ktoré sú na stránke naozaj potrebné.
Celý tento proces ešte optimalizujeme minimalizáciou a agregáciou CSS štýlov a JS skriptov do spoločných súborov, aby sme minimalizovali počet súborov potrebných na načítanie webu.
Obrázky po nahraní na web komprimujeme vstavanou Drupal kompresiou a vytvárame z nich tzv. Responsive Images, ktoré pre jednotlivé zobrazenia (desktop, tablet, mobil) dodajú návštevníkom optimalizované obrázky pre ich rozlíšenie obrazovky. A nakoniec JPEG a PNG obrázky konvertujeme do WebP formátu.
Zhrnutie
Naše rozhodnutie pre Drupal dodnes neľutujeme. Stále si myslíme, že je to správna voľba pre nás i našich klientov. Za tú dobu, čo saDrupalu venujeme, sa nám ho podarilo integrovať s rôznymi treťostrannými službami/frameworkami a ohnúť do rôznych podôb podľa špecifických prípadov použitia. Zažili sme si s ním naozaj to dobré, aj to zlé. Aj po celej tejto dobesa Drupal i naďalej uberá smerom, ktorý nám je blízky a my sa už teraz tešíme na jeho ďalšie zlepšenia.