Laboratorium z przedmiotu Aplikacje WWW

Transkrypt

Laboratorium z przedmiotu Aplikacje WWW
Aplikacje WWW
Laboratorium z przedmiotu Aplikacje WWW - zestaw 03
Cel zajęć. Zapoznanie z przeznaczeniem i sposobami obsługi kontrolek zaawansowanych w aplikacjach WWW.
Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć tematyka stanowi wprowadzenie do
wykorzystania zaawansowanych kontrolek w tworzeniu aplikacji WWW w języku ASP.NET.
Aby ze zrozumieniem zrealizować zadania, przewidziane do wykonania w ramach zajęć laboratoryjnych, należy
zapoznać się z następującymi zagadnieniami: MultiView i View, Wizard, FileUpload, AdRotator, Calendar.
1.
Kontrolka MultiView i View
Funkcjonują razem, tworząc serie nawigacyjnych sekcji strony. Czasami trzeba podzielić stronę internetową
na oddzielne fragmenty z zapewnieniem łatwej nawigacji między nimi, przy czym w danym momencie jest
wyświetlany tylko jeden fragment. Kontrolka MultiView posiada cztery właściwości – w celu
zautomatyzowania nawigacji między widokami.
Atrybuty CommandName kontrolki MultiView:
NextViewCommandName
NextView
Udostępnia następny widok z wyższą
wartością
ActiveViewIndex.
Jeżeli
wyświetlany jest ostatni widok, wówczas
ActiveViewIndex zostanie ustawiony jako
-1 i nic nie zostanie wyświetlone.
PreviousViewCommnadName
PrevView
Udostępnia następny widok z niższą
wartością
ActiveViewIndex.
Jeżeli
wyświetlany jest pierwszy widok,
wówczas
ActiveViewIndex
zostanie
ustawiony jako -1 i nic nie zostanie
wyświetlone.
SwitchViewByIDCommandName
SwitchViewByID
Udostępnia obiekt View o podanym
identyfikatorze ID. Aby określić ID
można użyć atrybutu CommandArgument.
SwitchViewByIndexCommnadName
SwitchViewByIndex
Udostępnia obiekt View o podanym
indeksie. Aby określić indeks można
użyć atrybutu CommandArgument.
Np. kontrolki Buton, ImageButton, LinkButton z atrybutami CommandNameNextView, po kliknięciu przycisku
będą automatycznie przenosiły kontrolkę MultiView do kolejnego obiektu View. Odbędzie się to bez
potrzeby pisania dodatkowego kodu(nie trzeba ręcznie opisywać zdarzenia Click). Kontrolka MultiView jest
„pojemnikiem” na kontrolki View, nie posiada przez to możliwości ustawienia stylu. Kontrolka View ma
właściwość Visible, która to(true/false) ustala czy dany komponent ma być widoczne.
2.
Kontrolka Wizard
Tworzy podobny zestaw okien dialogowych stosowanych do przeprowadzenia użytkownika poprzez łatwy
do zrozumienia zbiór kroków, realizujących pewne zadanie. Podobnie jak kontrolka MultiView również
Wizard składa się ze zbioru obiektów, tym razem to WizardStep. Pochodzi od klasy View. Wszystkie
kontrolki w wszystkich użytych WizardStep są częścią hierarchii kontrolek na stronie, oznacza to że przez
kod dostępne SA one podczas działania programu, bez względu na to który WizardStep jest wyświetlany
aktualnie. Nie jest obsługiwany mechanizm cross-page posting. Kontrolka Wizzard posiada wiele właściwości
dotyczących jej wyglądu i zachowania. Poniżej przedstawione zostały najważniejsze elementy:
ActiveStep
Aktualnie wyświetlany krok ze zbioru WizardStep.
CancelDestinationPageUrl
Adres URL, który zostanie wywołany po kliknięciu
przycisku Anuluj.
CellSpacing
Liczba pikseli między komórkami. Domyślnie jest 0
1
Aplikacje WWW
FinishDestinationPageUrl
Adres URL, który zostanie wywołany po kliknięciu
na przycisk Zakończ.
SkipLinkText
Wygenerowana
jako
alternatywny
tekst
niewidocznych
elementów
graficznych
do
współpracy z technologiami wspomagającymi.
Domyślnie „Pomiń nawigację” zlokalizowane dla
serwera lokalnego.
StepStyle
Właściwości stylów dla obiektów WizardStep.
Ponad to, właściwości kontrolki powiązane z przyciskami można podzielić na te opisujące adres obiektu
graficznego przypisanego do danego przycisku – kończące się na ImageUrl – np. CancelButtonImageUrl lub
StartStepButtonImageUrl. Właściwości opisujące style kończą się na Style – np. CancelButtonStyle,
StartStepButtonStyle, teks wyświetlany na przycisku to końcówka Text – np. CancelButtonText,
StartStepButtonText oraz typ wygenerowanego przycisku(Button, Image, Link) kończą się na Type – np.
CancelButtonType lub StartStepButtonType.
Zdarzenia kontrolki Wizard:
3.
ActiveStepChanged
Wywołania po wyświetleniu nowego kroku.
CancelButtonClick
Wywołanie po kliknięciu przycisku Anuluj.
NextButtonClick
Wywołanie po kliknięciu na przycisk Dalej.
SideBarButtonClick
Wywołanie po kliknięciu na przycisku paska
bocznego.
Kontrolka FileUpload
Dostarcza przeglądarkę plików umożliwiającą wskazanie pliku przeznaczonego do przekazania do serwera
oraz infrastrukturę obsługującą te zadania. Kontrolka dziedziczy po klasie WebControl. Kontrolka dzięki
przyciskowi „Przeglądaj” oraz polu tekstowemu do wpisania nazwy pliku znacznie ułatwia przeglądanie
i zaznaczanie plików do wysłania.
Właściwości kontrolki FileUpload:
FileContent
Zwraca obiekt Stream, który wskazuje na plik
przeznaczony do przekazania do serwera.
FileName
Zwraca nazwę przekazywanego pliku bez żadnych
szczegółowych informacji.
HasFile
Jeżeli przyjmie wartość true, to kontrolka posiada
odniesienie do pliku przeznaczonego do przekazania
do serwera.
PostedFile
Zwraca odniesienie do pliku, który został
przekazany do serwera. Posiada właściwości tylko
do odczytu(tabela niżej).
Właściwości HttpPostedFile:
ContentLenght
Zwraca podaną w bajtach wielkość przekazanego
pliku.
2
Aplikacje WWW
4.
ContentType
Zwraca typ MIME przekazanego pliku.
FileName
Zwraca pełną nazwę pliku na komputerze klienta.
InputStream
Zwraca obiekt
przekazany plik.
Stream,
który
wskazuje
na
Kontrolka AdRotator
Kontrolka prezentuje losowo wybrany element graficzny z listy przy każdym wczytaniu strony. Najczęściej
jest wykorzystywana do wyświetlania przeróżnych reklam na stronie WWW. Zadaniem kontrolki jest
wyświetlenie pliku graficznego, losowo wybranego z listy przechowywanej w oddzielnym pliku XML, lub
jako dołączone źródło danych. Dziedziczy po WebControl, ale posiada kilka swoich właściwości:
AdvertisementFile
Ścieżka do pliku XML zawierającego listę reklam
i ich atrybuty.
AlternativeTextField
Nazwa elementu z pliku Advertisement lub pola
danych, w którym jest przechowywany alternatywny
teks. Domyślnie: AlternateText.
DataSource
Obiekt z którego kontrolka będzie pobierać dane.
ImageUrlField
Nazwa elementu z pliku Advertisement lub
pojadanych, w którym jest przechowywany adres
URL pliku. Domyślnie ImageUrl.
Target
To okno przeglądarki, ramka, w której wyświetlona
zostanie zawartość powiązanej strony po kliknięciu
kontrolki AdRotator.
AdCreated
Zdarzenie występują raz, w czasie po utworzeniu na
serwerze kontrolki, ale przed wyświetleniem na
ekranie.
Plik advertisement jest plikiem XML. Zawiera on informacje o reklamach(obrazach) wyświetlanych przez
kontrolkę AdRotator. Jego położenie oraz nazwa jest określone poprzez wartość AdvertisementFile kontrolki.
Znaczniki XML w pliku advertisement:
Advertisement
Obejmuje cały plik XML.
Ad
Odgradza każdą reklamę.
ImageUrl
Adres URL pliku przeznaczonego do wyświetlania.
Jest wymagany.
NavigateUrl
Adres URL strony, która zostanie uruchomiona po
kliknięciu kontrolki(danego obrazu).
AlternateText
Teks, który zastąpi obrazek w razie jego nie
odczytania.
Keyworld
Kategoria reklamy. Dzięki ustawieniu jego, oraz
właściwości KeyworldFilter może zostać również użyty
do filtrowania wyświetlanych reklam.
3
Aplikacje WWW
Impressions
5.
Wartość mówiąca jak często jest wyświetlana dana
reklama względem innych reklam zawartych w pliku.
Kontrolka Calendar
W pełni wyposażona kontrolka do wyświetlania i wybierania dat. Jej zadanie to: wyświetlenie kalendarza
oraz prezentację dnia, miesiąca i aktualnego roku. Użytkownik może zaznaczyć dzień, tydzień, miesiąc.
Może też zaznaczyć zakres dni.
Właściwości kontrolki Calendar:
Caption
Ciąg zanków…
Tekst, który zostanie wyświetlony na
stronie nad kalendarzem.
CellPadding
1,2,3…
Podana w pikselach odległość między
krawędzią
a zawartością
komórki.
Domyślnie 2.
DayNameFormat
Full, Short, FirstLetter,
FirstTwoLetters
Format dni tygodnia. Short to pierwsze
trzy litery nazwy dnia. Domyślnie Short.
FirstDayOfWeek
Default, Sudany, Monady…
Dzień
tygodnia,
który
zostanie
wyświetlony w pierwszej kolumnie.
Wartość domyślną(Default) określającą
ustawienia w systemie operacyjnym.
NextMonthText
Ciąg znaków…
Teks wyświetlający nawigację do
kolejnego miesiąca. Wartość domyślna
to %gt;(to znak >). Opcja ma
zastosowanie jedynie wtedy, gdy
właściwość ShowNextPrevMonth jest
ustawiona na true.
NextPrevFormat
CustomText, FullMonth,
ShortMonth
Przy użyciu CustomText należy podać
rzeczywisty teks do wykorzystania dla
opcji NextMonthText i PrevMonthText.
SelectedDate
DataTime
Pojedyncza zaznaczona data. Nie
przechowuje czasu(jak SelectedDates).
SelectedDates
DataTime[]
Zbiór
obiektów
DataTime
po
zaznaczeniu wielu dat. Przechowywana
jest jedynie data – czas jest ustawiony na
null.
SelectMonthText
Ciąg znaków…
Tekst przeznaczony dla elementu
wyboru miesiąca w kolumnie wyboru.
Wartość domyślna(>>) generuje
>>. Opcja ma zastosowanie tylko dla
ustawionej opcji SelectionMode na
DayWeekMonth.
ShowDayHeader
true/false
Dni tygodnia zostaną przedstawione
jako nagłówki(wartość true, domyślna).
ShowTitle
true/false
Czy zostanie wyświetlony tytuł. Jeżeli
jest false to elementy nawigacyjne do
poprzedniego i następnego miesiąca
zostają ukryte, domyślnie true.
UserAccessibleHeader
true/false
Wskazuje, czy zostanie użyty nagłówek
dla technologii wspomagających.
Gdy użytkownik ma zaznaczyć(lub chce to zrobić) pojedynczy dzień, całego tygodnia a nawet miesiąca,
należy ustawić własność SelectMode. Jej wartości przedstawia tabela:
4
Aplikacje WWW
Day
Pozwala na zaznaczenie pojedynczego dnia –
domyślna wartość.
DayWeek
Pozwala na zaznaczenie pojedynczego dnia lub
całego tygodnia.
DayWeekMonth
Pozwala na zaznaczenie pojedynczego dnia, całego
tygodnia lub całego miesiąca.
None
Nie można nic zaznaczyć.
Jeżeli chcemy wpłynąć na wygląd kalendarza – zmienić jego wygląd należy posłużyć się stylami i tak
TableItemStyle reguluje jak ma wyglądać każda część kontrolki Calendar, jeżeli chcemy bardziej dokładnie
wpłynąć na wygląd możemy skorzystać z własności: DayHeaderStyle, DayStyle, NextPrevStyle itp. – wszystkie
własności kończące się na Style.
Jeżeli chcemy pokazać lub ukryć pewne własności kalendarza – np. nazwy, możemy je wyświetlić lub
zakazać ich pokazywaniu. Do tego celu służą właściwości kończące się na Show. Własność ShowDayHeader
ustawiona na true(domyślnie) wyświetla nazwy dni tygodnia. ShowGirdLines (domyślnie false) pokazuje lub nie
linie siatki między dniami miesiąca.
Kolejną rzeczą jaka jest podstawowa dla kontrolki Calendar to konwersja daty otrzymanej do postaci
znakowej, którą to postać możemy później odpowiednio wykorzystać/przetworzyć. Do tego celu służą
następujące metody:
ToFileName
Konwertuje do formatu lokalnego systemu plików.
ToLongDateString
Konwertuje do ciągu znaków długiego zapisu daty.
ToLongTimeString
Konwertuje do ciągu znaków długiego zapisu czasu.
ToShortTimeString
Konwertuje do ciągu znaków krótkiego zapisu daty.
ToString
Konwertuje do postaci ciągu znaków.
oraz prezentację dnia, miesiąca i aktualnego roku. Użytkownik może zaznaczyć dzień, tydzień, miesiąc.
Może też zaznaczyć zakres dni.
Zadanie 1. Proszę zrealizować aplikację WWW, która powinna odznaczać się następującymi cechami:

