Lab 5

Transkrypt

Lab 5
Technologie programowania systemów internetowych
Laboratorium 5
Laboratorium 5 – Zend Framework: lista zadań
Tworzenie projektu – aplikacja: prosta lista zadań
Celem ćwiczenia jest przygotowanie prostej aplikacji wyświetlającej listę zadań. Aplikacja ma
pozwalać na oznaczenie zadania jako wykonane. Efekt końcowy przedstawiony jest na poniższym
zrzucie ekranu.

W Netbeans stwórz nowy projekt typu: PHP Application, z obsługą Zend Framework.
Skonfiguruj uruchamianie, sprawdź działanie.

Skopiuj do katalogu public pliki dołączone do ćwiczenia: style.css, tick.png,
tick-szary.png.
Strona 1 z 6
Technologie programowania systemów internetowych
Laboratorium 5
Tworzenie warstwy modelu
Założenia

Za model w naszej aplikacji posłużą dwie klasy:

o
Application_Model_Task będzie reprezentować pojedyncze zadanie na liście;
o
Application_Model_TaskManager będzie służyć do operacji na zadaniach
(pobranie, usuwanie, oznaczenie jako wykonane, itd.).
Lista zadań przechowywana będzie w sesji.
Klasa Application_Model_Task

Stwórz nową klasę o nazwie Application_Model_Task, zapisz ją w katalogu models
w pliku o nazwie Task.php.

Klasa Application_Model_Task nie będzie zawierać żadnej logiki, tylko definicję kilku
pól oraz konstruktor:
<?php
class Application_Model_Task {
public
public
public
public
$id;
$description;
$date;
$done;
public function __construct($id, $desc) {
$this->id = $id;
$this->description = $desc;
$this->done = false;
$this->date = date('Y.m.d H:i:s');
}
}
Strona 2 z 6
Technologie programowania systemów internetowych
Laboratorium 5
Klasa Application_Model_TaskManager

Stwórz nową klasę o nazwie Application_Model_TaskManager, zapisz ją w katalogu
models w pliku o nazwie TaskManager.php.
<?php
class Application_Model_TaskManager {
private $tasks;
public function __construct() {
$session = new Zend_Session_Namespace('todoapp');
if(!isset($session->tasks))
$session->tasks = $this->initTasks();
$this->tasks = & $session->tasks;
}
private function initTasks() {
$id = 0;
$tasks = array();
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Zjeść śniadanie');
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Wyrzucić śmieci');
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Posprzątać mieszkanie');
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Kupić chleb i mleko');
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Obejrzeć Klan');
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Wygrać w totolotka');
$id++;
$tasks[$id] = new Application_Model_Task(
$id, 'Zostać prezydentem');
return $tasks;
}
public function getTasks() {
return $this->tasks;
}
}
Strona 3 z 6
Technologie programowania systemów internetowych
Laboratorium 5
Przeanalizuj kolejne elementy klasy Application_Model_TaskManager.

Metoda initTasks() służy do przygotowania przykładowych danych; zwraca ona tablicę
wypełnioną zadaniami (obiektami Application_Model_Task).

Konstruktor ma na celu zainicjowanie zmiennej klasowej $tasks:
o
jeśli w sesji zapisano już tablicę zadań – należy ją odczytać lub powiązać ze zmienną
$tasks przez referencję;
o
jeśli w sesji nie ma informacji o zadaniach – należy stworzyć tablicę zadań i zapisać
w sesji.
Zatem w konstruktorze sprawdzamy, czy w sesji istnieje zmienna tasks. Jeśli nie –
inicjujemy ją przykładowymi zadaniami. Do zmiennej klasowej $tasks przez referencję
przypisujemy tablicę z sesji.

Metoda getTasks() będzie służyła do pobierania listy wszystkich zadań.
Pobranie i wyświetlenie wszystkich zadań

