Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] optymalna klasa kategorii, do poprawki
herbatniczek
post 18.03.2005, 12:46:27
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.10.2004

Ostrzeżenie: (0%)
-----


witam, mam dla Was wielką prośbe...

jeśli komuś się chce, to wejrzyjcie w kod poniższej klasy, która generuje drzewo kategorii w mojej aplikacji i moze daloby sie ją jakoś poprawic, wyglądała bardziej profesjnalnie...

Klasa jest juz podczepiona pod wiekszy projekt, wiec wazne jest, zeby funkcje zwracaly te same wyniki, no chyba ze jakas lzejsza przeróbka...

Klasa dziala.. tylko mam problem typu: funkcja szukaj_kat ma znaleźć kategorie podaną w parametrze, (musi byc parametr, bo drzewo stworzone jest na pczątku całe i robie $this->szukaj_kat(4) na przyklad) i zwrócić węzeł...

Narazie robie to przez

global $wezel;
$wezel=$wynik;

gdzie $wezel jest zdefiniowany w kodzie nad $drzewo = new .....
, nie dziala to przez return $wezel, wiec nie moge zrobic czegos takiego:

$wezel=$this->szukaj_kat(4); wtedy wezel nie jest obiektem. to chyba wynika z rekurencyjnosci tej funkcji, ale nie wiem jak ją zatrzymać w odpowiednim momencie...