Aplikacja ma stanowić formularz, w którym użytkownik ma podać imię, nazwisko, adres e-mail oraz datę
urodzenia.

Aplikacja ma umożliwiać wybór daty urodzenia z kontrolki typu Calendar.

Kontrolka typu Calendar ma posiadać oznaczoną dzisiejszą datę.

Dni z poprzedniego i następnego miesiąca kontrolki typu Calendar mają być oznaczone innym kolorem.

Po podaniu wymaganych danych aplikacja ma przedstawić podsumowanie z prośbą o potwierdzenie
poprawności danych.

Aplikacja ma zostać zbudowana w oparciu o kontrolkę typu MultiView.
Aby zrealizować zadanie należy wykonać następujące kroki:
5
Aplikacje WWW

Proszę w swoim katalogu utworzyć projekt o nazwie „Zadanie 3.1”.
UWAGA! Przy dodawaniu do strony kolejnych kontrolek proszę o używanie unikalnych ID kontrolek
o nazwie związanej z ich przeznaczeniem, np. „buttonDalej”.

Proszę o dodanie do strony następującego kodu:
Po wykonaniu tej operacji strona w widoku Design powinna wyglądać następująco:

Następnie proszę o dodanie dostosowanie widoku „View1” do schematu przedstawionego na poniższym
rysunku. W tym celu proszę o umieszczenie w nim kontrolek typu Label, TextBox, Button i Calendar
Aby w kontrolce typu Calendar podświetlić aktualną datę, należy zmienić wartość właściwości TodayDayStyle >
BackColor.
Aby dni poprzedniego i następnego miesiąca były wyświetlane za pomocą innego koloru, należy zmienić
wartość właściwości OtherMonthDayStyle > ForeColor.

