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 8866×

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ů

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

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

> Poslední diskuze

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

Více ...

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