background image

dr inż. Piotr Czapiewski 

Systemy zarządzania treścią 

Laboratorium 8 

 

Laboratorium 8 – Tworzenie bloga w Zend Framework 

Przygotowanie bazy danych 

1.

 

Korzystając z lokalnego MySql utwórz użytkownika oraz bazę danych o nazwie 

nazwisko_zfblog

, np. 

kowalski_zfblog

 

2.

 

Utwórz  trzy  tabele  – 

grupy

uzytkownicy

  oraz 

wpisy

  –  o  strukturze  przedstawionej 

poniżej. 

 

Wszystkie  pola 

id

  powinny  być  automatycznie  inkrementowane  (typ 

integer 

auto_increment

). 

 
Tabele 

grupy

 i 

uzytkownicy

 posłużą do kontroli dostępu do bloga. Pole 

grupa

 w tabeli 

uzytkownicy

 zawierać będzie indeks z tabeli 

grupy

 (np. 1 dla grupy 

Administratorzy

, 2 

dla grupy 

Autorzy

). 

 
Tabela 

wpisy

  przechowywać  będzie  posty  dodawane  do  bloga.  Pole 

autor

  odnosić  się 

będzie  do  indeksu  użytkownika  w  tabeli 

uzytkownicy

.  Pola: 

tytul

tresc

  i 

skrot

 

zawierać będą odpowiednio: tytuł wpisu, właściwą treść oraz wersję skróconą wyświetlany 
na stronie głównej z odnośnikiem 

Więcej…

 

3.

 

Dodaj do bazy dane: 

 

grupy: Administratorzy i Autorzy; 

 

użytkownicy: admin – należący do grupy Administratorzy, user – należący do grupy 
Autorzy; 

 

wpisy: 2-3 przykładowe, krótkie posty. 

Sprawdzenie konfiguracji środowiska PHP 

1.

 

Sprawdź, czy narzędzie Zend Tool jest dostępne z linii poleceń – wydaj komendę: 

zf show version 

Jeśli  wersja  Zend  Framework  nie  zostanie  wyświetlona,  przygotuj  środowisko  zgodnie  z 
instrukcją do ćwiczenia 7. 

background image

dr inż. Piotr Czapiewski 

Systemy zarządzania treścią 

Laboratorium 8 

 

Tworzenie projektu 

1.

 

W linii poleceń przejdź do katalogu 

WebServ/httpd

2.

 

Wydaj polecenie tworzenia nowego projektu: 

zf create project zfblog 

3.

 

Sprawdź działanie nowego projektu – w przeglądarce wejdź na adres: 

http://localhost/zfblog/public/

 

Konfiguracja projektu 

1.

 

Otwórz  w  edytorze  tekstu  plik 

application.ini

  (znajduje  się  w  katalogu 

zfblog/application/configs

).

 

2.

 

Znajdź linię:

 

appnamespace = "Application" 

I zamień na:

 

appnamespace = "Blog" 

Podanej  przestrzeni  nazw  będziemy  używać  jako  przedrostka  nazw  tworzonych  klas. 
Pozwoli to na automatyczne ładowanie definicji klas przez Zend Framework.  
 

3.

 

Skonfiguruj  dostęp  do  bazy  danych  –  na  końcu  sekcji 

[production]

  dodaj  następujące 

linie:

 

resources.db.adapter = "pdo_mysql" 

resources.db.params.host = "localhost" 

resources.db.params.username = "kowalski_zfblog" 

resources.db.params.password = "hasło" 

resources.db.params.dbname = "kowalski_zfblog" 

resources.db.params.charset = "utf8" 

Zmień nazwę użytkownika, hasło oraz nazwę bazy danych na właściwe. 

Tworzenie modeli 

1.

 

Do  dostępu  do  danych  posłużą  klasy  dziedziczące  z  Zend_Db_Table.  Utworzymy  po  jednej 
klasie dla każdej tabeli w bazie danych. 

2.

 

W katalogu 

application/models

 utwórz plik 

Wpisy.php

. W nim umieść definicję klasy 

Blog_Model_Wpisy

<?php 

 

class

 Blog_Model_Wpisy 

extends

 Zend_Db_Table_Abstract 

background image

dr inż. Piotr Czapiewski 

Systemy zarządzania treścią 

Laboratorium 8 

 

    

protected

 

$

_name

 = 

