Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/smarty]Mój pseudo-Framework
Forum PHP.pl > Forum > PHP
smajster
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
mariuszn3
Fajnie, że sobie tworzysz takie rzeczy.. nie mniej sprawność zastosowanych rozwiązań będziesz mógł najlepiej sprawdzić dopisując jakąś faktyczną aplikację bazującą na tym.. masa rzeczy Ci wtedy wyjdzie, wpadniesz wtedy na wiele ciekawszych pomysłów itd.. myślę, że najgorzej to wkółko teoretyzować.. bo potem wychodzą jakieś kiepsko sprawdzające się w praktyce molochy.
Uwag do kodu wielu nie mam.. mój framework jest zbudowany zupełnie inaczej, więc jakbym miał mówić co ja bym zrobił a czego nie to musiałbym cały kod wraz z koncepcją wymienić smile.gif
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.