Po wykonaniu czynności z powyższego podpunktu proszę o przypisanie właściwości ActiveViewIndex
kontrolki typu MultiView wartości „0”. Spowoduje to domyślne wyświetlenie widoku „View1” posiadającego
indeks „0” po uruchomieniu strony.
6
Aplikacje WWW

Następnie proszę o implementację obsługi zdarzenia SelectionChanged kontrolki typu Calendar. Jego wystąpienie
ma powodować przypisanie wartości zaznaczonej daty do odpowiedniej kontrolki typu TextBox.
Podpowiedź: należy użyć konstrukcji metody ToShortDateString właściwości SelectedDate.

Następnie proszę o implementację obsługi zdarzenia wywołanego kliknięciem przycisku „Dalej”. Naciśnięcie
przycisku ma powodować zmianę widoku na „View2”, o ile wszystkie pola typu TextBox zostały wypełnione.
W przeciwnym wypadku ma pojawić się komunikat o braku wypełnienia odpowiedniego pola. Widok
„View2” ma zawierać informację o podanych danych, co przedstawia poniższy rysunek (proszę o jego
dostosowanie, aby był zgodny z rysunkiem):

Po wykonaniu powyższej czynności proszę o implementację obsługi zdarzeń wywołanych kliknięciem
przycisków w widoku „View2”. Naciśnięcie przycisku „Wstecz” ma powodować przejście do widoku
„View1”. Naciśnięcie przycisku „Dalej” ma powodować przejście do widoku „View3”, o ile poprawność
danych została potwierdzona. W przeciwnym razie ma zostać wyświetlony komunikat z prośbą o podanie
poprawnych danych.