'wpisy'

Pole 

$_name

 zawiera nazwę tabeli w bazie danych, do której dostęp będziemy uzyskiwać za 

pomocą tworzonej klasy. 
 

3.

 

Uwaga! Nazwy tworzonych klas są istotne – także wielkość liter oraz użyte podkreślenia. 

4.

 

W ten sam sposób utwórz modele dla tabel: 

grupy

 i 

uzytkownicy

Wyświetlanie postów na stronie głównej 

1.

 

Na  stronie  głównej  naszego  bloga  umieścimy  listę  wszystkich  wpisów,  wyświetlając  ich 
tytuły oraz skróty. 
 

2.

 

W  kontrolerze 

IndexController

,  w  akcji 

indexAction

,  umieścimy  kod  pobierający  z 

modelu  wszystkie  wpisy.  Do  pobrania  wszystkich  rekordów  z  bazy  poprzez  model  służy 
metoda 

fetchAll()

    

public

 

function

 indexAction() { 

        

$mdl

 = 

new

 Blog_Model_Wpisy(); 

        

$wpisy

 = 

$mdl

->fetchAll(); 

        

$this

->

view

->

dane

=

$wpisy

    } 

3.

 

Znaczenie powyższego kodu jest następujące: 

a.

 

Tworzymy  obiekt  klasy 

Blog_Model_Wpisy

  –  model  ten  pośredniczy  w  dostępie 

do tabeli wpisy. 

b.

 

Pobieramy wszystkie rekordy z tabeli. 

c.

 

Pobrane rekordy przekazujemy do widoku. 
 

4.

 

Przekazane  do  widoku  rekordy  musimy  jeszcze  wyświetlić.  Przejdź  do  pliku  z  widokiem, 

index.phtml

 

5.

 

Przekazany zbiór rekordów można traktować jak tablicę obiektów. Można po niej iterować 
za pomocą pętli 

foreach

. Każdy element tablicy zawiera pola odpowiadające kolumnom w 

tabeli bazy danych. Przykład użycia: 

<?php 

foreach