Do klasy będzie potrzebna tabela kategorie:
PK kategoria_ID // id kategorii
nazwa //nazwa kategorii
potomek //istnienie potomka 0/1
przodek //id przodka kategorii
  1. <?php 
  2. class wezel_drzewa_kat{ 
  3.  
  4. var $c_kategoria_ID; //identyfikator kategorii 
  5. var $c_nazwa; //nazwa kategorii 
  6. var $c_potomek; //istnienie potomka, wartość 0/1 
  7. var $c_lista_pot; //lista podkategorii 
  8. var $c_glebokosc; //stopień zagnieżdżenia kategorii 
  9. var $c_rodzic;  //identyfikator przodka kategorii 
  10.  
  11. //konstruktor klasy wypełnia zmienne składowe 
  12. function wezel_drzewa_kat($kategoria_ID, $nazwa, $potomek, $glebokosc, $rozwiniety, $rodzic){ 
  13.  
  14. $this->c_kategoria_ID=$kategoria_ID; 
  15. $this->c_nazwa=$nazwa; 
  16. $this->c_potomek=$potomek; 
  17. $this->c_lista_pot=array(); 
  18. $this->c_glebokosc=$glebokosc; 
  19. $this->c_rodzic=$rodzic; 
  20.  
  21. if ($potomek){ //jeśli istnieją podkategorie, są dodawane do listy  podkategorii 
  22. $wynik=mysql_query('select * from kategorie where  przodek=\"'.$kategoria_ID.'\"'); 
  23.  
  24.  for($licznik=0;$rzad=@mysql_fetch_array($wynik);$licznik++) 
  25. { 
  26. $this->c_lista_pot[$licznik]=new  wezel_drzewa_kat($rzad['kategoria_ID'],  htmlspecialchars(stripslashes($rzad['nazwa'])), 
  27. $rzad['potomek'],$glebokosc+1,$rozwiniety,$this); 
  28.  } 
  29. } 
  30. } 
  31.  
  32. function pobierz_rownorzedne($kategoria_ID){ //funkcja rekurencyjna, lokalizjue miejsce pobranej kategorii w strukturze drzewa 
  33.  ustawia $_SESSION['rozwiniety'][kategoria_ID] dla niej i wszystkich przodków w górę hierarchii drzewa, dzięki temu kolejn
  34.  węzły drzewa są wytłuszczone w menu 
  35. $i=0; 
  36. if ($this->c_kategoria_ID==$kategoria_ID) 
  37. { 
  38. unset($_SESSION['rozwiniety']); 
  39. $_SESSION['rozwiniety'][$this->c_kategoria_ID]=true; 
  40. $kursor=$this; 
  41. for($k=0;$k<=$kursor->c_glebokosc+1;$k++){ 
  42. $_SESSION['rozwiniety'][$kursor->c_rodzic->c_kategoria_ID]=true; 
  43. $kursor=$kursor->c_rodzic; 
  44. } 
  45. } 
  46. $ilosc_potomek=sizeof($this->c_lista_pot); 
  47. while ($i<$ilosc_potomek && $this->c_kategoria_ID!=$kategoria_ID){ 
  48. $this->c_lista_pot[$i]->pobierz_rownorzedne($kategoria_ID); 
  49. $i++; 
  50.  } 
  51.  return true; 
  52.  } 
  53.  
  54. function szukaj_kat($kategoria_ID){ //funkcja rekurencyjna, lokalizuje miejsce kategorii w strukturze drzewa i zwraca 
  55. dpowiedni węzeł 
  56.  
  57. $i=0; 
  58. $ilosc_potomek=sizeof($this->c_lista_pot); 
  59. while ($i<$ilosc_potomek && $this->c_lista_pot[$i]- >c_kategoria_ID!=$kategoria_ID) 
  60. { 
  61.  $this->c_lista_pot[$i]->szukaj_kat($kategoria_ID); 
  62.  $i++; 
  63. } 
  64. if ($this->c_lista_pot[$i]->c_kategoria_ID==$kategoria_ID){ 
  65.  
  66. $wynik= $this->c_lista_pot[$i]; 
  67. global $wezel; 
  68. $wezel=$wynik; 
  69. return true; 
  70.  } 
  71. return false; 
  72. } 
  73.  
  74.  
  75.  
  76. function kateg_w_dol(){ //funkcja rekurencyjna, dla danego węzła tworzy listę podkategorii i zwraca w post
  77. ci tablicy 
  78. global $lista_podk_kategoria_ID; 
  79. $liczba=count($lista_podk_kategoria_ID); 
  80. $lista_podk_kategoria_ID[$liczba]=$this->c_kategoria_ID; 
  81. $k=0; 
  82. $ilosc_potomek=sizeof($this->c_lista_pot); 
  83. if($ilosc_potomek==&& $liczba==0){ 
  84. $lista_podk_kategoria_ID[0]=$this->c_kategoria_ID; 
  85. return $lista_podk_kategoria_ID; //brak podkategorii 
  86. } 
  87. while ($k<$ilosc_potomek){ 
  88. $this->c_lista_pot[$k]->kateg_w_dol(); 
  89. $k++; 
  90.  } 
  91.  // return $lista_podk_kategoria_ID; 
  92. return true; 
  93. } 
  94.  
  95. function wyswietl(){ //funkcja rekurencyjna wyświetlająca hierarchiczne menu kategorii 
  96.  
  97. for($i=0;$i<$this->c_glebokosc;$i++){ 
  98. echo '&nbsp&nbsp'; 
  99. } 
  100. if ($this->c_glebokosc>-1){ 
  101.  if ($_SESSION['rozwiniety'][$this->c_kategoria_ID]) 
  102.  { 
  103. echo '<a href=\"index.php?strona=kategorie&kategoria_ID='.$this->c_kategoria_ID.'\"><b>'.htmlspecialchars(stripslashes($this->c_nazwa)).'</b></a><br>'; 
  104. }else{ 
  105. echo '<a href=\"index.php?strona=kategorie&kategoria_ID='.$this->c_kategoria_ID.'\">'.htmlspecialchars(stripslashes($this->c_nazwa)).'</a><br>'; 
  106.  } 
  107.  
  108. if($_SESSION['rozwiniety'][$this->c_kategoria_ID]) { 
  109.  
  110. $ilosc_potomek=sizeof($this->c_lista_pot); 
  111.  for($i=0;$i<$ilosc_potomek;$i++){ 
  112. $this->c_lista_pot[$i]->wyswietl(); 
  113. } 
  114. } 
  115. } 
  116. else { 
  117.  $ilosc_potomek=sizeof($this->c_lista_pot); 
  118.  for($i=0;$i<$ilosc_potomek;$i++) { 
  119.  $this->c_lista_pot[$i]->wyswietl(); 
  120.  } 
  121. } }; 
  122. ?>
Go to the top of the page
+Quote Post
NuLL
post 19.03.2005, 13:13:23
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Ten temat tu nie pasuje mad.gif - nie to froum.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
DeyV
post 19.03.2005, 13:59:51
Post #3





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




pro -> php


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
herbatniczek
post 26.03.2005, 23:03:06
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.10.2004

Ostrzeżenie: (0%)
-----


on był pro, został chyba przeniesiony
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:22