
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:
<?php $request = new request(); $controll= new controller($request->page(),$request->action()) $controll->sql(); $controll->setPage(); ?>
moje klasy:
<?php //////////////////////////////// ///===== KLASA CONTROLLER // // class controller { private $page; private $action; public function __construct($page, $action) { $this->page = $page; $this->action = $action; } public function setPage() { switch($this->page) { case 'show_group': include "show_group.php"; break; case 'show_product': include "show_product.php"; break; case 'szukaj': include "search.php"; break; case 'aktualnosci': include "aktualnosciS.php"; break; case 'rejestracja': include "rejestracja.php"; break; case 'o_firmie': include "o_firmie.php"; break; case 'sklepy_partnerskie': include "sklepy_partnerskie.php"; break; case 'regulamin': include "regulamin.php"; break; case 'pomoc': include "pomoc.php"; break; case 'linki': include "linki.php"; break; case 'kontakt': include "kontakt.php"; break; case 'sklep': include "menu.php"; break; case 'dane': include "dane.php"; break; case 'koszyk': include "koszyk.php"; break; default 'promocje': include "promocje.php"; break; } } public function sql() { } } ?>
<?php //////////////////////////////// ///===== KLASA REQUEST // // class request { public function action { return $this->request["action"]; } public function page { return $this->request["page"]; } public function auth { return $this->request["logowanie"]; else return "none"; } public function login { return $this->request["login"]; else return "none"; } public function password { return $this->request["password"]; else return "none"; } public function pamietaj { return $this->request["pamietaj"]; else return "none"; } } ?>
<?php //////////////////////////////// ///===== KLASA DATA // // abstract class data { protected $data; protected $tabela; abstract function dodaj($Array); abstract function popraw($Array); abstract function usun($id); protected function pobierz_dane($id) { $pyt = "SELECT * FROM ".$tabela." WHERE id = ".$id; } public function podaj($id,$kolumna) { $this->pobierz_dane($id); return $this->data[$kolumna]; else } protected function id() { $pyt="SELECT MAX(id) as ilgrup FROM " .$tabela; if($rezult != NULL) { var $id = $rekord['ilgrup']+1; return $id; } else return 1; } } ?>
<?php //////////////////////////////// ///===== KLASA GRUPA // // class grupa extends data { protected $tabela = "_dbProducts._dbtGroup"; public function dodaj($Array) { if($Array["kod"] =="") { $pyt = "INSERT INTO " .$tabela."(id, kod, nazwa, iloscpodg) VALUES(".$this->id().", " .$this->kod_grupy().", " .$Array["nazwa"].", "0");"; } else { $pyt = "INSERT INTO " .$tabela."(id, kod, nazwa, iloscpodg) VALUES(".$this->id().", " .$Array["kod"].", " .$Array["nazwa"].", "0");"; } } private function kod_grupy() { $pyt="SELECT MAX(id) as ilgrup FROM " .$tabela; if($rezult != NULL) { var $kod = $rekord['ilgrup']+1; return $kod; } else return 1; } public function popraw($Array) { $pyt = "UPDATE " .$tabela." SET nazwa = '" .$Array["nazwa"] ."' WHERE grupa = " .$Array["id"]; if($rezult != NULL) return 1; else return 0; } public function usun($id) { // POBRANIE Z BAZY NAJWIĘKSZEGO ID $maxGrp=($this->id - 1); // POBRANIE GRUPY O NAJWIĘKSZYM ID $pyt = "SELECT * FROM " .$tabela." WHERE id = " .$maxGrp; // ZAMIANA GRUPY O NAJWIĘKSZYM ID NA ID KTÓRE MA BYĆ USUNIĘTE $pyt = "UPDATE " .$tabela." SET grupa = " .$ostatni["grupa"] .", nazwa = '" .$ostatni["nazwa"] ."', iloscpgp = " .$ostatni["iloscpgp"] ." WHERE id = " .$id; // USUWANIE OSTATNIEJ (O NAJWIĘKSZYM ID) GRUPY $pyt = "DELETE FROM " .$tabela." WHERE id = " .$id; } } ?>
plik show_group.php
<?php require_once(SMARTY_DIR . 'Smarty.class.php'); $group = new grupa() $group->podaj(12,'nazwa') $smarty = new Smarty(); $smarty->template_dir = 'C:Program FilesWebServhttpdalberich_NewAgesmartyglownetemplates'; $smarty->compile_dir = 'C:Program FilesWebServhttpdtestysmartyguestbooktemplates_c'; $smarty->config_dir = 'C:Program FilesWebServhttpdtestysmartyguestbookconfigs'; $smarty->cache_dir = 'C:Program FilesWebServhttpdtestysmartyguestbookcache'; $smarty->assign('grupa',$group->podaj(12,'nazwa')); $smarty->display('grupy.tpl'); ?>
plik grupy.tpl
<?php {* Smarty *} To jest jedna z moich grup, {$grupa}! ?>
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ę

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

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