Wszystkie komunikaty powinny posiadać wartość „False” przy właściwości EnableViewState. Ma to na celu
„wyczyszczenie” wartości komunikatu po przejściu między widokami.

Widok „View3” powinien zawierać informację, iż dane zostały poprawnie potwierdzone.
Przy ocenie zadania główny nacisk będzie kładziony na:

Wykonanie wszystkich założeń ujętych w treści zadania.

Prawidłowe nazewnictwo obiektów kontrolek.

Rozmieszczenie kontrolek na stronie (użycie CSS).

Implementację obsługi zdarzeń wywołanych naciśnięciem kontrolek typu Button.
7
Aplikacje WWW
Zadanie 2. Proszę zrealizować aplikację WWW, która powinna odznaczać się następującymi cechami:

Aplikacja ma umożliwiać upload plików do katalogu „reklamy”.

Wysyłane pliki mają spełniać następujące kryteria:

muszą posiadać rozszerzenie JPG, GIF lub PNG

muszą być nie większe niż 100 KB

jeśli w katalogu docelowym znajduje się plik o tej samej nazwie, plik nie może zostać
wysłany

Aplikacja za pomocą kontrolki AdRotator ma wyświetlać treści reklamowe z katalogu „reklamy”.

Po wysłaniu obrazu do katalogu „reklamy” aplikacja ma dodawać wpis do odpowiedniego pliku XML, w celu
umożliwienia wyświetlenia w kontrolce AdRotator nowo dodanego obrazu (parametry NavigateUrl,
AlternateText, Keyworld, Impressions za każdym razem mają być określone przez użytkownika).
Aby zrealizować zadanie należy wykonać następujące kroki:

