Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kontrolery modulow i glowny Controller
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
Witam nie wiem czy zle rozplanowalem moj silnik ktory chce wykorzystac do aplikacji czy cos ale juz troche zamotalem rozpisalem sobie doslownie wszystko, wiem nawet jak zrobic system pluginow, gadalem z kumplem powiedzial ze jest nice jednak cos mnie nurtuje.



Struktura katalogow:

Kod
|www|
  |frontcontroller|
  |components|
    |controllers|
    |views|
    |models|
  |plugins| 
    |controllers|
    |views|
    |models|
  |libraries|
  |controllers|
  |views|
  |models|
  |config|
  |interfaces|


Mam routing ktory przekazuje do Dispatchera i ten zatem odpala kontroler i jego akcje czyli tak jak powinno byc.



Jednak system modulow chce zrobic tak jak zrobilem kiedys czyli chcialbym miec zawsze kilka glownych kontrolerow ktore bd mialy glowny widok ten sam Home.php i model Home_Model.php(ktory bd wczytywal moduly na podstawie glownego kontrolera), gdzie widok jak wiadomo bd zrobiony na podstawie DIV'ow gdzie kazdy div ma swoje id a w bazie bd mial info do jakiego div'a jaki modul(jego widok,model i kontroler) ma byc ladowany.



Czyli jesli site bd: index.php/Home odpali sie glowna strona Home z defaultowa akcja Index() lub inna jesli bedzie 2 parametr z modulami dla tej podstrony

SIte: index.php/Forum odpali sie strona forum z jego modulami w sumiej jak wyzej etc...



Gdzie akcja Index() bd pobierala moduly z glownego modelu podstrony.Problem polega na tym ze jak bd mial index.php/Home i na Home bd modul news i bd link by przeczytac caly news nie wiem jak ma to wygladac by wewnatrz glownrgo kontrolea HOme obsluzyc akcje pod kontrolera News testowe dzis zaczne robic prosty system news'ow z pluginem komentarzy i zobaczy sie co z tego wyjdzie

Jesli ktos ma troche czasu i ochote tu jest kilka podstawowych plikow:

Dispatcher -> http://3paste.com/hash/c967351be511c557ae4713963f7e94b4

Router -> http://3paste.com/hash/7c46322bb64b1ba1c9b69e7a1055ee1f

Glowny controller -> http://3paste.com/hash/0f1f1fd18c2e2ab6b9f9b6ed0ad0015d



I jak ktos che wiecej info to niech napisze, napewno jak zrobie prosty system news'ow bd juz wszystko wiedzxial co i jak jednak chcialem zapytac.



Jakies propozycje?

questionmark.gif

Myslalem zrobic cos na wzor tego w glownym kontrolerze:

  1.  
  2.  protected function LoadComponents() {
  3.  
  4.   /*Szukamy componentow na dany glowny kotroler*/ 
  5.  
  6.  
  7.   $GetComponents = $this -> db -> SetQuery('select name from components where controller = '.mysql_real_escape_string($this -> routing -> getController()));
  8.    
  9.   $ModulesName = $this -> db -> DbSqlRecordsAssoc($GetComponents); 
  10.    
  11.   $home = $this -> View; /*Robimy glowny obiekt widoku dla glownego kontrolera*/
  12.    
  13.    
  14.   foreach($ModulesName as $module) {
  15.    
  16.   $mods = $this -> module; /*Tworzymy obiekt moduly poniewa kontroler jest taki sam dla moduly jak i jego pluginy zmieniaja sie tylko widoki i modele*/
  17.    
  18.   $plugins = $this -> db -> SetQuery('select plugin_name from plugin where module = '.$module); /*Szukamy pluginow dla kazdego componentu ktory znajduje sie na stronie*/
  19.    
  20.   if(mysql_num_rows($plugins) > 0) { /*Jesli znaleziono plugin wlaczamy go zamiast modelu i widoku componentu*/
  21.    
  22.   if(file_exists($this -> cfg -> PathPlugins.$this -> cfg -> PathModels.$module.'.php')) {
  23.   
  24.   require_once($this -> cfg -> PathPlugins.$this -> cfg -> PathModels.$module.'.php');
  25.    
  26.   $PluginModel = $module.'_Model';
  27.   $PluginAction = $this -> routing -> getParams();
  28.    
  29.   $code = $mods -> $PluginModel -> $PluginAction();
  30.    
  31.    
  32.   $view = $this -> View;
  33.   $view -> SetVars($code);
  34.   $html[$module] .= $view -> ParseTemplate(true, $this -> cfg -> PathPlugins.$this -> cfg -> PathViews.$module.'.php');
  35.    
  36.   }
  37.    
  38.   }
  39.    
  40.   else { /*Jesli nie znaleziono pluginu wlaczamy component*/
  41.    
  42.   if(file_exists($this -> cfg -> PathModules.$this -> cfg -> PathModels.$module.'.php')) {
  43.   
  44.   require_once($this -> cfg -> PathModules.$this -> cfg -> PathModels.$module.'.php');
  45.    
  46.   $ComponentModel = $module.'_Model';
  47.   $ComponentAction = $this -> routing -> getParams();
  48.    
  49.   $code = $mods -> $ComponentModel -> $ComponentAction();
  50.    
  51.    
  52.   $view = $this -> View;
  53.   $view -> SetVars($code);
  54.   $html[$module] .= $view -> ParseTemplate(true, $this -> cfg -> PathModules.$this -> cfg -> PathModels.$module.'.php');
  55.    
  56.   }
  57.    
  58.   }
  59.  
  60.   }
  61.  
  62.   /*Wypelniamy glowny szablon widokami z componentu/pluginu i wyswietlamy wszystko*/
  63.  
  64.   $home -> SetVars($html);
  65.   $home -> ParseTemplate(true, $this -> routing -> getController());
  66.  
  67.  }
  68.  
  69.  
  70.  


Co o  tym sadzicie?

cojack
Od kiedy w kontrolerze wyciągamy coś z bazy danych? I używamy jakiś foreachow? Odpowiem Ci, od nigdy.

Więc domyśl się co mogę myśleć nt tego kodu.
skowron-line
Myślę że powinieneś jeszcze dopracować swój projekt bo narazie to jakas kiszka.
Sciągnij sobie jakiegoś fw i zobacz co i jak sie robi bo narazie to stosujesz rzeźbe w g****

http://www.bartoszrychlicki.com/2006/11/26/front-controller/
+
http://www.google.pl/#hl=pl&q=mvc+php&...3f55c6203903564
marcio
Cytat
Myślę że powinieneś jeszcze dopracować swój projekt bo narazie to jakas kiszka.
Sciągnij sobie jakiegoś fw i zobacz co i jak sie robi bo narazie to stosujesz rzeźbe w g****


I tu sie mylisz.



Jedyne co to poprostu nie wiem co i jak z tymi pluginami jak nie to juz by to dawno dzialalo

rzymek01
może i by działało, jak równie dobrze działałby 100% strukturalny kod napisany w szybkim czasie, ale tu chodzi o to, że jak piszesz pod MVC, to stosuje się do zasad MVC
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.