LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (95) - Catalyst - šablony

Perl Blíže se seznámíme s několika různými syntaxemi, které lze používat v šablonách.

28.12.2009 01:00 | Jiří Václavík | Články autora | přečteno 7149×

Podívejme se ještě jednou na soubor root/hello.tt, který jsme vytvořili v minulém dílu. Nazvali jsme ho šablonou, ale zatím obsahoval jen čistý HTML kód.

Ve skutečnosti může šablona vypadat takřka jakkoliv, protože si sami můžeme zvolit pravidla pro to, jak bude fungovat. O těchto pravidlech rozhoduje pomocný modul, kterým se daný View řídí.

My jsme použili v aplikaci Hello pomocný modul Template Toolkit (přesněji šlo o Catalyst::View::TT) a proto se primárně podíváme na tuto syntaxi. V tomto konkrétním případě platí, že šablona obsahuje speciální bloky kódu, které se před odesláním klientovi vyhodnotí a vygenerují místo sebe nějaký další HTML kód. Bloky jsou ohraničené závorkami [% ... %].

Zůstaňme ještě chvíli u Template Toolkit a představme si nejdůležitější syntaxi uvnitř speciálních bloků.

Vložení kódu

Nejjednodušší je vložení nějakých dat zvenku dovnitř šablony. K tomu používáme zápis buď [% text %] nebo [% text | html %]. Lze si to představovat tak, že text je proměnná, za kterou se dosadí její aktuální obsah. Zadáme-li modifikátor html sloužící pro filtrování výstupu, budou HTML znaky se speciálním významem překonvertovány na jejich zástupce uvozené ampérsandem.

Naši šablonu můžeme upravit například takto.

<html>

<head><title>Toto je první stránka v Catalystu</title></head>

<body>
<h1>Ahoj světe!</h1>
<p>Tady je něco napsáno: [% neco | html %]</p>
</body>

</html>

Tato data dodáme do výsledné podoby stránky v naší metodě hello. Využijeme opět objekt $c a pomocí stash přiřadíme našemu neco hodnotu. Procedura hello v našem Controlleru se změní do následující podoby.

sub hello : Global {
    my ($self, $c) = @_;
    $c->stash->{template} = "hello.tt";
    $c->stash->{neco} = "toto jsou data získaná někde venku";
}

Nyní ve výsledné stránce uvidíme tento nový text.

Stránka vytvořená pomocí šablony

Další konstrukce v šabloně

Podívejme se ještě na složitější konstrukce, které můžeme použít uvnitř bloku [% ... %]. Lze používat nejběžnější řídící struktury jako IF, WHILE, FOREACH a podobně. Zde můžeme vidět příklad struktury IF, která ošetřuje, zda je neco definováno.

[% IF neco %]
   <p>[% neco %]</p>
[% END %]

Dále bývá velmi užitečné použití FOREACH. Syntaxe je zde intuitivní. Konstrukce tohoto typu se používají při spolupráci s databází. S dolováním dat z databáze pomocí Catalystu se ještě později setkáme.

[% FOREACH polozka IN zbozi -%]
  <tr>
    <td>[% polozka.id %]</td>
    <td>[% polozka.nazev %]</td>
    <td>[% polozka.cena %]</td>
  </tr>
[% END -%]

Komentář, který nebude vidět ve výsledném zdrojovém kódu pro HTML stránku můžeme napsat pomocí mřížky.