Proszę w swoim katalogu utworzyć projekt o nazwie „Zadanie 3.2”.
UWAGA! Przy dodawaniu do strony kolejnych kontrolek proszę o używanie unikalnych ID kontrolek
o nazwie związanej z ich przeznaczeniem, np. „buttonWyslijPlik”.

Proszę o dodanie do projektu katalogu o nazwie „reklamy”.

Następnie proszę o umieszczenie na stronie kontrolki typu FileUpload oraz kontrolki typu Button, której
naciśnięcie powodować będzie próbę wysłania pliku do katalogu „reklamy”.

Po wykonaniu powyższej czynności proszę o obsługę zdarzenia OnClick dodanego przycisku.
Podpowiedzi:


Na początku należy sprawdzić, czy kontrolka FileUpload zawiera plik (właściwość HasFile)

Właściwości wysyłanego pliku są zawarte we właściwości PostedFile kontrolki typu FileUpload

Akceptowane typy wysyłanego pliku to: „image/jpg”, „image/gif”, „image/png”

Zapis pliku w katalogu docelowym dokonywany jest za pomocą metody SaveAs kontrolki typu
FileUpload (funkcja ta przyjmuje jako parametr ścieżkę bezwzględną, dlatego do mapowania ścieżki
należy użyć funkcji Server.MapPath)

