Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Moduły z katalogu + dynamiczne menu
Forum PHP.pl > Forum > PHP
Domin
Tworzę sobie CMS-a i chciałbym aby moduły dostępne dla adminsitratora były dostępne tylko te które znajdują się w katalogu modules. Problem dodatkowo utrudnia fakt, iż chciałbym aby, do menu (Panel Admina) był automatycznie dodawany odnośnik w chwili gdy moduł jest dostępny czyli znajduje się w katalogu modules.

Próbowałem to zrobić tak jak poniżej:
  1. <?php
  2.  
  3.  
  4. switch($_GET['dzial']){
  5.  
  6. case "news":
  7. if(file_exists('modules/news.php')) {
  8.  
  9. include('modules/news.php');
  10.  
  11. }
  12. break;
  13.  
  14. default:
  15.  
  16.  echo 'jakiś tekst';
  17.  
  18. break; 
  19.  
  20. }
  21. ?>



co prawda wszystko działa, ale każdy moduł musiał by być identycznie zaincludowany, co bardzo wydłuża kod. Zastanawiam się jak ten probelm rozwiązać... Myślałem nad wczytaniem z folderu modules wszystkich nazw plików np. news.php, komentarze.php, itd. i podłaczyć je do wzorcowej funkcji case. Jednak wczytanie wszystkich nazw wiąże się wczytaniem nazwy łacznie z *.php, wiec trzba było by oddzielać rozszerzenie od nazwy. Myślałem także nad wczytaniem samych plików a funkcja case z nazwą poszczególnego modułu znajdowała by się bezpośrednio w pliku. Jednakże iz próbowałem zrobić to w środku kodu tzn.

  1. <?php
  2. switch($_GET['dzial']){
  3.  
  4.  
  5. if (file_exists("modules/'.$plik.'")) {
  6.  
  7. include("modules/'.$plik.'");
  8.  
  9. }
  10.  
  11.  
  12. default:
  13.  
  14.  echo 'jakiś tekst';
  15.  
  16. break; 
  17.  
  18. }
  19. ?>



ale moduły nie były wczytywane. Nie mam pomysłu jak można było by to rozwiązać. A może poprostu coś robię źle, lub źle używam funkcji?? Może mi ktoś w tym pomóc?? Z góry dziękuję...
xblant
ja bym napisal to tak
  1. <?php
  2.  
  3. function load_mod($name)
  4. {
  5. if(is_file('modules/'.$name.'.php'))
  6. {
  7. if(include('modules/'.$name.'.php'))
  8. {
  9. return true;
  10. }
  11. else
  12. {
  13. return false;
  14. }
  15. }
  16. else
  17. {
  18. return false;
  19. }
  20. }
  21.  
  22. ?>

a wywolujesz:
  1. <?php
  2.  
  3. load_mod('komentaze');
  4.  
  5. ?>
Domin
Ja już doszłem chyba do lepszego sposobu. A wyglada on tak:

  1. <?php
  2. if(isset($HTTP_GET_VARS['dzial']))
  3. {
  4. $dzial=$HTTP_GET_VARS['dzial'];
  5.  
  6. switch($_GET['dzial']){
  7.  
  8.  
  9. case $dzial:
  10. if(file_exists('modules/'.$dzial.'.php')) {
  11.  
  12. include('modules/'.$dzial.'.php');
  13.  
  14. }
  15. break;
  16.  
  17. default:
  18.  
  19.  echo 'jakiś tekst';
  20.  
  21. break; 
  22.  
  23. } // koniec warunku switch
  24.  
  25. }
  26.  
  27. ?>


Moze macie inne zdanie na ten temat?? Jak tak to prosze o uwagi...

Teraz pozostaje tylko zrobić dynamiczne menu... A miało by wyglądac to tak:
w katalogu są pliki: news.php i humor.php więc skrypt tworzy dwa odnośniki:
<a href="index.php?dzial=news">News</a>
<a href="index.php?dzial=humor">Humor</a>

Ale w tym wypadku nie wiem zabardzo jak sie do tego przybrać!
xblant
niedoczytalem posta poprawie jutro dzisiaj jush niemam czasu napisze jutro opd
Domin
Połączyłem twó pomysł z moim i wszystko śmiga jak trzeba...

Teraz pracuje nad menu... i można powiedziec że skrypt jest chyba gotowy, tylko... zamiast wyświetlać mi wszystkie linki z folderu modules wyświetla mi tylko jeden. A o to kod:

  1. <?php
  2.  
  3. $default_dir = "modules/";
  4.  if(!($dp = opendir($default_dir))) die("Nie moge otworzyć $default_dir.");
  5.  while($file = readdir($dp))
  6.  $plik = explode('.',$file);
  7. $nazwa = $plik[0];
  8. if($file != '.' && $file != '..' )
  9.  echo '<li><div class="menu"><a href="admin.php?dzial='.$nazwa.'">'.$nazwa.'</a></div></li>';
  10.  closedir($dp);
  11.  
  12. ?>


Problem znika gdy zmienię kod na taki:
  1. <?php
  2. $default_dir = "modules/";
  3.  if(!($dp = opendir($default_dir))) die("Nie moge otworzyć $default_dir.");
  4.  while($file = readdir($dp))
  5.  if($file != '.' && $file != '..' )
  6.  echo '<li><div class="menu"><a href="admin.php?dzial='.$file.'">'.$file.'</a></div></li>';
  7.  closedir($dp);
  8.  
  9. ?>

tyle że zarówno w linku jak i nazwie pliku pokazywana jest nazwa z rozszerzeniem, a musi być pokazywana tylko nazwa bez rozszerzenia... Co robię źle??
xblant
  1. <?php
  2. $default_dir = "modules/";
  3. if(!$dp = opendir($default_dir))
  4. {
  5. echo "Nie moge otworzyć ".$default_dir.".";
  6. }
  7. else
  8. {
  9. while($file = readdir($dp))
  10. {
  11. if($file != '.' && $file != '..' )
  12. {
  13. $nazwa = explode(".", $file);
  14. echo '<li><div class="menu"><a href="admin.php?dzial='.$nazwa[0].'">'.$nazwa[0].'</a></div></li>';
  15. }
  16. }
  17. closedir($dp);
  18. }
  19. ?>

Powinno dzialac
Domin
Działa, no i zrobione... Dziwne, że ja o tym nie pomyślałem, ale to już chyba przez porę o której to robilem....


Wydaje mi się że ten temat można już zamknąć!!
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.