Doplněk Stamp v1.0.5

Vít Petira 3 minuty, 44 sekundy 754 twig šablony doplňky upgrade

Po deseti měsících je na světě další verze doplňku Stamp, která nově získává informace o všech registrovaných uživatelích a ukládá je do Twig proměnné users, z níž je lze následně použít v šablonách stránek nebo přímo ve stránkách, pokud jsou zpracovávány prostřednictvím Twigu.

Verifikovaný uživatelPoměrně po dlouhé době je od 26. 12. 2022 k dispozici Stamp v1.0.5, který se od předchozích verzích odlišuje tím, že nově dodaná funkcionalita tentokrát žádná data nikam neukládá/nikde neupravuje, nýbrž je tentokrát výhradně získává z jiného úložiště, konkrétně pak ze složky s účty všech registrovaných uživatelů, tedy /user/accounts, resp. příslušných souborů *.yaml. V uvedeném úložišti jsou dostupné všechny informace, které uživatelé zadali při registraci. Například pro uživatele petira (což je zároveň username) se jedná o následující údaje:

fullname: 'Vít Petira'
title: 'Zakladatel a provozovatel projektu Grav.cz'
email: petira@grav.cz

Samozřejmě jsou v uvedených YAML souborech i další údaje, ale ty nejsou nijak zajímavé pro případné použití doplňkem Stamp v rámci stránek. Na druhou stranu naopak dost informací schází, např. odkazy na web uživatele, popř. na jím používané sociální sítě. To bude úkolem pro doplněk Stamp v některé z příštích verzí.

V předchozích příspěvcích věnovaných doplňku Stamp v1.0.3 a následně doplňku Stamp v1.0.4 jsme si přestavili možnosti, kde mohou být uloženy informace o uživatelích, které následně zpracujeme v šablonách stránek nebo přímo na stránkách.

Jednou z možností bylo použít jako úložiště přímo strukturu stránek. Tuto variantu používá aktuálně i web Grav.cz, kdy informace o autorovi v úvodu jednotlivých článků jsou přebírány ze stránky jednotlivých autorů. Například pro tento článek, jehož autorem je Vít Petira, je tomu z následujícího úložiště.

Výhodou předchozího řešení je maximální flexifilita, která především umožnuje používat libovolné vlastní proměnné, a v neposlední řadě lze stránku použít i pro výpis křížových odkazů, tedy například všech příspěvků od konkrétního autora.

Naopak značnou nevýhodou je, že musíme vytvářet duplicitní informace o uživatelích, které už jsou uloženy někde jinde, konkrétně v uživatelských účtech, což je další možná varianta.

Můžeme polemizovat nad tím, že ne nutně všichni autoři musejí být registrovanými uživateli, ale to lze vyřešit jejich registrací a pouhou deaktivací účtu. Dalším limitujícím faktorem je omezený počet informací o uživateli, který je již zmíněn výše.

Uvedené ale můžeme uzavřít tím, že mohou nastat situace, kdy dané úložiště bude pro konkrétní projekt zcela dostačující. Pak můžeme jednoduše získat z Twig proměnné (ve skutečnosti se jedná o vícerozměrné pole) users, do které doplněk Stamp dynamicky uloží informace o všech registrovaných uživatelích, proměnné user.username, user.fullname, user.title a user.email, např. následujícím Twig kódem:

{% set control = false %}
{% for user in users %}
    {% if page.header.author == user.username %}
        <i class="fa fa-user"></i> {{ user.fullname|e }} <i class="fa fa-users"></i> {{ user.title|e }} <i class="fa fa-envelope"></i> <a href="mailto:{{ user.email|e }}">{{ user.email|e }}</a>
        {% set control = true %}
    {% endif %}
{% endfor %}
{% if control == false %}
    <i class="fa fa-user"></i> {{ page.header.author }}
{% endif %}

Aby uvedené fungovalo, musí se v nastavení doplňku Stamp aktivovat volba Twig variables prostřednictvím přepínače, nebo uvedené provést nastavením proměnné twig na true v souboru stamp.yaml, který je uložen ve složce /user/plugins. Je to z toho důvodu, aby se zbytečně nespouštěl kód, který Twig proměnnou users generuje, pokud se následně v Twigu nebude používat.

Shora uvedený Twig kód prochází všechny registrované uživatele a pokud záznam odpovídá autorovi uloženému v hlavičce stránky, pak o něm vypíše dostupné informace. V případě, že odpovídajícího autora nenalezne, vypíše pouze jméno autora uloženého v hlavičce stránky.

Kód by šlo samozřejmě více upravit, resp. optimalizovat, např. aby současně kontroloval, že je autor v hlavičce stránky uložen pod plným jménem, tedy {% if page.header.author == user.username or page.header.author == user.fullname %}, nebo aby skončilo procházení, pokud je uživatel již nalezen, nebo aby nedošlo k žádnému výpisu, pokud nebude autor v hlavičce vůbec uveden.

Jedná se o vzorový příklad, jeho modifikaci pro konkrétní případy se meze nekladou.

Mějte na paměti, že Twig proměnná users je ve skutečnosti vícerozměrné pole, které obsahuje informace o všech registrovaných uživatelích, takže v kombinaci s taxonomy.author lze získat informace o více, resp. o všech dotčených uživatelích najednou. Pouze je potřeba příslušně upravit Twig kód, aby procházel pole taxonomy.author a porovnával jej s polem users. V budoucnu bude kód součástí doplňku Stamp v rámci přiložených šablon stránek.

Příští hlavní verze doplňku Stamp bude umožnovat nejen modifikaci proměnných v hlavičce aktuální stránky, ale i v její přímé rodičovské stránce, volitelně pak i ve všech nadřazených stránkách. Uvedené bude následně v některé další verzi možné více upřesnit, např. o počet dotčených úrovní a typy vzájemně ovlivněných stránek.

Nalezli jste v článku chybu, ať již gramatickou nebo faktickou? Článek prošel pouze autorskou korekturou a drobné nedostatky, jako překlepy nebo chybný slovosled, se v něm mohou vyskytovat. Pokud je objevíte, pomozte příspěvek upravit oznámením přes kontaktní formulář nebo na e-mail. Budou vám vděčni nejen autoři, ale zejména ostatní čtenáři.

Pomozte Grav.cz prolinkovat. Projekt Grav.cz se za dva roky provozu rozrostl a ve starších příspěvcích na Blogu mohou být uvedeny pasáže, které by stálo za to prolinkovat na konkrétní související řešení, která jsou uvedena v následujících příspěvcích. Pokud takové objevíte, pošlete informaci přes komunikační kanály uvedené v předchozím nebo následujícím odstavci.

Diskuze k článku není k dispozici. Pokud ale máte k tématu článku podněty, připomínky nebo dotazy, je možné je sdělit ve skupině na Facebooku, kde se k nim vyjádří nejen autor, ale případně i další diskutující.

Předchozí příspěvek Následující příspěvek