Przykładowe sprawdzenie, czy dany plik istnieje w określonym katalogu:
Następnie proszę o upload dołączonych do zadania plików „KIK.jpg” oraz „PCz.jpg”.
8
Aplikacje WWW

Po wykonaniu tej operacji proszę o dodanie do projektu pliku typu XML, nadanie mu nazwy „reklamy.xml”
oraz o umieszczenie w nim następującej treści:

Następnie proszę o umieszczenie na stronie kontrolki typu AdRotator oraz o zmianę wartości jej parametru
AdvertismentFile na „~/reklamy.xml”. Po uruchomieniu strony internetowej i jej każdorazowym odświeżeniu,
kontrolka typu AdRotator wyświetli losowo wybraną reklamę.

Po wykonaniu powyższej czynności proszę o implementację metody, umożliwiającej dodanie do pliku
„reklamy.XML” nowego wpisu z parametrami nowej reklamy:

Następnie proszę o umieszczenie na stronie kontrolki typu Panel. Kolejnym krokiem zadania będzie
dynamiczne dodanie do kontrolki typu Panel czterech kontrolek typu Label i TextBox. W tym celu proszę
o implementację metody DodajKontrolki
9
Aplikacje WWW


Enum.GetName(typeof(nazwy),i) – zwraca wartość łańcuchową typu wyliczeniowego
„nazwy”, którego wartość przekazano za pomocą zmiennej „i”.

panelInput.Controls.Add(label) – dodaje dynamicznie do kolekcji kontrolek panelu
„panelInput” kontrolkę „label”
Następnie proszę o wywołanie metody DodajKontrolki w ciele metody Page_Load:
Po wykonaniu powyższych operacji i uruchomieniu strony internetowej, powinna ona wyglądać następująco:

Następnie proszę o implementację metody DodajWpisReklamy, która ma zostać wywołana po udanym
wysłaniu pliku na serwer. Metoda ta ma dodawać wpis do pliku „reklamy.xml” zgodnie z wartościami pól
typu TextBox podanymi przez użytkownika.
Podpowiedź:

Aby uzyskać dostęp do kontrolki tworzonej dynamicznie, należy skorzystać z funkcji
FindControl
10
Aplikacje WWW

Przed wysłaniem pliku na serwer i dodaniem wpisu do pliku XML należy sprawdzić, czy
użytkownik uzupełnił wszystkie pola typu TextBox
Przy ocenie zadania główny nacisk będzie kładziony na:

Wykonanie wszystkich założeń ujętych w treści zadania.

Prawidłowe nazewnictwo obiektów kontrolek.

Rozmieszczenie kontrolek na stronie (użycie CSS).

Sposób implementacji metody powodującej upload pliku.

Sposób implementacji metody FindControl.
Zadanie do domu. Proszę zrealizować aplikację WWW, która powinna odznaczać się następującymi cechami:

Aplikacja ta ma stanowić modyfikację aplikacji z zadania pierwszego.

Wszystkie kontrolki typu Label i TextBox mają być tworzone dynamicznie (jak w zadaniu drugim).

Dodatkowo aplikacja ma zawierać opcję wyboru wykształcenia użytkownika spośród następujących:
podstawowe, zawodowe, średnie, wyższe.
Zagadnienia, które należy uznać za przyswojone w trakcie zajęć. Po zajęciach będzie obowiązywać praktyczna
znajomość:

Znajomość zaawansowanych kontrolek ASP.NET: MultiView, View, Wizard, AdRotator, Calendar.

