Eva Rázgová photo

V minulé části jsme se zabývali soubory a databází. Nyní se přesouváme k tomu, co za pomoci jejich interakce vzniká a co je přístupné a ovladatelné přes webové rozhraní aplikace. V tomto díle se seznámíme se základními stavebními prvky Drupalu - entitami.
 

Entita (entity)

Pokud byste vyšli z často používaného příměru, že Drupal je jako Lego, pak si entitu můžete představit jako jeden dílek stavebnice. Téměř vše ostatní vzniká kombinací jednotlivých entit, jejich vlastností a vztahů. Při pokusu o přesnou definici drupalovské entity by čtenáři (i autor) toho článku nejspíše usnuli. V podstatě všechna srozumitelná vysvětlení, která najdete, se spoléhají na výčet příkladů - proto to uděláme také tak. V čisté instalaci Drupalu můžete vytvořit například uživatele (prvního jste vytvořili již při instalaci webu) nebo uzly (Obsah > Přidat obsah: v základu máte na výběr Článek a Základní stránku, k odlišnostem mezi nimi se ještě dostaneme). K uzlu můžete přidat komentář - i to je entita. Pokud chcete obsah třídit do různých kategorií (např. vytvářet rubriky článků, kategorie v katalogu zboží aj.), můžete to nejsnáze udělat pomocí dalších entit - taxonomických termínů (Struktura > Kategorie, v základu máte k dispozici Štítky). To vše jsou entity; na jejich základě pak můžete stavět větší celky - například přehled článků na titulní straně, výpis článků v jednotlivých rubrikách, katalog zboží, přehled uživatelů webu aj. (více k tomu ve třetím a čtvrtém díle tutoriálu).

Z praktického hlediska patrně velmi brzy oceníte skutečnost, že většina obsahových1) entit má pole (viz níže), která můžete sami definovat a přizpůsobit potřebám konkrétního zadání. Pokud je to třeba, můžete si existující entity přizpůsobit nejen konfiguračně, ale  i programátorsky, nebo můžete vytvářet nové. Z programátorského pohledu je zásadní, že entity mají společnou logiku a API. To znamená, že znalosti, které si dobře osvojíte na několika příkladech, vám otevřou širokou paletu možností napříč celým systémem.

Pole (field)

Pole jsou asi nejnápadnější součástí či vlastností entit. Když vytváříte obsah, tedy jednotlivou entitu (např. přidáváte článek na adrese /node/add/article), vidíte pole jako jednotlivá políčka formuláře. Když nastavujete podobu a vlastnosti konkrétní entity (v daném případě na adrese /admin/structure/types/manage/article/fields), vidíte pole jako jednotlivé “řádky” v nastavení. Mohou obsahovat nejrůznější typy dat (např. logickou hodnotu, text, číslo, URL adresu, informace o jiné entitě aj.). Některá pole definuje již jádro Drupalu, mnoho jiných poskytují contrib moduly. Ať již tvoříte prezentační web firmy, internetový magazín, e-shop nebo třeba intranet, málokdy se setkáte se situací, že byste v nabídce Drupalu nenašli pole, které právě potřebujete. Pokud by se to však přece stalo, můžete samozřejmě naprogramovat vlastní.

Typ entity (entity type)

Entity mají sice společnou logiku, ale přesto se svými vlastnostmi a účelem liší. Jednotlivé příklady, které jsme na začátku vyjmenovali, odpovídají současně různým typům entit (v závorce uvádíme vždy strojový název entity):

  • uživatel (user)
  • uzel (node)
  • komentář (comment)
  • termín taxonomie (taxonomy_term)

Typů entit je více, ale pro vysvětlení si vystačíme se zmíněnými příklady, které jsou intuitivně celkem dobře pochopitelné: je nasnadě, že jejich odlišné vlastnosti odpovídají rozdílnému účelu, pro který byly definovány. Uživatel obsahuje veškerá data o uživatelském účtu - mimo jiné např. e-mail uživatele, šifrované heslo a data o uživatelských rolích (role v Drupalu definuje sadu uživatelských oprávnění): to jsou vlastnosti, které by u jiných entit nedávaly smysl. Uzel je jednotka obsahu; kromě samotných “obsahových” dat, jako jsou texty, data o obrázcích apod., nese informace o vztahu k dalším entitám (např. právě o uživateli jakožto autorovi). Komentář kromě svého vlastního obsahu samozřejmě nese informace o vztahu k entitě, kterou komentuje, a opět také o uživateli. Termín taxonomie slouží jako “škatulka” pro třídění jiných entit (nejčastěji uzlů, ale i dalších); jedním z příkladů je hierarchický seznam kategorií pro zboží v e-shopu. Specifickými vlastnostmi pro tento typ entity jsou tak například pořadí v seznamu termínů (neboli váha) a vztah k nadřazenému (rodičovskému) termínu. Všechny zmíněné typy entit mohou mít pole (fields, v angličtině se proto říká, že jsou “fieldable”), přičemž konkrétní pole může být použito ve více entitách současně.

