WAP Internet až do mobilu (5. díl)

Tento týden budeme pokračovat v popisu tvorby WML stránek. Tentokrát se podíváme na některé pokročilé techniky, kter...


Tento týden budeme pokračovat v popisu tvorby WML stránek. Tentokrát se
podíváme na některé pokročilé techniky, které je možné použít pro programování
WAP aplikací.
Proměnné
Jako při programování čehokoliv jiného máme i ve WML k dispozici proměnné.
Podstatným rozdílem mezi programováním ve WML a HTML je, že proměnné se
nevztahují ke stránce, ale k prohlížeči jako takovému. Svůj obsah tedy
neztrácejí ani při přechodu na novou stránku. Tím se značně zjednodušuje
předávání dat mezi stránkami. Pokud chcete vymazat hodnoty všech proměnných, je
potřeba v tagu card uvést atribut newcontext="true".
Vkládání hodnot proměnných (chceme-li je zobrazit) do obsahu stránky je
jednoduché. Pro vypsání hodnoty proměnné produkt použijte například:
<p>Hodlate si koupit $(produkt).</p>
V praxi se často používá syntaxe bez závorek čili pouze $produkt, my ovšem
budeme závorky používat. Pokud potřebujete obsah proměnné použít jako součást
URL, je potřeba převést speciální znaky (které se v URL nesmějí objevit
například mezery) na escape sekvence. Toho lze dosáhnout tak, že se za jméno
proměnné doplní ":e".
Nyní se dostáváme k tomu, jak nastavovat hodnoty proměnných. Jsou celkem tři
způsoby: Pomocí elementu setvar, pomocí vstupních prvků anebo pomocí
skriptování. Nyní se podíváme na první způsob, ke zbylým dvěma se vrátíme níže.
Element setvar může být použit uvnitř elementů go, prev a refresh. Jméno
proměnné se udává u atributu name, nastavovaná hodnota se udává u atributu
value. Jako nastavovanou hodnotu je možné použít i hodnotu jiné proměnné. Zde
je kratičký příklad použití tohoto elementu:
<go href="."><setvar name= "produkt" value="Destnik velky" ></go>
Vkládání informací formuláře
Až doposud jsme klientovi pouze informace zasílali. Nyní se podíváme, jak
informace od uživatele získat. Podobně jako v HTML je i ve WML možné do stránky
umisťovat vstupní pole. Zde se seznámíme se vstupní řádkou a seznamem pro výběr.
Pro vstupní řádku se používá element input. Ten má mnoho atributů, kterými se
vstupní řádka parametrizuje. Těmi nejdůležitějšími jsou:
Nejlépe je vidět fungování tohoto elementu na příkladu. Vytvoříme si jednoduché
vstupní pole pro zadání uživatelského jména:
<input name="username" title="Uzivatelske jmeno" maxlength="20"/>
Pro výběr ze seznamu se používá element select. Ten má atributy name, title,
value, format, které mají stejný význam jako u elementu input. Jednotlivé volby
v seznamu se zapisují do samostatných elementů option, které se vkládají do
elementu select. Element option má atribut value, do kterého se specifikuje
hodnota proměnné, pokud si uživatel vybere příslušnou položku. Vlastní text
volby se vloží do elementu option. Opět je vše nejlépe vidět na příkladu (výběr
dopravního prostředku):
<p>
Vyberte zpusob dopravy:
<select name="doprava" title="Zpusob dopravy" value= "LET">
<option value="BUS">Autobusem</option>
<option value="LET">Letadlem</option>
<option value="VLA">Vlakem</option>
</select>
</p>
Odesílání informací na server
Odesílání informací je poněkud krkolomné. Vlastní odeslání se provede pomocí
elementu go, který známe již z minulého dílu. Pro odeslání je třeba nastavit
hodnotu atributu method na hodnotu post nebo get. Význam těchto hodnot je
shodný jako v prostředí Webu. Dovnitř elementu go je třeba vložit elementy
postfield pro každou položku, kterou chcete odeslat na server. Element
postfield má dva atributy name, který obsahuje jméno, pod kterým bude položka
odeslána na server, a value, který obsahuje odesílanou hodnotu. Jako hodnotu je
možné vložit pevnou hodnotu i proměnnou.
Jak známo, reakci elementu go je možné nastavit na nějakou událost (což nebude
příliš praktické) nebo na nějakou akci. Pro potvrzení a odeslání dat na server
je určena akce typu accept, avšak odeslání dat na server lze ukrýt pod
jakoukoliv akci nebo událost. Nyní tedy vytvoříme trochu delší příklad, který
zajistí odeslání dat na server a jejich zpracování. Příklad je určen ke sčítání
dvou vložených čísel. Vlastní sčítání provede skript na serveru.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC"-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.
org/DTD/wml_1.1.xml">
<wml>
<card>
<do type="accept" label="Secist">
<go href="soucet.asp" method="get">
<postfield name="prvni" value="$(prvni)"/>
<postfield name="druhe" value="$(druhe)"/>
</go>
</do>
<p>
Scitani dvou cisel. Zadejte dve cisla, ktera budou sectena.
<br/>
<input title="Prvni cislo" name="prvni" format="*N"/>
<br/>
<input title="Druhe cislo" name="druhe" format="*N"/>
</p>
</card>
</wml>
Nyní ještě uvedu serverovou část, zde odkazovanou jako soucet.asp. Tento skript
berte i jako ukázku tvorby dynamicky generovaných WML stránek.
<% Response.ContentType = "text/vnd. wap.wml"
prvni = CDbl(Request.QueryString("prvni"))
druhe = CDbl(Request.QueryString ("druhe"))
%>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http:// www.wapforum.
org/DTD/wml_1.1.xml">
<wml>
<card>
<p>Soucet cisel<br/>
<%=prvni%> + <%=druhe%> = <%=(prvni+druhe)%>
</p>
</card>
</wml>
Pokud chcete pro odeslání použít metodu GET (tedy prostřednictvím URL), je také
možné vytvořit běžný hyperlink, kde do příslušného místa uvedete odkazy na
proměnné. Například:
<a href="login.asp?username= $(jmeno)&password=$(heslo)">.</a>
WML Script
WML Script je programovací jazyk, který můžete používat k programování na
klientské straně wapových aplikací. Tento jazyk vychází z JavaScriptu, který se
používá v prostředí Webu. Jelikož jde o jazyk velmi obsáhlý, berte toto
seznámení spíše jako krátkou ochutnávku skriptovacích možností ve WML.
Důležitým rozdílem je, že se skripty nepíší do jednoho souboru společně s
návrhem stránky. Z tohoto důvodu je třeba při vyvolávání nějaké funkce ze
skriptu udat také cestu k tomuto skriptu. Vyvolávání se provádí opět pomocí
elementu go, avšak tentokrát klient nezmění zobrazovanou stránku po skončení
skriptu zůstává zobrazena stránka původní. Proto obvykle skripty po svém
skončení vyvolávají překreslení zobrazované stránky nebo novou stránku, která
vypíše výsledky na displej. Element go je opět nutné vložit do ošetření nějaké
akce. Například:
<do type="options" label= "Provest operaci">
<go href="script.wmls#funkce(parametr1,parametr2)"/>
</do>
Jméno vyvolávané funkce ze skriptu se zapisuje za znak #. Všechny parametry
jsou volané hodnotou jejich prostřednictvím tedy nelze vrátit žádnou hodnotu.
Vrácení hodnot se provádí (jak uvidíte dále) tak, že předáte jméno proměnné, a
skript sám na konci své práce zajistí změnu hodnoty proměnné s uvedeným názvem.
Hlavní omezení oproti JavaScriptu je v šíři dostupných knihoven. Jejich
podrobný popis naleznete v referenční příručce k WML Scriptu. Hlavní knihovnou
jazyka WML Script je knihovna Lang, která obsahuje základní funkce, jako jsou
abs, min, max, random a několik dalších. Knihovna Float obsahuje několik funkcí
pro práci s reálnými čísly zejména funkce pro zaokrouhlování a funkci pro
výpočet druhé odmocniny (sqrt). V knihovně String naleznete větší množství
funkcí pro práci s řetězci například lenght, find, replace, trim, elements a
další. Funkce pro práci s URL adresami jsou v knihovně URL.
Důležitá je knihovna WMLBrowser, která obsahuje funkce pro ovládání vlastního
prohlížeče WML. Obsahuje funkce go (pro přechod na specifikovanou URL),
refresh, back, getVar (zjištění hodnoty nějaké proměnné z WML), setVar (pro
nastavení hodnoty proměnné), nextContext (vymazání obsahů všech proměnných) a
getCurrentCard.
Nyní uvedeme stejný příklad na sčítání dvou čísel. Tentokrát je ale sčítání
provedeno skriptem na klientovi.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http:// www.wapforum.
org/DTD/wml_1.1.xml">
<wml>
<card id="card1" title="Title">
<do type="options" label="Secist">
<go href="soucetskript.wmls#soucet(soucet,$(prvni),$(druhe))"/>
</do>
<p>Scitani dvou cisel. Zadejte dve cisla, ktera budou sectena.<br/>
<input title="Prvni cislo" name="prvni" format="*N"/><br/>
<input title="Druhe cislo" name="druhe" format="*N"/><br/>
Soucet = $soucet
</p>
</card>
</wml>
A vlastní skript, odkazovaný jako soucetskript.wmls, vypadá takto:
extern function soucet(promenna, prvni, druhe)
{
var soucet = Lang.parseFloat(prvni) + Lang.parseFloat(druhe);
var soucetString = String.toString(soucet);
WMLBrowser.setVar(promenna,soucetString);
WMLBrowser.refresh();
}
Na konci příkladu si povšimněte příkazu pro překreslení původní stránky v
prohlížeči. Pro přechod na stránku novou by se použil příkaz:
WMLBrowser.go ("URL");
0 1211 / pen
Parametry vstupu
AtributVýznam
nameJméno proměnné, se kterou
je vstupní řádka svázána
(a kam bude uložen vstup).
titleJméno vstupního pole, jak
bude prezentováno uživateli.
valueVýchozí (implicitní) hodnota
předvyplněná ve vstupním
poli.
maxlengthMaximální délka vloženého
textu.
formatVstupní maska (filtr) pro
zadávání hodnot.
(Podrobnější popis najdete
v dokumentaci.)
typeNabývá hodnot password
(pro hesla) nebo text (pro
ostatní). Implicitní je text.









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.