A treia lectie
Lectia aceasta este dedicata formularelor. Doar ca intotdeauna se intampla asa:
trebuie sa te ocupi de o chestie, dar iti vine sa faci altceva. :-) Asa ca
o sa vorbesc mai intai despre altceva. Deja ati putut observa, daca ati fost
atenti, ca exista diferente intre browsere. IE vede ceva, Netscape vede altceva.
Acesta e unul dintre motivele pentru care lucrurile au ajuns ceva mai complicate
cu HTML. Pentru ca o imagine sa aiba un sunet de fundal, de pilda, fisierul
de sunet (midi sau wave) este asociat paginii cu ajutorul unei etichete. Din nefericire,
pana la versiunea 4.0 a browserului IE (daca nu ma insel) nu era vorba de aceeasi
eticheta pentru ambele browsere. IE vedea eticheta <BGSOUND SRC="sunet.wav">.
Pentru a reda un sunet de mai multe ori la rand, era folosit atributul LOOP,
care primea ca valoare un numar - de cate ori sa fie redat sunetul (1, 2, 3,...,1000
etc.). O exceptie era valoarea INFINITE (sau, ca valoare numerica echivalenta,
-1) - sunetul era cantat la nesfarsit (sigur, la un moment dat vizitatorul
paginii se plictiseste sau moare, calculatorul se distruge datorita uzurii, omenirea
dispare, universul colapseaza, dar din cauza etichetei asteia nenorocite, sunetul
se aude mai departe; la nesfarsit). Exemplu:
<BGSOUND SRC="sunet.mid" LOOP="-1">
Sa nu folositi niciodata eticheta asta! Uitati-o in momentul asta! Nu din cauza
povestii deprimante cu sunetul cantat la infinit, ci fiindca Netscape nu o recunoaste,
asa ca mai mult de jumatate din vizitatorii paginii nu vor auzi sunetul. Cei de la
Netscape au propus o alta eticheta. Sa vedem mai intai cum arata si dupa aia vin
si explicatiile:
SRC e acelasi atribut, functioneaza la fel ca pretutindeni unde l-ati
mai intalnit. AUTOSTART e folosit pentru ca sunetul sa nu inceapa automat
sa fie cantat (altfel, valoarea implicita e "true"). Care e poanta?
Ce rost ar avea sa fie incarcat in pagina fara sa fie cantat? Uitati-va mai
departe, la atributul HIDDEN. Atunci cand acesta nu este folosit (sau cand
are valoarea "false"), in pagina apare o imagine cu butoane (dimensiunile
acesteia se dau prin atribute suplimentare, HEIGHT si WIDTH) gen: play,
pause, stop etc. iar vizitatorul paginii poate apasa singur
pe ele pentru a asculta sunetul. Sigur, in exemplul de mai sus sunetul va fi
incarcat complet degeaba, fiindca HIDDEN are valoarea "true". :-)
In fine, LOOP functioneaza ca mai inainte. Pentru valori numerice
sunetul e cantat de atatea ori cat spune numarul. Daca
valoarea este "true", sunetul e cantat incontinuu, cat timp e incarcata
pagina respectiva in browser. Daca valoarea este "false" sau atributul nu
e folosit, sunetul e cantat o singura data. Eticheta e recunoscuta si de
Internet Explorer, de la versiunea 4.0, dar e tratata un pic diferit. Valorile
numerice pentru LOOP nu conteaza (poate ati observat, pagina aceasta are un
sunet de fundal (v. codul); Netscape il reda de cinci ori la rand, dupa care se
opreste, fiindca LOOP="5"; daca sunteti cu IE, sunetul nu se opreste, asa ca
o sa va cam innebuneasca de cap). Daca atributul apare si are alta valoare
decat "false", sunetul e redat incontinuu. Panoul cu butoane care apare atunci
cand HIDDEN nu are valoarea "true" este diferit de cel din Netscape (in plus,
nu e nevoie sa fie folosite atributele HEIGHT si WIDTH pentru a da dimensiunea
corecta a imaginii)
Cam la fel stau lucrurile si cu secventele video. Initial pentru IE se folosea
tot eticheta IMG si pentru a prezenta in interiorul paginii filmulete (fisiere
cu extensia "avi" sau "mpg") doar ca pentru a da adresa fisierului se folosea atributul
DYNSRC in loc de SRC (dupa aceea venea atributul LOOP + un atribut complet curios,
START="MOUSEOVER,FILEOPEN" prin care se preciza daca secventa sa ruleze automat
de la inceput sau cand vizitatorul trece cu mouse-ul peste imagine, eventual sa
mai ruleze inca odata la trecerea mouse-ului s.a.m.d.). Chiar daca IE suporta
in continuare eticheta asta, standardul care s-a impus a venit tot de la Netscape.
Aceeasi eticheta ca pentru sunete, cam cu aceleasi atribute, e folosita si pentru
secvente video. Nu mai dau o mie de explicatii. Iata un exemplu:
Exista insa diferente suplimentare legate de felul in care au fost create programele
pentru cele doua browsere. IE are incorporate module pentru redarea anumitor tipuri
de fisiere video ("avi" si "mpg", de pilda, cum spuneam). Netscape nu. Pentru a
vedea asa ceva trebuie instalate programase suplimentare (termenul e "plug-in").
Ideea principala e simpla: daca nu aveti nevoie NEAPARAT de astfel de elemente multimedia,
nu le folositi. Nu e sigur ca ele pot fi vazute (sau auzite, ca de mirosit nici nu
poate fi vorba) de vizitatorii potentiali ai paginilor voastre si, in plus, de obicei
sunt pastrate in fisiere de dimensiuni mari, care ocupa loc pe server, se transfera
greu prin retea etc. etc. etc. Puteti folosi elemente multimedia atunci cand folositi
formatul HTML pentru a realiza prezentari pe care nu le distribuiti prin retea, ci pe
dischete sau CD-uri.
Mai departe cu diferentele dintre Netscape si IE. Tineti minte eticheta BLINK? Textul
Clipeste in Netscape dar nu si in IE. Incercati sa incarcati pagina asta, pe rand,
in IE si Netscape si verificati ce se intampla cu urmatorul text:
In Netscape nimic. In IE, lucrurile stau complet diferit. Va lamuriti in cod.
Mai am un exemplu. Incarcati, tot asa, in Netscape si IE pe rand, pagina
asta, dupa care verificati
codul.
Uneori, dincolo de diferentele dintre browsere, apar lucruri si mai ciudate. In
documentatiile limbajului HTML veti gasi, probabil, urmatoarea eticheta:
text
Textul din aceasta eticheta ar trebui sa ramana in pagina acolo unde
a aparut la inceput, fara sa curga impreuna cu restul textului atunci
cand este folosita bara de scroll. Acum, de pilda, scriu un
text cuprins in aceasta eticheta. Gata, am inchis-o. Ati
observat ceva special? Nimic. Nici un browser nu o vede. Lucrurile stau
asa fiindca, pur si simplu, cei care dezvolta limbajul HTML si cei care
construiesc browserele nu sunt aceiasi oameni (nu, n-are legatura cu
personal identity).
Acum nu mai am scapare, trebuie sa vorbesc si despre formulare. Ok, ok... In primul
rand, formularele nu va folosesc la nimic deocamdata. Puteti folosi elementele unor
formulare pentru hyperlink-uri, dar nu aveti nevoie de asta. De ce tin neaparat
atunci sa le mai prezint? Nu stiu, probabil ca e ceva psihanalizabil :-) Mai vedem
pe parcurs. Structura formularelor aminteste de cea a tabelelor, hartilor s.a.m.d.
Exista anumite etichete speciale care introduc obiectele continute de un formular
iar acestea, daca nu sunt incapsulate in eticheta dubla FORM, nu au absolut
nici un efect. Un formular arata totdeauna asa, la nivelul codului:
Spre deosebire de cazul etichetelor duble TABLE si FRAMESET dar la fel ca MAP, etichetele
duble FORM nu pot fi incapsulate unele in altele. Nu exista "subharti" si "subformulare".
Este in schimb posibil sa avem mai multe formulare intr-o singura pagina.
Sa luam un exemplu:
Comentariu: formularul creat are doua atribute: method si action;
method are doua valori posibile: "get" si "post"; atributul spune
ce se intampla atunci cand cineva foloseste un buton de tip "submit" aflat in formular (vezi
codul din formular: <input type="submit" value="trimite mail">.); pe langa un buton de
"submit" (folosit pentru a trimite datele din formulare catre server), exista si elemente ale
formularului folosite pentru introducerea datelor, cum ar fi aici casuta de text (codul:
<input type="text" name="test" size="30">; atunci cand metoda de trimitere a datelor
este "get", valorile introduse cu ajutorul elementelor formularului (aproape toate sunt create cu
eticheta simpla <input>) sunt adaugate la coada adresei (absolute) de web a paginii in
care se afla formularul, dupa care intregul sir e transmis catre server (acolo se afla aplicatii care
preiau datele si raspund (eventual creeaza automat niste pagini de web etc.) in functie de acestea.
Celalalt atribut al etichetei FORM, action, primeste ca valori siruri de semne care
ar putea aparea si ca valori ale atributului HREF (la alte etichete); cu ajutorul acestor valori se
stabileste de fapt carui computer ii sunt adresate datele, ce aplicatie de pe calculatorul respectiv
sa le preia si sa le proceseze etc. etc. (in cazul de aici datele sunt trimise cu ajutorul
programului de mail al browserului - Messenger pt. Netscape, Outlook pt. IE - la adresa specificata
prin AD@RESA). Ok, nu va mai bat la cap cu toate astea. Oricum nu va pot fi de prea
mare folos. Puteti, eventual, sa vedeti exemple de formulare folosite pentru a trimite date
catre motoarele de cautare de pe internet (de obicei e folosita metoda "get"), daca sunteti
curiosi.
Formularele pot fi insa folosite si altfel - datele pot fi introduse de utilizator (si se pot
reintoarce catre el) folosind aplicatii care ruleaza in interiorul browserului, nu pe
server. Despre asta insa NU VETI AFLA in acest tutorial, ci in urmatorul (:-). Deocamdata, insa
puteti sa va uitati la exemplele urmatoare (vin si comentariile dupa aceea):
Comentarii: Cum spuneam, majoritatea elementelor formularelor sunt create cu ajutorul
etichetei <input>. Exceptie face elementul in care poate fi introdus text
pe mai multe randuri (<textarea> </textarea>) si etichetele pentru drop-down
lists (<select> </select> si <option> </option>).
Toate etichetele suporta atributele name si value. NAME este folosit pentru
a da un nume fiecarui element al formularului (acest nume va fi folosit pentru a identifica
elementul respectiv in interiorul aplicatiei care foloseste elementele formularului pentru
a interactiona cu utilizatorul). In cazul butoanelor radio, butoanele pot fi grupate impreuna
daca li sa da acelasi nume. Dintre butoanele cu acelasi nume doar unul poate fi selectat
la un moment dat. VALUE este folosit pentru a atribui o valoare by default elementului
respectiv. In functie de element, valoarea va fi vizibila (textul de pe buton sau din
casuta de text) sau nu (la radio button si checkbox). In cazul in care valoarea nu este
specificata, o valoare va fi atribuita automat ("on" pentru un buton radio selectat sau
o casuta - tip checkbox - selectata, "Reset" pentru butonul de reset, nimic - "" - pentru
casute de text si arii de text etc.). VALUE, daca vreti, creaza un fel de conducta prin
care datele sunt vehiculate, prin intermediul paginii HTML, intre aplicatie si utilizator.
Unele etichete suporta atributul SIZE. Pentru a intelege ce si cum puteti experimenta cu
diferite valori pentru eticheta <select> </select>. In rest, valoarea
atributului da dimensiunea casutelor pt. text (in litere). Pentru <textarea>
</textarea> acelasi lucru e realizat prin atributul COLS, in timp ce valorile atributul
ROWS indica numarul de randuri de text care poate fi scris in ariile de text. In fine,
etichetele pentru unele elemente ale formularelor ce pot fi selectate (radio buttons,
checkboxes, linii din drowp-down lists) pot primi fie atributul fara valori CHECKED, fie
atributul SELECTED (pentru <option> </option>). Cu titlu informativ, o sa
va spun totusi ca selectarea si deselectarea elementelor respective, apasarea butoanelor (cu click)
si alte cateva intamplari sunt considerate evenimente ce declanseaza executarea
anumitor instructiuni in aplicatia care controleaza formularul. Uitati-va, la codul
urmatorului exemplu, extrem de simplu:
Daca doriti sa va formati o idee despre ce se poate face cu ajutorul formularelor,
uitati-va la acest exemplu.
Concluzia este ca formularele nu va folosesc aproape la nimic atata timp cat nu stiti
sa scrieti aplicatiile care sa le controleze. Asta e :-(. Sorry. Asta e si motivul
pentru care nu exista exercitii in aceasta lectie. In schimb, va mai ofer
cateva exemple de formulare utile. Chiar daca nu puteti acum intelege tot codul, va
puteti da seama usor cum sa folositi aceste exemple in paginile proprii:
Lista de linkuri
Linkuri cu butoane
Browser in browser
Linkuri cu butoane radio
Feedback prin email
Gata, am terminat. Bineinteles, nu toate elementele care pot aparea intr-un
formular au fost prezentate in aceasta lectie. Nu toate atributele au iesit
la iveala. Stiu ca este destul de frustrant ca dupa ce te chinui sa intelegi
ceva sa ti se spuna "Stii, de fapt mai sunt si alte lucruri pe care nu le-ai
aflat." Ideea e ca daca tot faci un efort, la sfarsit sa stii ca ai terminat
cu toata povestea si nu a ramas nimic pe dinafara (totul sa fie complet, rotund
etc. etc.). Imi pare rau ca lucrurile ies mereu asa.
Cuprins Lectia anterioara
Lectia urmatoare