Uvedené typy entit mají také charakteristický tvar systémové adresy (tj. adresy dodané přímo Drupalem, která "platí" vždy a je nezávislá na případné "hezké" URL adrese neboli URL aliasu). Do URL adresy se promítá strojový název entity a číselný identifikátor (ID), který je v rámci každého typu unikátní. Např. uživatele s číslem 1 najdete vždy na adrese /user/1, uzel s číslem 1 na adrese /node/1 apod. - blíže viz tabulka. V rámci jednoho typu tudíž nemohou existovat 2 entity, které by měly stejné ID nebo stejnou systémovou URL adresu.

Pozn. Pokud se hovoří o obsahu webu, může to v širším slova smyslu znamenat všechna uživatelsky / redakčně zadaná data do webu. V užším slova smyslu to však v Drupalu označuje pouze uzly.
 

V rámci některých typů entit existuje ještě jedna nižší úroveň třídění - bundle. Je to “podtyp” nebo “subtyp” entity, nicméně žádný z těchto pojmů (ani doslovný český překlad “balíček”) se nepoužívá. V konfiguraci se běžně používají jiné, konkrétnější názvy, které jsou specifické pro jednotlivé typy entit. Některé známe již ze starších verzí Drupalu: jsou to typy obsahu pro uzly a slovníky pro termíny taxonomie. Další existují až od verze Drupal 8 - to jsou např. typy komentářů. Na obecný pojem bundle tak v administraci webu narazíte jen výjimečně, setkáte se s ním spíše při programování.

Pro příklad se podíváme právě na typy obsahu, protože jádro Drupalu už nabízí 2 vestavěné: článek (Article) a základní stránku (Basic page). Každý slouží k jinému účelu, a právě proto je odlišení typů obsahu (a bundles obecně) užitečné. Zatímco základní stránku pravděpodobně použijete pro “nadčasové” informace typu “O nás”, “Kontakty” apod., které budou umístěny jednotlivě v menu, článek použijete spíše pro aktuální informace, které vypíšete chronologicky v nějakém přehledu a nastavíte jim např. stránkování, filtrování podle tématických rubrik apod. Využijete tak toho, že různé typy obsahu mohou mít různá obecná nastavení (např. povolení zobrazování v menu), různá oprávnění (uživatel, který smí vkládat a upravovat články, nemusí mít přístup k přidávání a editaci základních stránek), různá pole (např. článek bude mít rubriky a fotogalerii, základní stránka nikoli) či různý způsob zobrazení dat (např. u článku budete chtít zobrazit autora a datum vydání, u základní stránky ne). Bundle (zde typ obsahu) je samozřejmě také vlastnost, kterou můžete využít pro filtrování ve výpisech obsahu (k příkladům se blíže dostaneme ve třetí a čtvrté části).

Jestliže budete potřebovat nějaký obsah výrazně odlišit od stávajícího, můžete přidat vlastní typ obsahu. Například pro příspěvky vkládané externími uživateli, které mohou mít velmi odlišnou podobu, postup pro schválení k vydání apod.

Stejně jako typy obsahu můžete sami tvořit různé slovníky ( = taxonomy bundles) či typy komentářů ( = comment bundles) a bundles k některým dalším entitám, včetně těch, které sami naprogramujete. Existují však i typy entit, které bundles nemají - takovou entitou je například uživatel.

Když nyní zrekapitulujeme přehled entit, které jsme zatím zmínili, a přidáme k nim bundles, bude to vypadat následovně:

Typ entity Strojový název ID Systémová adresa Bundles Příklad
Uživatel user UID user/[UID] --- ---
Uzel node NID node/[NID] Typy obsahu Článek
Základní stránka
Komentář comment CID comment/[CID] Typy komentáře Výchozí komentáře
Termín taxonomie taxonomy_term TID taxonomy/term/[TID] Slovníky Štítky

1) Všechny dosud zmíněné entity patří mezi tzv. obsahové entity. Existuje ještě druhá skupina - konfigurační entity, které slouží k uložení definovaného “balíku nastavení” do databáze. Budete je využívat například při práci s pohledy a menu, kterým se budeme věnovat ve 3. a 4. části. Pro základní (konfigurační) práci s webem vám bude stačit vědět, že existují; hlouběji se s nimi seznámíte ve chvíli, kdy budete programovat.

Autor: Eva Rázgová

Obsahová revize textu: Jan Nagy, Josef Růžička

Úvodní obrázek: Robert Zunikoff (public domain license)