Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/smarty]Mój pseudo-Framework, jak wyglądają akcje? czym jest widok? jak działa framework?
smajster
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2006

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


Jest to moj już n-ty temat z serii przerabiam swoj sklep na OOP. Ale cuż, ktoś musi zapełniać forum bezsensownymi wiadomościami smile.gif
Jestem w trakcie uczenia się o frameworkach i mvc. Chce obie idee wykorzystać w przetworzeniu swojego sklepu, jednak jak można się domyślić mam problemy ze zrozumieniem i wprowadzeniem w życie tych idei(dopiero zaczynam przygodę z klasami)
Puki co napisałem takie pliki, jak sami pewno zauważycie nie mają puki co za wiele wspólnego z frameworkiem oraz mvc, ale służa mi za punkt wyjścia do nauczenia się jak takie coś się robi. Kodu jeszcze nie testowałem więc posiada pewno sporo błędów składniowych, jednak proszę nie zwracać na nie specjalnej uwagi, tylko ocenić to od strony merytorycznej. Za wszelkie konstruktywne uwagi związane z wykorzystaniem szablonów, programowaniem OOP, frameworkami i mvc będe bardzo wdzięczny. Oto pliki:
index.php:
  1. <?php
  2. $request = new request();
  3. $controll= new controller($request->page(),$request->action())
  4. $controll->sql();
  5. $controll->setPage();
  6. ?>

