Tento tutorial vám předvede, jak v Nette udělat jednoduchý web o 3 stránkách s jednoduchým menu pro jeho ovládání.
Pro verzi Nette 2 beta pro PHP 5.3 (2011-07-02).
Co budete potřebovat?
sandbox z aktuální distribuce Nette
Co se naučíte?
pracovat se sandboxem (adresářovou strukturou aplikace)
vytvořit Presentery a šablony aplikace
vytvořit jednoduché menu a přiřadit k němu odkazy
připojit CSS styly k aplikaci
vytvořit jednoduchou statickou prezentaci
Adresářová struktura
Je dobré si předem připravit adresářovou strukturu, kde bude vaše aplikace sídlit. Tu je vhodné logicky rozčlenit podle architektury Model-View-Presenter (MVP). S tím si nemusíte lámat hlavu, protože v distribučním balíčku najdete adresář sandbox, kde je již připravená adresářová struktura pro naši aplikaci.
Pokud se s Nette setkáváte poprvé, projděte si Quickstart, který přehledně popisuje základní mechanismy Nette na konkrétní aplikaci.
My se budeme držet modelu, kdy si pro každou stránku vytvoříme vlastní Presenter, protože tušíme, že naše webová prezentace se bude v budoucnu rozšiřovat. Tomu však předchází vytvoření abstraktního presenteru. Pokud je vše jasné, vytvoříme ho - BasePresenter.php. Je to základní stavební kámen pro ostatní Presentery a bude vypadat takto:
app/presenters/BasePresenter.php
use Nette\Application\UI\Presenter;
abstract class BasePresenter extends Presenter
{
}
Náš web bude mít 3 stránky s menu: Domů | Nabídka | Kontakt, budeme tedy potřebovat 3 presentery a to: HomepagePresenter.php, ProductPresenter.php, ContactPresenter.php. My si ukážeme, jak udělat HomepagePresenter.php a další 2 už zvládnete sami.
app/presenters/HomepagePresenter.php
class HomepagePresenter extends BasePresenter
{
}
Co je zde důležité? Třida HomepagePresenter, tím, že je definována, automaticky hledá šablony app/templates/@layout.latte a app/templates/Homepage/default.latte
Vytvoření základní šablony (@layout.latte)
Nette Framework hledá vždy základní šablonu v umístění app/templates/ pod názvem @layout.latte. Je to výchozí šablona, do které se pak nahrávají další podšablony/bloky.
Takže pokud máme vytvořenou nějakou obecnou/grafickou šablonu, stačí ji přejmenovat, správně umístit a Nette se postará o její zobrazení.
Aby tato šablona měla praktický význam a mohla spolupracovat s ostatními, musíme jí vyznačit místa, kde se bude vykreslovat a kam se vloží obsah jiné šablony, případně šablon.
V šablonách lze používat i různé filtry a teď právě nastala vhodná chvíle pro využití filtru Latte, díky němuž se nám zjednoduší a zpřehlední zápis PHP kódu. Následující script Vám ukáže, jak označit místa, kam se bude vkládat obsah jiných šablon a jak vypadá zápis s využitím filtru Latte:
Nyní musíme ještě vytvořit šablonu pro HomepagePresenter a další 2 presentery, které jste vytvořili samostatně. Pro tento presenter Nette očekává šablonu v adresáři app/templates/Homepage pod názvem default.latte. Tady je její podoba:
To je důležité, protože název adresáře Homepage nám vlastně páruje tuto šablonu s HomepagePresenterem, který jsme si před malou chvílí vytvořili. V případě jiného pojmenování a nedodržení párování by došlo k chybě. Stejný problém vznikne, pokud pojmenujeme šablonu jinak, než default.latte.
Vytvoření menu
K vytvoření menu upravíme šablonu @layout.latte v místě, kde menu chceme mít zobrazené:
<ul n:inner-foreach="$menuItems as $item => $link">
<li>{$item}</li>
</ul>
Tím je úprava základní šablony hotová. Teď stačí v BasePresenteru nachystat data pro proměnnou $menuItems.
app/presenters/BasePresenter.php
abstract class BasePresenter extends Presenter
{
public function beforeRender()
{
parent::beforeRender(); // nezapomeňte volat metodu předka, stejně jako u startup()
$this->template->menuItems = array(
'Domů' => 'Homepage:',
'Produkty' => 'Products:',
'Kontakty' => 'Contacts:',
);
}
}
Definici proměnné je třeba umístit do metody beforeRender(), aby byla dostupná pro všechny view.
Doplnění odkazů z menu
Nette Framework vnímá linky/odkazy jako pokyny k nějaké akci, přesněji řečeno kliknutím na odkaz spustíte nějakou funkci/metodu.
V praxi to znamená, že se vůbec nestaráte o URL odkazu, link totiž volá metodu a je tak na URL nezávislý
My jednoduše upravíme šablonu @layout.latte s použitím filtru Latte:
<ul n:inner-foreach="$menuItems as $item => $link">
<li><a n:href="$link">{$item}</a></li>
</ul>
Připojení CSS stylu k šabloně
Na chvilku si oddechneme a budeme se trochu věnovat grafice. Tzn. nastylujeme si již vytvořené položky v šabloně pomocí CSS. Můžete použít připravený styl v zazipované aplikaci (dole na stránce) a umístit je do www/css/screen.css
Nyní připojíme tento styl k naší šabloně. Využijeme k tomu zabudované Nette proměnné $basePath. Provedeme následující zápis v základní šabloně, který netřeba komentovat.
Pro vytvoření stránek Produkty a Kontakty je třeba vytvořit ve složce app příslušné presentery ProductsPresenter, ContactsPresenter, obdobně jako tomu bylo u HomepagePresenter a ve složce templates vytvořit odpovídající adresáře Products a Contacts. Obsahem těchto složek bude šablona presenteru s názvem default.latte. Její obsah musí obsahovat bloky title a content, stejně jako u šablony pro HomepagePresenter.
Tento tutorial vám předvede, jak v Nette udělat jednoduchý web o 3 stránkách s jednoduchým menu pro jeho ovládání.
Pro verzi Nette 2 beta pro PHP 5.3 (2011-07-02).
Co budete potřebovat?
sandbox
z aktuální distribuce NetteCo se naučíte?
Adresářová struktura
Je dobré si předem připravit adresářovou strukturu, kde bude vaše aplikace sídlit. Tu je vhodné logicky rozčlenit podle architektury Model-View-Presenter (MVP). S tím si nemusíte lámat hlavu, protože v distribučním balíčku najdete adresář
sandbox
, kde je již připravená adresářová struktura pro naši aplikaci.Pokud se s Nette setkáváte poprvé, projděte si Quickstart, který přehledně popisuje základní mechanismy Nette na konkrétní aplikaci.
Nyní si můžete zkusit spustit aplikaci.
### Vytvoření základního Presenteru
V první řade je potřeba seznámit se s procesem návrhu Presenter/View(Action) a životním cyklem presenteru.
My se budeme držet modelu, kdy si pro každou stránku vytvoříme vlastní Presenter, protože tušíme, že naše webová prezentace se bude v budoucnu rozšiřovat. Tomu však předchází vytvoření abstraktního presenteru. Pokud je vše jasné, vytvoříme ho -
BasePresenter.php
. Je to základní stavební kámen pro ostatní Presentery a bude vypadat takto:app/presenters/BasePresenter.php
Náš web bude mít 3 stránky s menu:
Domů | Nabídka | Kontakt
, budeme tedy potřebovat 3 presentery a to:HomepagePresenter.php
,ProductPresenter.php
,ContactPresenter.php
. My si ukážeme, jak udělatHomepagePresenter.php
a další 2 už zvládnete sami.app/presenters/HomepagePresenter.php
Co je zde důležité? Třida
HomepagePresenter
, tím, že je definována, automaticky hledá šablonyapp/templates/@layout.latte
aapp/templates/Homepage/default.latte
Vytvoření základní šablony (@layout.latte)
Nette Framework hledá vždy základní šablonu v umístění
app/templates/
pod názvem@layout.latte
. Je to výchozí šablona, do které se pak nahrávají další podšablony/bloky.Takže pokud máme vytvořenou nějakou obecnou/grafickou šablonu, stačí ji přejmenovat, správně umístit a Nette se postará o její zobrazení.
Aby tato šablona měla praktický význam a mohla spolupracovat s ostatními, musíme jí vyznačit místa, kde se bude vykreslovat a kam se vloží obsah jiné šablony, případně šablon.
V šablonách lze používat i různé filtry a teď právě nastala vhodná chvíle pro využití filtru Latte, díky němuž se nám zjednoduší a zpřehlední zápis PHP kódu. Následující script Vám ukáže, jak označit místa, kam se bude vkládat obsah jiných šablon a jak vypadá zápis s využitím filtru Latte:
app/templates/@layout.latte
Nyní musíme ještě vytvořit šablonu pro HomepagePresenter a další 2 presentery, které jste vytvořili samostatně. Pro tento presenter Nette očekává šablonu v adresáři
app/templates/Homepage
pod názvemdefault.latte
. Tady je její podoba:app/templates/Homepage/default.latte
To je důležité, protože název adresáře
Homepage
nám vlastně páruje tuto šablonu sHomepagePresenterem
, který jsme si před malou chvílí vytvořili. V případě jiného pojmenování a nedodržení párování by došlo k chybě. Stejný problém vznikne, pokud pojmenujeme šablonu jinak, neždefault.latte
.Vytvoření menu
K vytvoření menu upravíme šablonu
@layout.latte
v místě, kde menu chceme mít zobrazené:Tím je úprava základní šablony hotová. Teď stačí v BasePresenteru nachystat data pro proměnnou
$menuItems
.app/presenters/BasePresenter.php
Definici proměnné je třeba umístit do metody
beforeRender()
, aby byla dostupná pro všechny view.Doplnění odkazů z menu
Nette Framework vnímá linky/odkazy jako pokyny k nějaké akci, přesněji řečeno kliknutím na odkaz spustíte nějakou funkci/metodu. V praxi to znamená, že se vůbec nestaráte o URL odkazu, link totiž volá metodu a je tak na URL nezávislý
My jednoduše upravíme šablonu
@layout.latte
s použitím filtru Latte:Připojení CSS stylu k šabloně
Na chvilku si oddechneme a budeme se trochu věnovat grafice. Tzn. nastylujeme si již vytvořené položky v šabloně pomocí CSS. Můžete použít připravený styl v zazipované aplikaci (dole na stránce) a umístit je do
www/css/screen.css
Nyní připojíme tento styl k naší šabloně. Využijeme k tomu zabudované Nette proměnné$basePath
. Provedeme následující zápis v základní šabloně, který netřeba komentovat.app/templates/@layout.latte
Dokončení webu
Tímto je web téměř hotový... na závěr ještě zvýrazníme položku menu pro stránku, na které se právě nacházíme:
Pro vytvoření stránek Produkty a Kontakty je třeba vytvořit ve složce
app
příslušné presenteryProductsPresenter
,ContactsPresenter
, obdobně jako tomu bylo uHomepagePresenter
a ve složce templates vytvořit odpovídající adresářeProducts
aContacts
. Obsahem těchto složek bude šablona presenteru s názvemdefault.latte
. Její obsah musí obsahovat blokytitle
acontent
, stejně jako u šablony proHomepagePresenter
.