Witam, problem jest krótki, lecz uniemożliwiający spokojny sen w nocy winksmiley.jpg. Otóż piszę średniej wielkości cms'a na potrzeby tworzonych przez siebie stron (po co pisać to samo wiele razy). Całe jego działanie chcę oprzeć na modułach, które byłyby dołączane wybiórczo, w zależności od potrzeb projektu. Wypociłem coś w stylu:

  1. <?php
  2. // config.inc.php:
  3.  
  4. // lista dozwolonych modułów
  5. $umodules = array('md_content', 'md_news', 'md_kolejnymodul' /*... */);
  6.  
  7. // index.php:
  8.  
  9. // pobieranie nazwy modułu do działania
  10. // GetPageArgument() to moja funkcja do wybierania z _get[]ów i _post[]ów
  11. $mode = str_replace(' ', '', GetPageArgument('mode', 'md_content'));
  12.  
  13. // ...
  14.  
  15. // kod wywołujący dany moduł
  16. $umodules_string = implode(' ', $umodules);
  17. if (stristr($umodules_string, $mode)) {
  18. // include'uje moduł
  19. include_once('modules/'.$mode.'/module_code.php');
  20. if (is_callable('main_'.$mode)) {
  21. $mdr_body = '';
  22. $mdr_title = '';
  23. // wywołuje funkcję main_md_nazwamodułu
  24. // i przekazuje jej referencje do zmiennych, gdzie ma być zwrócona treść
  25. if (call_user_func('main_'.$mode, &$mdr_body, &$mdr_title)) {
  26. $body .= $mdr_body;
  27. $page_title .= ' - '.$mdr_title;
  28. } else {
  29. $body .= 'Nie mogę wyświetlić żądanej treści';
  30. }
  31. } else {
  32.  
  33. }
  34. } else {
  35. $body .= "Nie mogę znalezc okreslonego modulu";
  36. }
  37.  
  38. // przykładowy plik, modules/md_content/module_code.php
  39.  
  40. function main_md_content(&$body, &$title) {
  41.  
  42. $result = '';
  43. $cmd = GetPageArgument('cmd', '');
  44. $content_id = GetPageArgument('content_id', 0);
  45.  
  46. return get_content($content_id, $body, $title);
  47.  
  48. }
  49. ?>


W katalogu /modules/md_nazwamodulu/ jest jeszcze zawsze plik module_admin.php do administracji oraz module_info.php z szybkimi do wyciągnięcia informacjami o module. Poza tym jest też oddzielna tablica $amodules[], która zawiera tablicę modułów wywoływanych zawsze, bez polecenia. Jakoś to wszystko działa... jestem tylko pewny jednej rzeczy - ten kod nie jest ani trochę bezpieczny. I celem tego tematu jest to, żebyście wskazali mi wszystkie możliwe furtki/błędy, które zostawiłem pisząc to. Jeśli gdzieś popełniłem coś naprawdę głupiego - opieprzcie mnie solidnie winksmiley.jpg. No i miłe też będą komentarze na temat wydajności tego wynalazku... bo jej też nie jestem pewien.