moje klasy:
  1. <?php
  2.  ////////////////////////////////
  3.  ///===== KLASA CONTROLLER
  4.  //
  5.  //
  6. class controller
  7. {
  8. private $page;
  9. private $action;
  10.  
  11. public function __construct($page, $action)
  12. {
  13.  
  14. $this->page = $page;
  15. $this->action = $action;
  16. }
  17. public function setPage()
  18. {
  19. switch($this->page)
  20. {
  21. case 'show_group':
  22. include "show_group.php";
  23. break;
  24. case 'show_product':
  25. include "show_product.php";
  26. break;
  27. case 'szukaj':
  28. include "search.php";
  29. break;
  30. case 'aktualnosci':
  31. include "aktualnosciS.php";
  32. break;
  33. case 'rejestracja':
  34. include "rejestracja.php";
  35. break;
  36. case 'o_firmie':
  37. include "o_firmie.php";
  38. break;
  39. case 'sklepy_partnerskie':
  40. include "sklepy_partnerskie.php";
  41. break;
  42. case 'regulamin':
  43. include "regulamin.php";
  44. break;
  45. case 'pomoc':
  46. include "pomoc.php";
  47. break;
  48. case 'linki':
  49. include "linki.php";
  50. break;
  51. case 'kontakt':
  52. include "kontakt.php";
  53. break;
  54. case 'sklep':
  55. include "menu.php"; 
  56. break;
  57. case 'dane':
  58. include "dane.php";
  59. break;
  60. case 'koszyk':
  61. include "koszyk.php";
  62. break;
  63. default 'promocje':
  64. include "promocje.php";
  65. break;
  66. }
  67.  
  68. }
  69. public function sql()
  70. {
  71. $con_kat = mysql_connect(_HOST, _login, _passwd);
  72. }
  73.  
  74. }
  75.  
  76. ?>

  1. <?php
  2.  ////////////////////////////////
  3.  ///===== KLASA REQUEST
  4.  //
  5.  //
  6. class request
  7. {
  8. private $request = array_merge($GET , $POST);
  9.  
  10.  
  11. public function action
  12. {
  13. return $this->request["action"];
  14. }
  15. public function page
  16. {
  17. return $this->request["page"];
  18. }
  19. public function auth
  20. {
  21. if (isset($this->request["logowanie"]))
  22. return $this->request["logowanie"];
  23. else 
  24. return "none";
  25. }
  26. public function login
  27. {
  28. if(isset($this->request["login"]))
  29. return $this->request["login"];
  30. else 
  31. return "none";
  32.  
  33. }
  34. public function password
  35. {
  36. if(isset($this->request["password"]))
  37. return $this->request["password"];
  38. else 
  39. return "none";
  40. }
  41. public function pamietaj
  42. {
  43. if(isset($this->request["pamietaj"]))
  44. return $this->request["pamietaj"];
  45. else 
  46. return "none";
  47. }
  48.  
  49. }
  50.  
  51. ?>


  1. <?php
  2. ////////////////////////////////
  3.  ///===== KLASA DATA
  4.  //
  5.  //
  6.  
  7. abstract class data 
  8. {
  9. protected $data;
  10. protected $tabela;
  11.  
  12. abstract function dodaj($Array);
  13. abstract function popraw($Array);  
  14. abstract function usun($id);
  15.  
  16.  protected function pobierz_dane($id)
  17.  {
  18.  $pyt = "SELECT * FROM ".$tabela." WHERE id = ".$id;
  19.  $rezult = mysql_query($pyt);
  20.  if(mysql_num_rows($rezult)>0)
  21.  $data = mysql_fetch_array($rezult);
  22.  else echo"nie ma takiego id";
  23.  } 
  24. public function podaj($id,$kolumna)
  25. {
  26. $this->pobierz_dane($id);
  27. if(isset($this->data[$kolumna]))
  28. return $this->data[$kolumna];
  29. else
  30. echo"nie ma takiej kolumny!";
  31. }
  32. protected function id()
  33. {
  34. $pyt="SELECT MAX(id) as ilgrup FROM " .$tabela;
  35. $rezult = mysql_query($pyt);
  36. if($rezult != NULL)
  37. {
  38. $rekord = mysql_fetch_array($rezult);
  39. var $id = $rekord['ilgrup']+1;
  40. return $id;
  41. }
  42. else
  43. return 1;
  44. }
  45. }
  46.  
  47. ?>

  1. <?php
  2. ////////////////////////////////
  3.  ///===== KLASA GRUPA
  4.  //
  5.  //
  6. class grupa extends data
  7. {
  8. protected $tabela = "_dbProducts._dbtGroup";
  9. public function dodaj($Array)
  10. {
  11. if($Array["kod"] =="")
  12. {
  13. $pyt = "INSERT INTO " .$tabela."(id, kod, nazwa, iloscpodg) VALUES(".$this->id().", " .$this->kod_grupy().", " .$Array["nazwa"].", "0");";
  14. }
  15. else
  16. {
  17. $pyt = "INSERT INTO " .$tabela."(id, kod, nazwa, iloscpodg) VALUES(".$this->id().", " .$Array["kod"].", " .$Array["nazwa"].", "0");";
  18. }
  19.  $rezult = mysql_query($pyt);
  20. }
  21. private function kod_grupy()
  22. {
  23. $pyt="SELECT MAX(id) as ilgrup FROM " .$tabela;
  24. $rezult = mysql_query($pyt);
  25. if($rezult != NULL)
  26. {
  27. $rekord = mysql_fetch_array($rezult);
  28. var $kod = $rekord['ilgrup']+1;
  29. return $kod;
  30. }
  31. else
  32. return 1;
  33. }
  34. public function popraw($Array)
  35. {
  36. $pyt = "UPDATE " .$tabela." SET nazwa = '" .$Array["nazwa"] ."' WHERE grupa = " .$Array["id"];  
  37.  $rezult = mysql_query($pyt);
  38.  if($rezult != NULL)
  39.  return 1;
  40.  else return 0;
  41. }
  42. public function usun($id)
  43. {
  44. // POBRANIE Z BAZY NAJWIĘKSZEGO ID
  45. $maxGrp=($this->id - 1);
  46. // POBRANIE GRUPY O NAJWIĘKSZYM ID
  47. $pyt = "SELECT * FROM " .$tabela." WHERE id = " .$maxGrp;
  48.  $rezult = mysql_query($pyt);
  49.  $ostatni = mysql_fetch_array($rezult);
  50.  // ZAMIANA GRUPY O NAJWIĘKSZYM ID NA ID KTÓRE MA BYĆ USUNIĘTE
  51.  $pyt = "UPDATE " .$tabela." SET grupa = " .$ostatni["grupa"] .", nazwa = '" .$ostatni["nazwa"] ."', iloscpgp = " .$ostatni["iloscpgp"] ." WHERE id = " .$id;
  52.  $rezult = mysql_query($pyt);
  53.  // USUWANIE OSTATNIEJ (O NAJWIĘKSZYM ID) GRUPY
  54. $pyt = "DELETE FROM " .$tabela." WHERE id = " .$id;
  55. $rezult = mysql_query($pyt);
  56. if(!(mysql_num_rows($rezult)>0))
  57. echo"nie ma takiego id";
  58. } 
  59. }
  60. ?>

