![]() ![]() |
ARCHIV |
||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() ![]() ![]() ![]() |
|
Hlavička | Význam |
-type | MIME typ generovaného dokumentu |
-status | stavový kód vrácený webovým serverem |
-charset | kódování |
-attachment | je-li jako -type application/octet-stream, stránka bude otevřena jako příloha s daným názvem |
-expires | datum a čas nebo změna oproti okamžiku, kdy dokument ztratí platnost |
-target | podpora rámců |
-cookie | podpora cookies (jim bude speciálně věnován příští díl) |
Pomocí header je ale možné vytvořit libovolnou hlavičku. I přesto, že uvedeme klíč, jejž funkce header nerozpoznává, se vytvoří hlavička. Jejím jménem je automaticky klíč (bez úvodní pomlčky a s nahrazenými podtržítky) a hodnotou předaná hodnota prvku.
Pokud nechceme generovat dokument, ale pouze přesměrovat jinam, použijeme funkci redirect, která funguje podobně jako header. Předáváme ji hash s hodnotami uvedenými v tabulce.
Hlavička | Význam |
-location | celá URL adresa stránky, kam se bude přesměrovávat |
-status | stavový kód vrácený webovým serverem (měl by mít standardně formát 3XX, což znamená "přesměrování požadavku") |
-cookie | podpora cookies (jim bude speciálně věnován příští díl) |
Zatímco hlavičky dokumentu v předcházejícím oddílu mohly platit obecně, dále budeme předpokládat, že naše CGI skripty generují HTML dokumenty.
HTML potřebuje také svoji vlastní hlavičku. Ta obsahuje vše od určení DTD souboru pomocí <!DOCTYPE> až po element <BODY>. Dále následuje obsah dokumentu a na závěr je třeba vytisknout HTML patu, která zahrnuje elementy </BODY> a <HTML>.
Hlavičku generuje na základě předaných parametrů funkce start_html. Parametrem funkce start_html je hash, jehož rozpoznávané prvky jsou uvedené v tabulce.
Klíč | Význam |
-title | titulek stránky |
-encoding | kódování, implicitně je nastaveno ISO-8859-1 |
-author | kontakt na autora |
-base | určuje adresář, vzhledem ke kterému se berou relativní odkazy |
-dtd | určení DTD souboru |
-lang | jazyk |
-script | případné Javascript soubory |
-noscript | obsah elementu NOSCRIPT |
-meta | případné další meta řádky, přidávají se parametry name a content |
-head | případný další obsah HTML hlavičky |
-style | umístění kaskádového stylu |
Uvedeme-li prvek, který není funkcí start_html rozpoznán, je z něj vytvořen parametr elementu <BODY>.
Jako příklad HTML hlavičky si uveďme následující kód.
my $meta = {"keywords" => "linux software", "description" => "archiv softwaru pro linux"};
print start_html(
-title=>"Linux Software",
-author=>'autor@server.cz',
-lang=>"cs",
-encoding=>"ISO-8859-2",
-meta=>$meta,
-style=>"/styles/style.css",
-bgcolor=>"green"
);
Ten vytvoří HTML hlavičku tak, jak ji vidíme v dalším výpisu.
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="cs" xml:lang="cs">
<head>
<title>Homepage</title>
<link rev="made" href="mailto:autor%40server.cz" />
<meta name="keywords" content="linux software" />
<meta name="description" content="archiv softwaru pro linux" />
<link rel="stylesheet" type="text/css" href="/styles/style.css" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" />
</head>
<body bgcolor="green">
Modul CGI obsahuje značné množství funkcí. Bylo by zbytečné zde uvádět kompletní přehled, neboť pro většinu elementů, které budeme potřebovat, s největší pravděpodobností platí, že jsou implementovány jako funkce se stejnými názvy jako elementy. Později si představíme pouze práci s formuláři, neboť ta je pro náš záměr klíčová. V tomto okamžiku si ukážeme pouze stručný úsek textu ze zdrojového kódu.
print h1("Vítejte");
print hr;
print start_p, "můžete mi napsat ";
print a({-href=>'mailto:muj@mail.cz'}, "email");
print end_p;
K němu snad jediný komentář. Výsledkem je řetězec na jediném řádku. To není u jazyka HTML podstatné, protože nebere bílá místa navíc v potaz. Máte-li zájem o přehledný výsledný HTML kód, je třeba na místech zalomení používat \n. Znak \n se promítne jako nový řádek do zdrojového kódu, ale nezmění výslednou podobu HTML dokumentu. Pro nový řádek v HTML se použije funkce br.
Pokud by vám zde i přes velké množství nějaký element scházel (například tehdy, máte-li svůj vlastní DTD soubor), je zde možnost autoloadingu. Lze tak volat metodu s prakticky libovolným názvem.
K tomu stačí zavést do programu modul s přepínačem -autoload.
use CGI qw(-autoload);
Pokud použijeme autoloading, pak musí mít každá funkce závorky i v případě, že jí nepředáváme žádný parametr.
Formuláře jsou základním HTML prvkem pro uživatelský vstup a následně tedy kritériem dynamičnosti. Z tohoto důvodu jim nyní budeme věnovat větší prostor.
HTML podporuje několik formulářových prvků, kterými uživatel ovlivňuje vstup. Jsou to tyto prvky.
Pro všechny tyto prvky existují v modulu CGI příslušné funkce, které je generují.
Nicméně používat CGI pro generování formuláře, pokud se na základě nějakých vstupních dat jeho struktura nemění, není teoreticky vůbec nutné. Nutné je CGI pouze pro zpracování získaných hodnot. Chcete-li formuláře vytvářet staticky, můžete klidně následující část přeskočit.
Všechny prvky jednoho formuláře jsou uvnitř elementu FORM. Tento element určuje mimo jiné metodu odesílání dat a umístění, kam se budou data spolu s požadavkem posílat. Základní struktura každého formuláře tak bude vypadat takto.
use CGI qw(*form);
print start_form(-method=>"post", -action=>"/cgi-bin/form.cgi");
#...
print end_form;
Uvnitř budou jednotlivé prvky formuláře, které jsou vytvářeny konkrétními funkcemi. Každá z nich přijímá jako hodnotu minimálně jméno a implicitní hodnotu - tedy klíče -name (který je jako jediný vždy povinný) a -value v předávaném hashi.
Právě podle -name každý formulářový prvek vrací hodnotu zadanou uživatelem. Pokud jako -name použijeme slovo password, pak funkce param na základě identifikátoru password vrátí heslo zadané uživatelem.
V HTML je několik typů tlačítek. My se budeme zabývat pouze tím nejdůležitějším - tlačítkem pro odeslání dat. K jeho vytvoření slouží funkce submit.
print submit(-name=>"akce", -value=>"Odešli data!");
Funkce textfield resp. password_field vytvářejí prvky pro zadání jednořádkového textu resp. hesla. Dále je k dispozici funkce textarea pro textové pole.
print textfield(-name=>"url, -value=>"http://, -size=>50);
Funkce popup_menu vytváří rozbalovací seznam.
print popup_menu(-name=>"list, -value=>["textfield","password_field","textarea"], -default=>"textarea");
Máme 2 funkce, které vytváří zaškrtávací pole. Pro skupinu polí se stejným jménem zde je checkbox_group a samostatné pole použijeme checkbox.
Zde je ukázka jednoduchého checkboxu. Je-li položka zaškrtnuta, automaticky se vrátí hodnota on.
print checkbox(-name=>"checkbox_name", -checked=>1, -label=>"I agre");
Skupinu zaškrtávacích políček se stejným jménem lze formátovat do daného počtu sloupců nebo řádků. Pomocí -colheaders nebo -rowheaders lze navíc dát jednotlivým sloupcům titulek.
print checkbox_group(-name=>"mesto", -values=>[qw(Praha Ostrava Brno Plzeň Liberec)], -columns=>2);
Přepínací pole se vytváří pomocí funkce radio_group. Funguje podobně jako skupina checkboxů s tím rozdílem, že nelze označit libovolný počet polí. Syntaxe je také totožná.
Velice často užívaný prvek hidden slouží pro předávání nějaké proměnné hodnoty, kterou však nezadává uživatel. Jeho typickým užitím je například uchování id uživatele, který mění údaje ve svém profilu. Sám uživatel o id nic neví a přesto bychom bez něj nevěděli, koho údaje změnit.
print hidden(-name=>"user_id", -default=>215);
Na závěr uvedeme, jak lze získávat od uživatele soubory. K tomu je určena funkce filefield, jejíž volání může vypadat například takto.
print filefield(-name=>"jméno_souboru");
Zajímavější je obsluha takového formuláře. Na to použijeme funkci upload a získanou proměnnou dále používáme jako ovladač. Tento kód vytiskne obsah textového souboru na výstup.
$fh = upload("jméno_souboru");
while (<$fh>) {
print;
}
Nejsou žádné diskuzní příspěvky u dané položky. Příspívat do diskuze mohou pouze registrovaní uživatelé. |
28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 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 umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
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ář
31.7.2023 14:13 /
Linda Graham
iPhone Services
30.11.2022 9:32 /
Kyle McDermott
Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš
Re: zavináč
2.12.2018 23:56 /
František Kučera
Sraz
5.10.2018 17:12 /
Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?