Slidee

Úvodem

Stávalo se mi, že jsem potřeboval zpíchnout malej jednoduchej web. A hlavně rychle a levně. Něco co nevyžadovalo složitou logiku. Vlastně šlo jen o texty, maximálně obrázky. Více hraní bylo se stylováním vzhledu. Tedy něco kde si vystačím s prostým html + css. Na co tam rozjíždět nějaký těžkotonážní framework.

A tak jsem tedy použil prosté html. šlo to podle očekávání.

Jen mi u třetí stránky začlo rozčilovat, že tam všude opakuju stejný kód, protože všude chci ten samej sidebar. A stejnou hlavičku a patičku. A verzi css musím taky incrementovat všude. Asi si dovedete představit.

Pak mi zákazník řekl, že by tam chtěl těchto třista fotek.

A také kontaktní formulář.

Dobřé, tak nic.

Ukradl jsem tedy jeden nápad Davida Grudla, trochu si s ním pohrál, a toto je výsledek.

Co to umí

Základem je stejné uvažování jako když děláte obyčejný statický web pomocí čistých html souborů. Stejné je to v tom, že co soubor to stránka. Liší se to tím, že soubory jsou ve formátu latte, že můžete použít layout a includovat fragmenty. Také se to liší v tom, že je možné používat určitá dynamická kouzla, která v čistém html pochopitelně nejdou. O tom ale později.

Instalace

Do projektu si stáhnu pomocí composeru knihovnu tacoberu/nette-slidee. Z přiloženého skel zkopíruju index.php tam, kde bude veřejná část webu, a nasměruju všechny zajímavé cesty kam patří. Adresář se stránkami pojmenuju například pages. Poladím @layout.latte, přidám stránky jaké potřebuji. A měl by fungovat.

Takže něco jako takto

composer require tacoberu/nette-slidee
mkdir app
cp -r vendor/tacoberu/nette-slidee/skel/* app
mkdir document_root
mv app/index.php document_root/
mkdir -m 0777 -p var/log
mkdir -m 0777 temp
php -S localhost:8001 -t document_root

Použití

Používá se to prakticky stejně jako by to byla aplikace v Nette. Předpokládá se jakože jeden jediný presenter s názvem Page, který má akce co se jmenujou stejně jako stránky. Takže stránka about je Page:about. Stránka contact-me je Page:contactMe. Odkazy se dělají bez toho prezenteru protože nemusím.

Mohu používat bloky, je k dispozici proměnná {$basePath}, mohu používat vypisování dat (když je tam dostanete - o tom dále). Můžete registrovat funkce a makra v config.neon.

Celé kouzlo je v makru {url nazev-stranky}, které dělá to, že se soubor nemusí jmenovat tak, jak se bude jmenovat url.

Komponenty?

Je připravená metoda createComponent() která předpokládá nadefinovanou a pojmenovanou továrnu. Tedy, když v configu uvedete:


services:
	contactForm: App\Controls\ContactFormFactory

Tak v stránce můžete použít tento formulář:


{control contactForm}

Přirozeně tento formulář bude chtít nějak někam ukládat data. Takže vytvoříte službu a necháte mu ji injektnout pomocí DIC. Tak jak je to v Nette obvyklé.

Závěr

Potřebujete jednoduché stránky? Třeba vám zrovna Slidee poslouží. Nebude to vhodné řešení pro velkou aplikaci, kde chcete komplexní administraci a mít pod kontrolou veškeré nuance requestu. Třeba ACL není vůbec řešena. Stejně tak gridy či administrace. Ale na jednoduché stránky s několika málo formuláři to může být vhodné řešení. Zvažte to a dejte vědět.