plik show_group.php
  1. <?php
  2. define('SMARTY_DIR', 'C:Program FilesWebServhttpdlibs');
  3. require_once(SMARTY_DIR . 'Smarty.class.php');
  4.  
  5. $group = new grupa()
  6. $group->podaj(12,'nazwa') 
  7.  
  8. $smarty = new Smarty();
  9.  
  10. $smarty->template_dir = 'C:Program FilesWebServhttpdalberich_NewAgesmartyglownetemplates';
  11. $smarty->compile_dir = 'C:Program FilesWebServhttpdtestysmartyguestbooktemplates_c';
  12. $smarty->config_dir = 'C:Program FilesWebServhttpdtestysmartyguestbookconfigs';
  13. $smarty->cache_dir = 'C:Program FilesWebServhttpdtestysmartyguestbookcache';
  14.  
  15. $smarty->assign('grupa',$group->podaj(12,'nazwa'));
  16.  
  17. $smarty->display('grupy.tpl');
  18.  
  19. ?>

plik grupy.tpl
  1. <?php
  2. {* Smarty *}
  3.  
  4. To jest jedna z moich grup, {$grupa}!
  5. ?>


Pliki przeze mnie pokazane powinny chyba mniej więcej ukazywać moją drogę myślenia, dzięki nim będziecie mogli nakierować mnie na właściwą drogę smile.gif
Wiadomo że w takiej formie to działać nie będzie bo nie ma jak tworzyć requesta (nie wysyłam ani $_POST ani $_GET) ale jak już mówiłem chodzi tu o idee i jej weryfikacje.

Warstwą modelu są u mnie klasy data i grupa (zresztą omawiane już w innym temacie), one tak przynajmniej mi się zdaję są mniej więcej poprawne. Do modelu będa również należeć takie klasy jak produkt , klient itd. dziedziączące od klasy data i poprostu obrabiające dane znajdujące się w bazie danych. Napewno źle są za to stworzone przezemnie warstwy widoku i kontrolera, a to dlatego że wogole nie wiedziałem jak tworzyć tak zwane akcje, u mnie akcja i widok to praktycznie jedno. Czym powinny być akcję? klasami? czy akcja to ma być coś bardzo szczegołowego? czyli np dodaj_uzytkownika_z_poziomu_rejestracja i dodaj_uzytkownika_z_poziomu_admin to dwie różne akcje? czy może to jedna akcja która różni się jedynie wykorzystywanym widokiem? i tak samo czym powinny być widoki? tak jak u mnie zwykłymi includowanymi plikami php w których wykorzystywane są klasy modelu, a wyciągane z modelów informację przesyłane do szablonów, czy może również klasami? jak tak to jak powinna wyglądać budowa takiej klasy widoku?

Sądze że mógłby to być pomocny temat dla takich początkujących w tym temacie jak ja, bo będą mogli zauważyć etapy przejść od czegoś takiego dziwnego(ale za to bardzo banalnego i zrozumiałego dla wszystkich) do czegoś na kształt frameworka bo mam zamiar skrupulatnie wprowadzać wszelkie zaproponowane przez was zmiany i pokazywać efekty w tym miejscu.
Sorki za straszliwą długość tematu i z góry dzięki za wszelką pomoc smile.gif

Pozdrawiam

edit: przesadziłem w tym poście ze słowem framework, jest to lekkie nadużycie. Bo nie mam trzech lat żeby coś takiego napisać, także wstawcie sobie w miejscach gdzie jest słowo framework - aplikacja internetowa zorientowana obiektowo i bedzie ok smile.gif

Ten post edytował smajster 5.08.2006, 00:07:38
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 21.08.2025 - 12:34