Znajomość dynamicznego dodawania kontrolek.

Znajomość operacji na typach wyliczeniowych.
Zagadnienia do samodzielnego zgłębienia dla dociekliwych. Osoby zainteresowane mogą dodatkowo
zapoznać się z następującymi tematami:

Kontrolki walidacyjne i wyrażenia regularne.
Zagadnienia do powtórzenia na następne zajęcia. Przed kolejnymi zajęciami należy powtórzyć następujące
zagadnienia:

Klasa Page

Sposoby przejścia na inną stronę:

Kontrolka HyperLink.

Metoda Server.Transfer.

Metoda Response.Redirect.

Mechanizm Cross-Page-Posting.

Stan sesji, widoku, stan aplikacji.
11
Aplikacje WWW
Wybrane aspekty dotyczące implementacji z wykorzystaniem języka PHP. Przykładem jaki zostanie
zaprezentowany w wykonaniu języka PHP to część zadania drugiego. Niżej przedstawiono kod obsługi przesyłu
pliku na serwer.

W linii od 13 do 26 zaprezentowany jest kod wyglądu strony PHP. W tym przykładzie ograniczono się do
prezentacji przesyłu pliku, ponieważ dodanie opisu jest analogiczne jak w przykładzie z poprzednich zajęć.
Główną częścią jest formularz w którym wykonujemy przesył danych do tej samej strony – odpowiednia
informacja jest konieczna, żeby PHP wiedział, że do czynienia z ciągłymi danymi tworzącymi jakiś zbiór enctype="multipart/form-data"

W linii 21 w polu ukrytym ograniczamy rozmiar ciągu danych jaki zostanie przesłany do 10MB – w tym
wypadku. W przeważającej liczbie dostępnych serwerów taka rzecz jest nie możliwa – średnio po parę MB(nie
wchodzą w to serwery Ala RapidShare). Ostatnie linijki ustalają nazwę „pliku” oraz jego odpowiednia
kontrolka w HTML – type=”file”.

Odnosząc się do kodu PHP w liniach od 2 do 12, w linii 2 ustalamy gdzie ma być umieszczony przesłany ciąg
danych; w lini następnej tworzymy nazwę tworu jaki zostanie utworzony – ścieżka plus jego nazwa. Tutaj
można łatwo zauważyć, że jeżeli dany plik nie może zostać umiejscowiony na serwerze – sprawdzamy jego
koniec – rozszerzenie – używając funkcji z poprzednich zajęć. Tak serwer nie daje do umieszczenia plików
np. .mp3.

Ostatnią i najważniejszą rzeczą jest umieszczenie danych w utworzonym wcześniej miejscu – jest to funkcja
move_uploaded_file(lokacja tymczasowego pliku, lokacja docelowego pliku). Funkcja zwraca true jeżeli operacja się
powiedzie, jeżeli nie skrypt zwraca błąd.
Ważną jeżeli nie najważniejszą rzeczą w PHP jest możliwość tworzenia w pełni obiektowych skryptów. Od wersji 5.0
PHP wspiera i z biegiem czasu będzie wymuszać właśnie taki sposób programowania. Zmusza to programistę to
zastanowienia się czego potrzebuje i jak ma wyglądać konstrukcja samej strony, dopiero potem tworzy ją samą.
Zapobiega to tworzeniu stron WWW nie czytelnych w debugowaniu oraz nadzorowaniu(dalszym rozwoju). Poniżej
został zaprezentowany fragment kodu prezentującego podstawowe możliwości tego języka.
12
Aplikacje WWW

Listing ten prezentuje kod dwóch klas – klasy TextBox oraz jej dziecka klasy TextBoxEx. Jak można się łatwo
domyśleć PHP również posiada możliwość dziedziczenia – tak jak w językach C# i Java jednokrotnego.

W linii 2 do 16 zdefiniowano klasę TextBox. Jest to bardzo uboga i prosta klasa mająca jedno pole
przechowujące napis – linia 4. Konstruktor przyjmuje parametr który przypisuje temu właśnie polu.

