Spis treści

Laboratorium, PHP, Smarty

Ćwiczenie 1: Instalacja

1. Pobierz archiwum z odpowiednią wersją Smarty: http://www.smarty.net/download, bezpośredni link: https://github.com/smarty-php/smarty/archive/v3.1.34.tar.gz albo https://github.com/smarty-php/smarty/archive/v3.1.34.zip

2. Rozpakuj archiwum w swoim domowym katalogu w wybranym podkatalogu w public_html np: ~/public_html/smarty (~ oznacza katalog domowy).

Podkatalog ten będzie dalej nazywany roboczym.

Przy rozpakowywaniu powstanie katalog zawierający Smarty np.: smarty-3.1.34, zwany dalej katalogiem smarty.

Upewnij się, że rozpakowane pliki i katalogi są dostępne dla serwera WWW.

3. Utwórz odpowiednie katalogi wymagane przez Smarty w katalogu roboczym:

cache/
configs/
templates/
templates_c/

Nadaj im odpowiednie prawa dostępu tak, aby serwer WWW mógł:

  1. czytać z configs, templates,
  2. czytać i pisać w templates_c, cache.

4. Przetestuj, czy instalacja działa poprawnie.

Utwórz skrypt test.php, który przetestuje Twoją instalację Smarty:

stest.php
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require('./smarty-3.1.34/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->testInstall();
?>

Uwaga, powyższy skrypt nie generuje poprawnego dokumentu (X)HTML! Co zrobić, żeby generował?

Uwaga, powyższy skrypt zakłada, że nazwą katalogu smarty jest Smarty-3.1.34. Jeżeli nazwa ta jest inna należy odpowiednio zmienić wywołanie require().

Ćwiczenie 2: Model

Dostarczona jest struktura danych (np. pochodząca z odczytu z bazy danych) przechowująca informacje o flocie samochodów:

dane.php
// dane: marka samochodu, kolor, nr rej., przebieg, stan techniczny
$dane = array(
  array('VW Passat','srebrny', 'DW5789', 98000, 'dobry'),
  array('Syrena','żółty', 'WA4389', 60000, 'zły'),
  array('Ford Focus','czarny', 'KR1243', 21000, 'dobry'),
  array('Honda Civic','zielony', 'KR9834', 8000, 'dobry')
);

Napisz program w PHP implementujący model (np. auto.php), który umożliwi wyświetlanie w/w informacji w dwóch postaciach reprezentowanych przez osobne widoki tab.tpl oraz form.tpl, tj.:

  1. użyje powyższych danych,
  2. zdefiniuje zmienną (atrybut) smarty o nazwie samochod przekazującą w/w dane (wszystkie dane!),
  3. w zależności od przekazanego metodą GET parametru o nazwie tab,
    1. jeżeli parametr jest przekazany (tj. …/auto.php?tab) uruchomi szablon tab.tpl,
    2. w przeciwnym wypadku (tj. …/auto.php) szablon form.tpl.

Ćwiczenie 3: Widoki

Zaprogramuj dwa widoki w oparciu o szablony: tab.tpl oraz form.tpl. Oba szablony używają zmiennej (atrybutu) samochod i prezentują te same informacje w inny sposób.

Szablon tab.tpl powinien wyświetlać dane o samochdach w postaci tabeli, tak aby marka samochodu musi być pisana dużymi literami (zdefiniuj to odpowienio w szablonie).

Szablon form.tpl powinien generować formularz zawierający:

  1. listę jednokrotnego wyboru z numerem rejestracyjnym,
  2. przycisk wyślij,
  3. na początku formularza powinna znajdować się aktualna data.

Ćwiczenie 4 (nadobowiązkowe, dla zainteresowanych): Dodatkowe widoki

Zaimplementuj szablon tabcsv.tpl podobny do tab.tpl, ale udostępniający dane w innej formie np. CSV. Szablon będzie użyty gdy parametr tab będzie mieć wartość csv, czyli:

  1. jeżeli parametr jest przekazany (tj. …/auto.php?tab=csv) uruchomi szablon tabcsv.tpl,
  2. jeżeli parametr jest przekazany (tj. …/auto.php?tab) uruchomi szablon tab.tpl,
  3. w przeciwnym wypadku (tj. …/auto.php) szablon form.tpl.

W ten sposób dane będą dostępne zarówno jako dokument HTML jak również w postaci łatwej do automatycznego przetwarzania celem integracji z innymi systemami.