Dynamický obsah – customizace šablony dle uživatele
- Jan Mikeš
- Člen | 771
V šabloně mám určité místo, kde bych chtěl měnit dynamicky obsah, podle aktuálně přihlášeného uživatele (také je možnost, že uživatel nebude mít žádný special content, a na to místo se tedy nevloží nic).
„Obsahem“ rozumím celou .latte šablonu.
Rád bych se vyhnul prasárnám jako
{if $user->id == 12}{elseif $user->id == 666}{/if}
apod.
Mám pár nápadů, ale opět, nechám si rád poradit a rád bych zjistil jak
by řešili situaci ostatní.
Potřebuji co nejuniverzálnější kus kódu, protože toto chování budu potřebovat na mnoha místech napříč aplikací.
Nejlepší mi přijde zatím asi řešení přes komponentu. V šabloně
bych na daném místě vykresloval komponentu {control xyz}. Tato komponenta by
interně zjišťovala zda existuje šablona s id uživatele (666.latte), pokud
ano, vloží, pokud ne, nic se nestane. Nevýhodou je, že se někdy může
stát, že uživatelé budou mít shodný obsah, to bych pak řešil tak, že
vytvořím např shared.latte a v 666.latte
{include "shared.latte"}
. Pro každé místo v aplikaci bych měl
jinou třídu komponenty + by všechny měly společného předka, který by
obsahoval logiku právě pro zjištění, zda-li existuje šablona pro daného
usera a dané místo nebo ne.
Dále mě napadlo jít na úroveň šablon presenterů a dědičnosti. Šablonu rozkouskovat na spoustu blocků a podobně jako u komponenty, hledat šablonu s id uživatele, ve které by pak byly bloky s kódem na místa, která by se měla měnit.
Myšlenkou je to, že uživatel si podá žádost o aktivaci modulu a v případě, že jej chce customizovat, tak abych co nejjednodušeji tohoto docílil bez zbytečné duplikace kódu (ať už šablon nebo php).
- enumag
- Člen | 2118
Nechat uživatele aby si upravoval latte šablonu je nebezpečné protože do latte může napsat libovolný PHP kód. Na to bych doporučil spíše Twig. Pokud si to nebude uživatel upravovat přímo tak zřejmě budeš mít konečnou sadu předdefinovaných šablon ze kterých si uživatel bude moci vybrat – ale pak u uživatele vždy budeš mít záznam kterou chce což řeší problém.
Uniká mi něco?
Editoval enumag (8. 1. 2016 19:56)