[% #toto je komentář %]

Pomocí META lze nastavit například titulek

[% META title = "titulek" -%]

Chceme-li vložit do šablony jinou šablonu, použijeme příkaz INCLUDE. Příkladem může být vkládání HTML hlavičky.

[% INCLUDE hlavicka titulek="Moje WWW" %]

V souboru hlavicka.tt pak může být tento obsah.

<html>
<head><title>[% titulek %]</title></head>
<body>

Zpracování argumentů

Upravíme-li podprogram hello vhodným způsobem, budeme moci pracovat s argumenty. Ale co to vlastně argumentu v Catalyst aplikaci jsou?

Argumenty jsou součástí URL adresy a zadávají se tak, že vypadají jako jména adresářů. Jsou oddělené lomítky a uživatel vůbec nepozná, že jde o argumenty. Voláme-li například URL http://localhost:3000/hello/arg1/arg2/arg3, ve skutečnosti se provádí naše procedura hello a té jsou předány navíc tři argumenty arg1, arg2, arg3. Catalyst je v tomto směru inteligentní, takže si poradí s různými cestami a atributy. Samozřejmě je třeba si dát o to větší pozor na kolize.

Modifikujme náš podprogram hello tak, abychom předali do šablony argumenty.

sub hello : Global {
    my ($self, $c, @args) = @_;
    $c->stash->{template} = "hello.tt";
    $c->stash->{neco}     = "@args";
}

Připomeňme, že proměnná typu pole se do řetězce implicitně konvertuje tak, že se rozdělí na prvky oddělené mezerami. Šabloně tedy posíláme řetězec "arg1 arg2 arg3".

TTSite

View typu TTSite vytváří přednastavenou šablonu webu, obsahující hlavičky, patičky, CSS styly apod., kterou lze později různými způsoby konfigurovat. View TTSite vytvoříme standardně následujícím příkazem.

$ catalyst.pl Site
$ cd Site
$ perl script/site_create.pl view TT TTSite

Struktura adresáře root se nyní při použití TTSite lehce liší. root obsahuje tři podadresáře.

  • static - pro uchovávání něměnných souborů, například obrázků
  • src - zde jsou šablony
  • lib - konfigurační soubory, hlavičky, patičky atd.

Jako ukázku TTSite vytvoříme opět jen úvodní stránku. Nejprve tedy založíme šablonu v souboru root/src/index.tt2.

[% META title = "Toto je vytvoreno pomoci TTSite" %]
<h1>Nadpis</h1>
<p>text</p>

Nyní ještě zeditujeme soubor lib/Site/View/TT.pm. Nakonfigurujeme příponu šablon na .tt2 tak, že k argumentům metody config přidáme řádek TEMPLATE_EXTENSION=>".tt2".

Dále vložíme metodu sub index : Private {} do Controlleru lib/Site/Controller/Root.pm. To je vše, co je potřeba k vytvoření jednoduché stránky. Spustíme-li server, uvidíme v prohlížeči následující stránku.

Ukázka View typu Catalyst::View::TTSite

Kdybychom chtěli vzhled aplikace upravit, můžeme zabrousit do adresáře root/lib a zde lze udělat různé úpravy v nastavení. Taktéž lze editovat kaskádové styly v CSS šabloně root/src/ttsite.css.

View a Mason

Poznamenejme, že lze vytvořit také masonovský View. Masonu jsme se již obsáhle věnovali a proto si jen náznakem ukažme, jak postupovat.

Na úvod opět vytvoříme komponentu, ta bude tentokrát typu Mason.

$ perl script/projekt_create.pl view Mason Mason

Pak lze v šablonách využívat masonovské syntaxe. Argumenty odeslané do šablony pomocí $c->stash získáme pomocí bloku <%args>.

Zde je příklad jednoduché masonovské šablony, která zobrazuje přijatý argument.

<%args>
$argument
</%args>
Od Controlleru jsme ziskali toto: <% $argument %>

Více o použití Masonu v Catalystu lze nalézt v dokumentaci.

View a další možnosti

Existuje řada dalších pomocníků usnadňujících vytváření View od vytváření PNG obrázků, generování PDF, uživatelská rozhraní, PHP kódu až po posílání emailů. K nalezení jsou v archivu CPAN a stojí za to si alespoň pro představu projít seznam modulů, protože lze narazit na opravdu zajímavé projekty.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

21.4.2016 8:01 /František Kučera
Spolek OpenAlt zve na 127. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 28. dubna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

2.3.2016 22:41 /Ondřej Čečák
Letošní ročník konference InstallFest již tento víkend!
Přidat komentář

14.2.2016 16:39 /Redakce Linuxsoft.cz
O víkendu 5. a 6. března 2016 proběhne na pražském Strahově 8. ročník tradiční konference InstallFest. Celkem za dva dny uvidíte ​30 přednášek​ a ​6 workshopů.
Přidat komentář

5.2.2016 17:38 /Petr Ježek
Utilitka z XFce "xfce4-power-manager" nejen umožňuje nastavení lhůty pro uspání či hybernaci, ale i zapínání a vypínání prezentačního módu pro nerušené sledování videí. Stačí ji nastavit v každém vybavenějším panelu a v jakémkoli nontiled WM/DE.
Přidat komentář

10.1.2016 11:32 /Pavel `Goldenfish' Kysilka
LinuxMarket změnil provozovatele. Nově jej provozuje Marek Pszczolka. Více info a detaily #1 a #2.
Přidat komentář

29.12.2015 11:38 /Ondřej Čečák
Ještě posledních pár dní můžete přidávat příspěvky nebo nápady na Install Fest 2016, který se bude konat 5. a 6. března 2016.
Přidat komentář

8.12.2015 11:36 /Petr Ježek
Logické se stává realitou. LibreOffice a Thunderbird se mají dle článku na Redditu stát protiváhou MS řešení (MS Office a Outlook).
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

7.5.2016 14:58 / Teodor Komárek
Soubory

20.4.2016 0:07 / Jakub Cleing
Sázkový panel PHP FUSION

9.4.2016 9:43 / jiwopene@gmail.com
Re: problém s dpkg a nemožností instalovat

9.4.2016 9:41 / jiwopene@gmail.com
Re: změna velikosti disk.oddílu

9.4.2016 9:40 / jiwopene@gmail.com
Re: Přenesení starého OS Win7 na virtuál v Debianu

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze