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

> Perl (88) - CGI - závěr

Perl Dnes několika poznámkami dokončíme sérii o CGI. Zajímat nás budou zejména šablony.

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

Přepínače modulu CGI

Při načítání modulu CGI lze předat příkazu use jako další parametr pragmy. Pragma je něco jako přepínač, protože mění chování modulu. Pragma vždy začíná pomlčkou.

Pragma -any dokáže vytvářet HTML elementy, které nelze generovat modulem CGI definovanou funkcí. Tato pragma má vliv pouze v objektově-orientovaném přístupu. Po zavedení s -any můžeme psát toto.

use CGI qw(-any);
my $cgi = new CGI;
print $cgi->kontakt({-id=>1,-email=>'jiri@email.cz',-jmeno=>"jiri"});

Zmiňme si ještě pragmu -debug, která zapíná při spuštění v příkazovém řádku režim ladění. Ostatní lze nalézt v dokumentaci.

Získání URL ve skriptu

Funkce url vrací jméno současného skriptu. V závislosti na parametrech funkce url obsahuje příslušné informace.

Bez parametrů lze získat plnou adresu, s parametrem -absolute=1 resp. relative=>1 pouze adresu absolutní (vzhledem ke kořenovému adresáři) nebo relativní (vzhledem k aktuálnímu adresáři). Přidáme-li -query=>1, dostaneme i parametry předané metodou GET přes URL.

Šablony

V archivu CPAN je několik modulů, které se zabývají oddělením programu od dat. My si na ukázku představíme jeden z nich - modul HTML::Template.

HTML::Template umožňuje separovat HTML a programový kód v CGI skriptech. Funguje to tak, že vytvoříme HTML šablonu a programový kód v separovaných souborech. Program po spuštění načte HTML šablonu a do ní dosadí vygenerované hodnoty.

HTML šablona je obyčejný HTML kód, ve kterém však je navíc několik speciálních elementů. Tyto elementy zastupují hodnoty, kterými budou později nahrazeny nebo řídí čtení kódu. Každý z nových elementů má prefix TMPL_.

Základní použití

Vytvoříme tedy nějaký CGI program s externím HTML kódem. Nejprve si vytvoříme šablonu a poté ji využijeme. Podívejme se na následující HTML kód a uložme ho do souboru hello.template.

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
   <TITLE></TITLE>
</HEAD>
<BODY>
    Právě je <TMPL_VAR NAME="cas">.<br>
    Používám <TMPL_VAR NAME="verze_cgi">.
</BODY>
</HTML>

Máme zde dva nové tagy <TMPL_VAR NAME="cas"> a <TMPL_VAR NAME="verze_cgi">. Poté, co bude šablona načtena naším CGI skriptem, budou elementy TMPL_VAR nahrazeny hodnotou identifikovanou přes hodnotu parametru NAME.

Nyní musíme vytvořit samotný CGI skript, který podle šablony vytvoří výslednou HTML stránku. HTML::Template má objektově-orientované rozhraní, takže ze všeho nejdříve zavoláme konstruktor importovaného modulu, kterému předáme jako parametr jméno souboru se šablonou.

use HTML::Template;
my $template = HTML::Template->new(filename => "hello.template");

Nyní nahradíme elementy TMPL_VAR příslušnými hodnotami. K tomu se používá metoda param.

my $now = localtime;
my $verze_cgi = $ENV{GATEWAY_INTERFACE};
$template->param(cas => $now);
$template->param(verze_cgi => $verze_cgi);

Na závěr vytiskneme HTTP hlavičku a pomocí metody output i HTML kód vygenerovaný podle šablony.

print "Content-Type: text/html\n\n";
print $template->output;

Výpis seznamu hodnot

HTML::Template umožňuje automatické vypisování více hodnot pomocí cyklů. Ideální nástroj to je pro výpis tabulky. Opět si nejprve napíšeme ukázkovou šablonu. Význam následujícího kódu je opět intuitivní.

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
    <TITLE>Tabulka</TITLE>
</HEAD>
<BODY>
    <TABLE>
        <TR>
            <TD>Jméno</TD>
            <TD>Příjmení</TD>
            <TD>Skóre</TD>
        </TR>
        <TMPL_LOOP NAME="loop">
        <TR>
            <TD><TMPL_VAR NAME="jmeno"></TD>
            <TD><TMPL_VAR NAME="prijmeni"></TD>
            <TD><TMPL_VAR NAME="skore"></TD>
        </TR>
        </TMPL_LOOP>
    </TABLE>
</BODY>
</HTML>

A nyní implementujeme CGI soubor. Ten bude vypadat velmi podobně jako v prvním případě, pouze metodě param předáváme složitější datovou strukturu.

#!/usr/bin/perl
use strict;
use HTML::Template;

my $p_data = [
     {jmeno=> "Jan",    prijmeni => "Novák",     skore=>23},
     {jmeno=> "Josef",  prijmeni => "Zápotocký", skore=>42}];

my $template = HTML::Template->new(filename => "moje.template");

$template->param(loop => $p_data);

print "Content-Type: text/html\n\n";
print $template->output;

Podmínky

HTML::Template podporuje podmíněné provádění kódu. To znamená, že lze zobrazit část HTML kódu pouze za určitých okolností. Následující kód ukazuje, jak takovou podmínku napsat. Pokud metodou param definujeme proměnnou vporadku s pravdivou hodnotou, vyhodnocuje se první blok, v opačném případě druhý.

<TMPL_IF NAME="vporadku">
V pořádku
<TMPL_ELSE>
Chyba
</TMPL_IF>

HTML::Template má řadu dalších možností. Pro zájemce je zde dokumentace.

Závěr

Použití CGI ve své podstatě není nic nového. Programování vypadá stále stejně a prostředky také. Modul CGI je pouze "něčím navíc". Důležitým znakem CGI je, že výsledkem není výsledná podoba dokumentu, ale pouze další zdrojový kód. Ať už pro HTML stránku, PDF soubor, obrázek nebo cokoliv jiného.

Část seriálu věnující se CGI nyní končí. Avšak část věnující se webu nikoliv. Vše zakončíme technologií Mason, která dokáže bez kompromisů zastoupit PHP.

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ů

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ář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

11.2.2018 23:11 /Petr Ježek
Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář

11.2.2018 20:35 /Redakce Linuxsoft.cz
Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář

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

> Poslední diskuze

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í?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

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