W kontrolerze IndexController, w akcji index:
o
stwórz nową instancję modelu (Application_Model_TaskManager),
o
pobierz z niego listę zadań (getTasks),
o
przekaż do widoku.
$model = new Application_Model_TaskManager();
$tasks = $model->getTasks();
$this->view->tasks = $tasks;

Przygotuj widok wyświetlający listę zadań – istniejącą
/views/scripts/index/index.phtml zastąp następującą:
zawartość
pliku
<?php foreach ($this->tasks as $task) : ?>
<div class="task">
<span class="date">
<?php echo $task->date; ?>
</span>
<span>
<?php echo $task->description; ?>
</span>
</div>
<?php endforeach; ?>
Strona 4 z 6
Technologie programowania systemów internetowych
Laboratorium 5
Layout strony

Włączymy obsługę Zend Layout – mechanizmu pozwalającego na stworzenie szablonu,
wewnątrz którego wyświetlane będą wszystkie widoki.

Wydaj następującą komendę Zend Tool (z linii poleceń lub z menu Zend w Netbeans):
zf enable layout
Spowoduje to:
o
dodanie w pliku konfiguracyjnym application.ini wpisu wskazującego na katalog
szablonów,
o
utworzenie głównego szablonu o nazwie layout.phtml.

Otwórz w edytorze plik application/layouts/scripts/layout.phtml, przyjrzyj
się jego zawartości. Sprawdź działanie aplikacji.

Zmień kod szablonu na następujący:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ToDoApp</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css"
href="<?php echo $this->baseUrl('style.css');?>">
</head>
<body>
<div id="header">
<h1>Lista zadań</h1>
</div>
<div id="main">
<?php echo $this->layout()->content; ?>
</div>
</body>
</html>
Zwróć uwagę na linijkę ładującą arkusz CSS – użyta została tutaj funkcja pomocnicza baseUrl:
<?php echo $this->baseUrl('style.css');?>
Fukcja ta służy do generowania adresów URL względnych w stosunku do głównego katalogu
projektu.
Na
przykład,
jeśli
nasz
projekt
dostępny
jest
pod
adresem
http://localhost/zf_lab5/public, funkcja ta będzie zwracała:
o $this->baseUrl() -> http://localhost/zf_lab5/public
o
$this->baseUrl('style.css')
http://localhost/zf_lab5/public/style.css
->
Strona 5 z 6
Technologie programowania systemów internetowych
Laboratorium 5
Funkcję pomocniczą baseUrl() warto wykorzystać wszędzie, gdzie potrzebne jest tworzenie
adresów URL, np.:
o w odnośnikach do zawartości statycznej (ładowanie skryptów JavaScript, obrazków,
arkuszy stylów CSS),
o
w formularzach (atrybut action elementu form),
o
w linkach do akcji.
Zadanie
Dodaj obsługę zaznaczania zadań jako ukończone:

obok każdego elementu na liście zadań powinna być wyświetlana ikonka: dla zadania
aktywnego ikona tickSzary.png, dla ukończonego tick.png;

kliknięcie na ikonie aktywnego zadania powoduje oznaczenie go jako ukończone;

przy wyświetlaniu zadań ukończonych element div zawierający zadanie powinien mieć
dodaną klasę done, np.:
<div class="task done">
<span class="date">2012.04.16 10:47:13</span>
<span>Posprzątać mieszkanie</span>
...
</div>
Aby wykonać zadanie, konieczne będzie:
 dodanie w klasie Application_Model_TaskManager metody oznaczającej wskazane
zadanie jako wykonane, np. setDone($id);

dodanie w kontrolerze nowej akcji, która:
o
jako parametr przyjmuje id zadania do oznaczenia jako wykonane;
o
wywołuje odpowiednią metodę z modelu, aby faktycznie oznaczyć zadanie jako
wykonane;
o
przekierowuje na stronę główną z listą zadań, na przykład za pomocą następującego
polecenia:
$this->_redirect('index');
Strona 6 z 6

Podobne dokumenty