W linii 12 klasa otrzymała jedną metodę wyświetlającą na ekranie tabelę z napisem.

W liniach 18 i 19 najpierw zostaje utworzony nowy obiekt klasy TextBox, następnie wywołujemy jego metodę
display z wcześniej zadanym parametrem.

Domyślny konstruktor musi zostać zdefiniowany – np. bez parametrów.

Destruktor również jest – function __destructor(){…} – często jest on wykorzystywany to ostatecznego
rozłączania się z bazą danych.

W liniach 23 do 38 zdefiniowano klasę dziedziczącą po TextBox, mianowicie TextBoxEx – posiadającą jedno
pole więcej – grubość ramki, oraz nową metodę display().
13
Aplikacje WWW

Proszę zwrócić uwagę na linię 35. W niej to zaprezentowano jak można wywołać metodę klasy bazowej. Jest
to uniwersalny sposób – zarówno dla zwykłych metod jak i konstruktorów czy desktuktorów wygląda to tak
samo.

W liniach 40 i 41 odpowiednio tworzymy i wywołujemy nowy przycisk.
Zaawansowaną kontrolką – jeżeli można tak to określić jest programowanie po stronie klienta. Odciąża to serwer
z natłoku informacji jakie przychodzą z żądaniami od klientów, dzięki temu strony WWW mogą być bardziej
elastyczne na zaistniałe zdarzenia. Flagowym przykładem jest sprawdzanie poprawności formularza przy rejestracji,
czy tworzenie dynamicznego animowanego menu strony. PHP nie potrafi tego robić – on działa po stronie serwera.
Narzędziem a raczej językiem z jakim przyjdzie się w tym przykładzie poznać to – JavaScript.
Pierwszy przykład w tym języku nie jest rozbudowany i stosunkowo prosty. Stworzony zostaje mianowicie prosty
banner reklamowy, który jest animowany – zmienia swoja zawartość w czasie:
Jak widać na obrazie powyżej jest to przejście z jednego obrazka na drugi w pewnym odstępie czasu. Zapewne na
myśl przychodzi animowany GIF, ale stosując tą technikę jest do dyspozycji cała paleta barw i w praktyce mniejszy
rozmiar pliku animowanego jak to ma miejsce dla GIF’a.
Kod strony HTML jest bardzo prosty:

Nowością jest linia 5 gdzie to dodajemy do pliku HTML’a plik „script.js” – jest to plik z kodem JavaScript
jaki zostanie dołączony w trakcie interpretacji strony przez przeglądarkę WWW.

W linii 9 stworzony został obraz który będzie się zmieniał. Jak łatwo zauważyć jest to statyczny obraz, ale
z parametrem id.
14
Aplikacje WWW

Kod pliku .js wygląda następująco:

W linii pierwszej jest polecenie mówiące o tym, że po załadowaniu strony przez przeglądarkę WWW –
wykonaj funkcję rogate.

Linie 3 i 4 są odpowiednio zmiennymi. Pierwsza zmienna – linia 3 to tablica elementów jakimi są ścieżki
dostępu do obrazków – w tym przykładzie trzech. W linii 4 stworzony jest indeks informujący który aktualnie
obraz jest wyświetlany z tablicy wcześniej zadeklarowanej. Są to zmienne globalne.

Funkcja z linii 6 do 14 jest odpowiedzialna za podmianę obrazka. Pierwszą rzeczą jest podmiana indenu
obrazka z tablicy – przy czym aby nie wyjść za jej rozmiar sprawdzamy warunek – linia 8.

W linii 11 z wszystkich elementów zawartych na stronie – body, head, title, Br… itp. – wyszukujemy taki
którego parametr ID ma wartość „adBanner”. Znajdując ten element – to znacznik <img> podmieniony
zostaje jego wskaźnik na adres – src – na taki z tablicy stworzonej w linii 3 o odpowiednim nowym indeksie.

W linii 13 ustalony zostaje czas co jaki ma zostać wywołana funkcja rogate – co 3 sekundy.
15