Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][Smarty] Produkt w sklepie internetowym, Powiązanie z wieloma klasami
jasinskiwojciech
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 18.03.2009

Ostrzeżenie: (0%)
-----


Witam,
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
  1. <?php
  2. $produkt = new Produkt(1);
  3. $produkt->PobierzZdjecia();
  4.  
  5. $smarty->assign("produkt", $produkt);
  6. ?>


Produkt.class.php
  1. <?php
  2. class Produkt
  3. {
  4.    public
  5.    $id = 0,
  6.    $nazwa = "",
  7.    $cena = 0,
  8.    ...
  9.    $idDodajacego = 0, // id uzytkownika, który dodal produkt - pobrany z bazy
  10.    $dodajacy = null, // obiekt Uzytkownik
  11.    $zdjecia = null; // obiekt Zdjecia
  12.    
  13.    function __construct($id)
  14.    {
  15.        // pobieranie z bazy produktu i ustawianie wartości
  16.        // np. $this->id = $r['id']; itp.
  17.        
  18.        // po pobraniu idDodającego z bazy tworzony jest obiekt Uzytkownik
  19.        $this->Dodajacy = new Uzytkownik($this->idDodajacego); // konstruktor Uzytkownika działa na tej samej zasadzie co w Produkt
  20.    }
  21.    
  22.    public function PobierzZdjecia()
  23.    {
  24.        $this->zdjecia = new Zdjecia($this->id); // pobieranie wszystkich zdjęć należących do tego produktu
  25.    }
  26.  
  27. }
  28. ?>


Zdjecia.class.php
  1. <?php
  2. class Zdjecia
  3. {
  4.    public lista = array();
  5.    
  6.    function __construct($id)
  7.    {
  8.        // pobieranie wszystkich zdjec do produktu o podanym ID i dodawanie zdjec do $this->lista
  9.        $q = mysql_query(....);
  10.        while ($r=mysql_fetch_assoc($q))
  11.        {
  12.            $this->lista[] = new Zdjecie($r);
  13.        }
  14.    }
  15. }
  16. ?>


Zdjecie.class.php
  1. <?php
  2. class Zdjecie
  3. {
  4.    public
  5.    $id,
  6.    $nazwaPliku,
  7.    .....
  8.    $idDodajacego,
  9.    $dodajacy;
  10.    
  11.    function __construct($dane)
  12.    {
  13.        // ustawianie wartosci zmiennych $id, $nazwapliku itp na podstawie tablicy $dane
  14.        // np. $this->id = $dane['id']; itp.
  15.        
  16.        // tak samo jak przy produkcie mamy idUzytkownika, który dodał dane zdjęcie i pobieramy jego dane
  17.        $this->dodajacy = new Uzytkownik($this->idDodajacego); // konstruktor Uzytkownika działa na tej samej zasadzie co w Produkt
  18.    }
  19. }
  20. ?>


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
                      ...


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:
  1. Wszystkie pola klas (id, nazwa ...) są publiczne.
  2. 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?
  3. Czy rozwiązanie jakie przedstawiłem powyżej jest w ogóle warte uwagi? Proszę o komentarze.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 21:15