Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Oddzielenie logiki od prezentacji
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam
Pewnie ten temat juz byl ale chcialbym aby ktos mi pokazal jak to mozna zrobic na przykladzie ktory podam ponizej co pomoze mi w latwym zrozumieniu. Najlepiej jakby ktos pomogl mi to zademonstrowac na Smarty.

Oto kod :
  1. <?
  2.  
  3. class Mailbox
  4.    {
  5.        protected $_connection = null;
  6.        
  7.        public function connect($server, $user, $pass, $port = 993, $protocol = 'imap')
  8.            {
  9.                if(!($this->_connection = imap_open('{imap.'.$server.':'.$port.'/'.$protocol.'/ssl}INBOX', $user, $pass)))
  10.                    throw new Exception ('Connection failure');
  11.            }
  12.            
  13.        public function inbox()
  14.            {
  15.                return $this->_sort = imap_sort($this->_connection, SORTARRIVAL, false);
  16.            }
  17.        
  18.        public function show_headers()
  19.            {
  20.                echo "<h1>Headers in INBOX</h1>\n";
  21.                $this->_headers = imap_headers($this->_connection);
  22.                
  23.                if ($this->_headers == false)
  24.                    {
  25.                    echo "Call failed<br />\n";
  26.                    }
  27.                else
  28.                    {
  29.                    foreach ($this->_headers as $val)
  30.                        {
  31.                        echo $val . "<br />\n";
  32.                        }
  33.                    }
  34.            }
  35.    }
  36.  
  37.    
  38. $mailbox = new Mailbox;
  39. $mailbox->connect('gmail.com','jakismail@gmail.com','jakieshaslo','993','imap');
  40. $tab = $mailbox->inbox();
  41. foreach($tab as $wart)
  42.    echo $wart.'<br />';
  43.  
  44.  
  45. $mailbox->show_headers();    
  46. ?>


Chodzi o to zeby klasa nie zawierala w sobie logiki prezentacji.....w jaki sposob mozna to oddzielic ?
Pilsener
Zacznij od tego, że klasa ma zwracać zmienne/tablice elementów. Wysyłanie czegokolwiek (echowanie) do przeglądarki jest niedupuszczalne - wysyła się Całą stronę. Gdy już masz tablicę elementów to poczytaj jakiś tutorial o smarty (jest tego pełno, a przecież nie skopiuję i nie wkleję tutaj) i połącz tą tablicę z kodem HTML.
Sky_walker
W skrócie: Rozchodzi się o to, żeby w klasach / funkcjach nie było komendy echo / print. smile.gif
Wolfie
To ze nie moze byc komendy echo doskonale rozumiem i to bylo dla mnie jasne.
Czyli rozumiem ze np jakas funkcja zwraca mi tablice elementow a ja pozniej dopiero wyswietlam to poza klasa. Tak jak jest to zrobione w moim przykladzie z funkcja inbox();
Czyli mam zrobic tak samo dla funkcji show_headers() ?

W pewnym stopniu bedzie to oddzielenie prezentacji od logiki aplikacji.....chodzi mi bardziej o model MVC tak zebym logike prezentacji i logike aplikacji mial w osobnych plikach, no i najlepiej jakbym uzyl do tego Smarty snitch.gif
Pilsener
Albo czegoś swojego, może być np. coś prostego, tak jak tutaj:
http://www.programuj.com/artykuly/www/template.php?comm_a=dk - używam tego do prostych projektów i w zupełności mi wystarcza.

Cytat
logike prezentacji i logike aplikacji mial w osobnych plikach
- upraszczając to cały system to jeden plik (najczęściej index.php), do którego tylko dołączasz odpowiednie fragmenty kodu - jak to zostanie podzielone to moim zdaniem rzecz drugorzędna, bo i tak piszesz kod w oparciu o mechanizm:

1. Parsowanie informacji wejściowych
2. Generowanie odpowiednich zmiennych
3. Łączenie zmiennych z kodem HTML

- najważniejsze, aby kod HTML był oddzielony od PHP, templatki html'owe możesz trzymać w plikach lub w bazie.
Wolfie
Cytat
- upraszczając to cały system to jeden plik (najczęściej index.php), do którego tylko dołączasz odpowiednie fragmenty kodu - jak to zostanie podzielone to moim zdaniem rzecz drugorzędna, bo i tak piszesz kod w oparciu o mechanizm:

1. Parsowanie informacji wejściowych
2. Generowanie odpowiednich zmiennych
3. Łączenie zmiennych z kodem HTML


Czyli to jest uproszczony wzorzec MVC ? przy czym index.php to sterownik ?
mrgeek
MVC to trochę bardziej skomplikowane zagadnienie. Jeśli chcesz pisać używając wzorca MVC, najlepiej sięgnąć po gotowy framework (np TinyMVC).
Zwykle w tutorialach do nich omówiona jest idea.

Jeśli chcesz odpalić Smarty, polecam prosty tutek http://programujzgeekiem.pl/pierwszy-tutor...poczatkujacych/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.