(

$this

->

dane

 

as

 

$wpis

) { 

    

echo

 

$wpis

->

tytul

?> 

6.

 

Kompletny kod widoku wyświetlającego listę wpisów: 

<h1>

ZF Blog

</h1>

 

 

background image

dr inż. Piotr Czapiewski 

Systemy zarządzania treścią 

Laboratorium 8 

 

<?php 

 

foreach

(

$this

->

dane

 

as

 

$wpis

) { 

    

echo

 

'<div class="wpis">'

    

echo

 

'<h2>'

 . 

$wpis

->

tytul

 . 

'</h2>'

    

echo

 

'<p>'

 . 

$wpis

->

skrot

 . 

'</p>'

    

echo

 

'</div>'

?> 

Wyświetlanie całej treści wpisu 

1.

 

Dodamy  akcję 

pokaz

  powodującą  wyświetlenie  pełnej  treści  wybranego  wpisu.  Akcja 

przyjmować  będzie  jeden  parametr  przekazany  poprzez  URL  –  id  wpisu,  który  należy 
wyświetlić. 

2.

 

Dodawanie nowej akcji – z linii poleceń wydaj komendę: 

zf create action pokaz Index 

Spowoduje  to  dodanie  nowej  akcji 

pokazAction

  w  kontrolerze 

IndexController

,  a 

także utworzenie odpowiedniego pliku widoku (

pokaz.phtml

). 

 

3.

 

W kodzie akcji wykonamy kolejno następujące czynności: 

a.

 

Pobranie id wpisu z parametrów żądania – metoda 

$this->getRequest()->getParam()

b.

 

Stworzenie instancji modelu 

Blog_Model_Wpisy

c.

 

Pobranie wpisu o podanym id – metoda 

find()

d.

 

Przekazanie pobranego wpisu do widoku. 

 

Kompletny kod akcji 

pokaz

    

public

 

function

 pokazAction() { 

        

$id

 = 

$this

->getRequest()->getParam(

'id'

); 

         

        

$mdl

 = 

new

 Blog_Model_Wpisy(); 

        

$wpis

 = 

$mdl

->find(

$id

)->current(); 

        

$this

->

view

->

wpis

 = 

$wpis

    } 

Metoda 

find

  przyjmuje  jako  argument  wartość  klucza  głównego  w  szukanym  rekordzie 

(lub  tablicę  z  listą  kluczy  głównych  wielu  szukanych  rekordów).  Zwrócić  może  kilka 
rekordów  –  jeśli  mamy  pewność,  że  zwróci  dokładnie  jeden,  pobieramy  go  metodą 

current()

 

4.

 

Uzupełnimy  kod  widoku 

index.phtml

,  tak  by  pod  tytułem  i  skrótem  wpisu  pojawiał  się 

link 

Więcej…

 prowadzący do akcji 

pokaz

 
W pliku 

index.phtml

, wewnątrz pętli wyświetlającej wpisy, dodaj następujący kod: 

background image

dr inż. Piotr Czapiewski 

Systemy zarządzania treścią 

Laboratorium 8 

 

$url

 = 

$this

->url(

array

(

'controller'

 => 

'index'

'action'

 => 

'pokaz'

)) 

'/id/'

 . 

$wpis

->

id

 

echo

 

'<p><a href="'

 . 

$url

 . 

'">Wi

ę

cej...</a></p>'

;   

Powyższy kod spowoduje wyświetlenie linka postaci: 

http://localhost/zfblog/public/index/pokaz/id/1 

Zadanie 

1.

 

Dodaj  w  widoku 

pokaz.phtml

  kod  wyświetlający  szczegóły  wpisu  (tytuł,  data  dodania, 

pełna treść). 

Layout strony 

1.

 

Włączymy  obsługę 

Zend  Layout

  –  mechanizmu  pozwalającego  na  stworzenie  szablonu, 

wewnątrz którego wyświetlane będą wszystkie widoki. 

2.

 

Z linii poleceń wydaj komendę: 

zf enable layout 

Spowoduje to: 

a.

 

dodanie w pliku 

index.php

 kodu inicjalizującego 

Zend_Layout

b.

 

dodanie  w  pliku  konfiguracyjnym 

application.ini

  wpisu  wskazującego  na 

katalog szablonów, 

c.

 

utworzenie głównego szablonu o nazwie 

layout.phtml

3.

 

Otwórz  w  edytorze  plik 

application/layouts/scripts/layout.phtml

,  przyjrzyj 

się jego zawartości. Sprawdź działanie aplikacji. 

4.

 

Zmień kod szablonu na następujący: 

<!DOCTYPE

 

HTML

 

PUBLIC

 

"-//W3C//DTD

 

HTML

 

4.01

 

Transitional//EN">

 

<html>

 

    

<head>

 

        

<title>

ZF Blog

</title>

 

        

<meta

 

http-equiv=

"Content-Type"

 

              

content=

"text/html; charset=UTF-8"

>

 

        

<link

 

rel=

"stylesheet"

 

type=

"text/css"

 

              href=

"

<?php 

echo

 

$this

->baseUrl(

'main.css'

); ?>

"

>

 

    

</head>

 

    

<body>

 

        

<div

 

id=

"page"

>

 

            

<div

 

id=

"menu"

>

 

                

<a

 

href=

"

<?php 

echo

 

$this

->baseUrl(); ?>

"

                   

Strona główna

</a>

 | 

                

<a

 

href=

""

>

Dodaj wpis

</a>

 

                

<a

 

href=

""

>

Zaloguj

</a>

 

            

</div>

 

background image

dr inż. Piotr Czapiewski 

Systemy zarządzania treścią 

Laboratorium 8 

 

            

<div

 

id=

"content"

>

 

                <?php 

echo

 

$this

->layout()->

content

?> 

            

</div>

 

        

</div>

 

    

</body>

 

</html>

 

Zadanie 

1.

 

Stwórz plik 

main.css

, umieść go w katalogu 

public

. Przykładowa zawartość pliku: 

body

 { 

    

background-color

: #ffffd0; 

 

#page

 { 

    

background-color

: white; 

    

margin

: 0 auto; 

    

width

: 640px; 

 

#menu

 { 

    

background-color

: blue; 

    

text-align

: center; 

 

#menu

 

a

 { 

    

color

: white; 

    

font-family

: sans-serif; 

 

.wpis

 { 

    

border

: thin dashed gray; 

2.

 

Dodaj  reguły  określające  formatowanie  tytułów  postów  i  daty  dodania.  Zmodyfikuj  arkusz 
stylów tak, by twoja strona odróżniała się od innych.