Chcę wyświetlić w sklepie informacje o produkcie. Mam moduł, który pobiera informacje o danym produkcie i przekazuje obiekt Produkt do Smarty.
W skrócie wygląda to tak:
pokazProdukt.php
<?php $produkt = new Produkt(1); $produkt->PobierzZdjecia(); $smarty->assign("produkt", $produkt); ?>
Produkt.class.php
<?php class Produkt { public $id = 0, $nazwa = "", $cena = 0, ... $idDodajacego = 0, // id uzytkownika, który dodal produkt - pobrany z bazy $dodajacy = null, // obiekt Uzytkownik $zdjecia = null; // obiekt Zdjecia function __construct($id) { // pobieranie z bazy produktu i ustawianie wartości // np. $this->id = $r['id']; itp. // po pobraniu idDodającego z bazy tworzony jest obiekt Uzytkownik $this->Dodajacy = new Uzytkownik($this->idDodajacego); // konstruktor Uzytkownika działa na tej samej zasadzie co w Produkt } public function PobierzZdjecia() { $this->zdjecia = new Zdjecia($this->id); // pobieranie wszystkich zdjęć należących do tego produktu } } ?>
Zdjecia.class.php
<?php class Zdjecia { function __construct($id) { // pobieranie wszystkich zdjec do produktu o podanym ID i dodawanie zdjec do $this->lista { $this->lista[] = new Zdjecie($r); } } } ?>
Zdjecie.class.php
<?php class Zdjecie { public $id, $nazwaPliku, ..... $idDodajacego, $dodajacy; function __construct($dane) { // ustawianie wartosci zmiennych $id, $nazwapliku itp na podstawie tablicy $dane // np. $this->id = $dane['id']; itp. // tak samo jak przy produkcie mamy idUzytkownika, który dodał dane zdjęcie i pobieramy jego dane $this->dodajacy = new Uzytkownik($this->idDodajacego); // konstruktor Uzytkownika działa na tej samej zasadzie co w Produkt } } ?>
Po przekazaniu obiektu Produkt do Smarty z poziomu szablonu mam dostęp do wszystkich informacji z takiego oto drzewa:
Kod
Produkt
+ id
+ nazwa
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
+ zdjecia
Zdjecia
+ lista
1 - Zdjecie
+ id
+ nazwaPliku
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
2 - Zdjecie
+ id
+ nazwaPliku
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
3 - Zdjecie
+ id
+ nazwaPliku
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
+ id
+ nazwa
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
+ zdjecia
Zdjecia
+ lista
1 - Zdjecie
+ id
+ nazwaPliku
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
2 - Zdjecie
+ id
+ nazwaPliku
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
3 - Zdjecie
+ id
+ nazwaPliku
+ ...
+ dodajacy
Uzytkownik
+ id
+ login
...
Stworzenie takiej "hierarchii" może mieć sens jeśli chcemy wyświetlić wszystkie możliwe informacje np podpisując zdjęcia danymi użytkowników, którzy je dodali itp.
Mam jednak parę wątpliwości:
- Wszystkie pola klas (id, nazwa ...) są publiczne.
- Przekazujemy do Smarty obiekt (a w zasadzie cały zbiór obiektów), które przecież zawierają takie metody jak: Dodaj, Usun, Edytuj, których nie wymieniłem wcześniej, żeby nie zaciemniać. Czy przekazanie tych metod, które będą publiczne, jest bezpieczne?
- Czy rozwiązanie jakie przedstawiłem powyżej jest w ogóle warte uwagi? Proszę o komentarze.