Technlgie prgramwania systemów internetwych Labratrium 5 Labratrium 5 Zend Framewrk: lista zadań Twrzenie prjektu aplikacja: prsta lista zadań Celem ćwiczenia jest przygtwanie prstej aplikacji wyświetlającej listę zadań. Aplikacja ma pzwalać na znaczenie zadania jak wyknane. Efekt kńcwy przedstawiny jest na pniższym zrzucie ekranu. W Netbeans stwórz nwy prjekt typu: PHP Applicatin, z bsługą Zend Framewrk. Sknfiguruj uruchamianie, sprawdź działanie. Skpiuj d katalgu public pliki dłączne d ćwiczenia: style.css, tick.png, tick-szary.png. Strna 1 z 6
Technlgie prgramwania systemów internetwych Labratrium 5 Twrzenie warstwy mdelu Załżenia Za mdel w naszej aplikacji psłużą dwie klasy: Applicatin_Mdel_Task będzie reprezentwać pjedyncze zadanie na liście; Applicatin_Mdel_TaskManager będzie służyć d peracji na zadaniach (pbranie, usuwanie, znaczenie jak wyknane, itd.). Lista zadań przechwywana będzie w sesji. Klasa Applicatin_Mdel_Task Stwórz nwą klasę nazwie Applicatin_Mdel_Task, zapisz ją w katalgu mdels w pliku nazwie Task.php. Klasa Applicatin_Mdel_Task nie będzie zawierać żadnej lgiki, tylk definicję kilku pól raz knstruktr: <?php class Applicatin_Mdel_Task { public $id; public $descriptin; public $date; public $dne; public functin cnstruct($id, $desc) { $this->id = $id; $this->descriptin = $desc; $this->dne = false; $this->date = date('y.m.d H:i:s'); Strna 2 z 6
Technlgie prgramwania systemów internetwych Labratrium 5 Klasa Applicatin_Mdel_TaskManager Stwórz nwą klasę nazwie Applicatin_Mdel_TaskManager, zapisz ją w katalgu mdels w pliku nazwie TaskManager.php. <?php class Applicatin_Mdel_TaskManager { private $tasks; public functin cnstruct() { $sessin = new Zend_Sessin_Namespace('tdapp'); if(!isset($sessin->tasks)) $sessin->tasks = $this->inittasks(); $this->tasks = & $sessin->tasks; private functin inittasks() { $id = 0; $tasks = array(); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Zjeść śniadanie'); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Wyrzucić śmieci'); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Psprzątać mieszkanie'); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Kupić chleb i mlek'); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Obejrzeć Klan'); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Wygrać w ttltka'); $tasks[$id] = new Applicatin_Mdel_Task( $id, 'Zstać prezydentem'); return $tasks; public functin gettasks() { return $this->tasks; Strna 3 z 6
Technlgie prgramwania systemów internetwych Labratrium 5 Przeanalizuj klejne elementy klasy Applicatin_Mdel_TaskManager. Metda inittasks() służy d przygtwania przykładwych danych; zwraca na tablicę wypełniną zadaniami (biektami Applicatin_Mdel_Task). Knstruktr ma na celu zainicjwanie zmiennej klaswej $tasks: jeśli w sesji zapisan już tablicę zadań należy ją dczytać lub pwiązać ze zmienną $tasks przez referencję; jeśli w sesji nie ma infrmacji zadaniach należy stwrzyć tablicę zadań i zapisać w sesji. Zatem w knstruktrze sprawdzamy, czy w sesji istnieje zmienna tasks. Jeśli nie inicjujemy ją przykładwymi zadaniami. D zmiennej klaswej $tasks przez referencję przypisujemy tablicę z sesji. Metda gettasks() będzie służyła d pbierania listy wszystkich zadań. Pbranie i wyświetlenie wszystkich zadań W kntrlerze IndexCntrller, w akcji index: stwórz nwą instancję mdelu (Applicatin_Mdel_TaskManager), pbierz z nieg listę zadań (gettasks), przekaż d widku. $mdel = new Applicatin_Mdel_TaskManager(); $tasks = $mdel->gettasks(); $this->view->tasks = $tasks; Przygtuj widk wyświetlający listę zadań istniejącą zawartść pliku /views/scripts/index/index.phtml zastąp następującą: <?php freach ($this->tasks as $task) :?> <div class="task"> <span class="date"> <?php ech $task->date;?> </span> <span> <?php ech $task->descriptin;?> </span> <?php endfreach;?> Strna 4 z 6
Technlgie prgramwania systemów internetwych Labratrium 5 Layut strny Włączymy bsługę Zend Layut mechanizmu pzwalająceg na stwrzenie szablnu, wewnątrz któreg wyświetlane będą wszystkie widki. Wydaj następującą kmendę Zend Tl (z linii pleceń lub z menu Zend w Netbeans): zf enable layut Spwduje t: ddanie w pliku knfiguracyjnym applicatin.ini wpisu wskazująceg na katalg szablnów, utwrzenie główneg szablnu nazwie layut.phtml. Otwórz w edytrze plik applicatin/layuts/scripts/layut.phtml, przyjrzyj się jeg zawartści. Sprawdź działanie aplikacji. Zmień kd szablnu na następujący: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitinal//EN" "http://www.w3.rg/tr/html4/lse.dtd"> <html> <head> <title>tdapp</title> <meta http-equiv="cntent-type" cntent="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="<?php ech $this->baseurl('style.css');?>"> </head> <bdy> <div id="header"> <h1>lista zadań</h1> <div id="main"> <?php ech $this->layut()->cntent;?> </bdy> </html> Zwróć uwagę na linijkę ładującą arkusz CSS użyta zstała tutaj funkcja pmcnicza baseurl: <?php ech $this->baseurl('style.css');?> Fukcja ta służy d generwania adresów URL względnych w stsunku d główneg katalgu prjektu. Na przykład, jeśli nasz prjekt dstępny jest pd adresem http://lcalhst/zf_lab5/public, funkcja ta będzie zwracała: $this->baseurl() -> http://lcalhst/zf_lab5/public $this->baseurl('style.css') -> http://lcalhst/zf_lab5/public/style.css Strna 5 z 6
Technlgie prgramwania systemów internetwych Labratrium 5 Funkcję pmcniczą baseurl() wart wykrzystać wszędzie, gdzie ptrzebne jest twrzenie adresów URL, np.: w dnśnikach d zawartści statycznej (ładwanie skryptów JavaScript, brazków, arkuszy stylów CSS), Zadanie w frmularzach (atrybut actin elementu frm), w linkach d akcji. Ddaj bsługę zaznaczania zadań jak ukńczne: bk każdeg elementu na liście zadań pwinna być wyświetlana iknka: dla zadania aktywneg ikna tickszary.png, dla ukńczneg tick.png; kliknięcie na iknie aktywneg zadania pwduje znaczenie g jak ukńczne; przy wyświetlaniu zadań ukńcznych element div zawierający zadanie pwinien mieć ddaną klasę dne, np.: <div class="task dne"> <span class="date">2012.04.16 10:47:13</span> <span>psprzątać mieszkanie</span>... Aby wyknać zadanie, knieczne będzie: ddanie w klasie Applicatin_Mdel_TaskManager metdy znaczającej wskazane zadanie jak wyknane, np. setdne($id); ddanie w kntrlerze nwej akcji, która: jak parametr przyjmuje id zadania d znaczenia jak wyknane; wywłuje dpwiednią metdę z mdelu, aby faktycznie znaczyć zadanie jak wyknane; przekierwuje na strnę główną z listą zadań, na przykład za pmcą następująceg plecenia: $this->_redirect('index'); Strna 6 z 6