Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php+mysql - drzewo -
Forum PHP.pl > Forum > Przedszkole
amicek
Witam, stosując się do wskazań moderatorów przeszukałam całe forum php i inne i niestety nie znalazłam informacji, które by mnie satysfakcjonowały.
Mam sobie skrypcik generujący piękne drzewko :-) [wzięty z netu] Teraz pytanie jak zrobić by pokazywały się tylko główne kategorie i po kliknięciu zagłębiały by się dalej. Jednak po wybraniu innej głównej kategorii zwijało poprzenią jednocześnie pokazując podkategorie wybranej ostatnio kategorii głównej. Szukałam wszędzie i jedyne co znalazłam to przykład: bendiego - wybierz "bez stylu", ale nie znalazłam niestety nawet fragmentów kodów. Nawiasem mówiąc jest to dokładnie to czego potrzebuję.

a kodzik z bazą jest następujący:
  1. <?
  2. /*
  3. DROP TABLE IF EXISTS categories;
  4. CREATE TABLE categories (
  5.   CatID int(11) NOT NULL auto_increment,
  6.   CatName varchar(50) default NULL,
  7.   PRIMARY KEY (CatID)
  8. ) TYPE=MyISAM;
  9.  
  10. #
  11. # Dumping data for table 'categories'
  12. #
  13.  
  14. INSERT INTO categories VALUES (1,'Main 1');
  15. INSERT INTO categories VALUES (2,'Main 2');
  16. INSERT INTO categories VALUES (3,'Main 3');
  17. INSERT INTO categories VALUES (4,'Main 4');
  18. INSERT INTO categories VALUES (5,'Main 5');
  19. INSERT INTO categories VALUES (6,'Main 6');
  20. INSERT INTO categories VALUES (7,'Main 7');
  21. INSERT INTO categories VALUES (8,'Main 8');
  22. INSERT INTO categories VALUES (25,'Sub 1-1');
  23. INSERT INTO categories VALUES (32,'Sub 2-1');
  24. INSERT INTO categories VALUES (33,'Shared 1');
  25. INSERT INTO categories VALUES (34,'Sub 2-1-1');
  26. INSERT INTO categories VALUES (35,'Sub 2-1-2');
  27. INSERT INTO categories VALUES (36,'Sub 2-2');
  28. INSERT INTO categories VALUES (37,'Sub 2-2-1');
  29. INSERT INTO categories VALUES (38,'Sub 2-3');
  30. INSERT INTO categories VALUES (39,'Sub 2-4');
  31.  
  32. #
  33. # Table structure for table 'categories2parents'
  34. #
  35. DROP TABLE IF EXISTS categories2parents;
  36. CREATE TABLE categories2parents (
  37.   CatID int(11) default NULL,
  38.   ParentID int(11) default NULL
  39. ) TYPE=MyISAM;
  40.  
  41. #
  42. # Dumping data for table 'categories2parents'
  43. #
  44.  
  45. INSERT INTO categories2parents VALUES (1,0);
  46. INSERT INTO categories2parents VALUES (2,0);
  47. INSERT INTO categories2parents VALUES (3,0);
  48. INSERT INTO categories2parents VALUES (4,0);
  49. INSERT INTO categories2parents VALUES (5,0);
  50. INSERT INTO categories2parents VALUES (6,0);
  51. INSERT INTO categories2parents VALUES (7,0);
  52. INSERT INTO categories2parents VALUES (8,0);
  53. INSERT INTO categories2parents VALUES (25,1);
  54. INSERT INTO categories2parents VALUES (32,8);
  55. INSERT INTO categories2parents VALUES (33,2);
  56. INSERT INTO categories2parents VALUES (33,3);
  57. INSERT INTO categories2parents VALUES (34,32);
  58. INSERT INTO categories2parents VALUES (35,32);
  59. INSERT INTO categories2parents VALUES (36,2);
  60. INSERT INTO categories2parents VALUES (37,36);
  61. INSERT INTO categories2parents VALUES (38,5);
  62. INSERT INTO categories2parents VALUES (39,4);
  63.  
  64. */
  65.  
  66. class menuSystem {
  67. var $cats = array();
  68. var $num_subs;
  69.  
  70. //Set this to be what should be used for indenting.
  71. var $delim = '&nbsp;';
  72.  
  73.  
  74. function menuSystem() {
  75. $this->loadData();
  76. }
  77.  
  78.  
  79. function loadData() {
  80. global $db;
  81. $result = mysql_query(&#092;"SELECT c.CatID, c.CatName, c2p.CatID, c2p.ParentID from
  82.  categories c, categories2parents c2p
  83.  WHERE c.CatID = c2p.CatID ORDER by c2p.ParentID, c.CatName&#092;")
  84. while($row = mysql_fetch_array($result)) {
  85. extract($row);
  86. if($ParentID == 0) {
  87. $this->cats[0][] = array(&#092;"catName\" => $CatName, \"ID\" => $CatID);
  88. }
  89. else {
  90. $this->cats[$ParentID][] = array(&#092;"catName\" => $CatName, \"ID\" => $CatID);
  91. }
  92. }
  93. return;
  94. }
  95.  
  96.  
  97. function print_main($arg) {
  98. ?>
  99. <a href=\"<?=$PHP_SELF?>?catid=<?=$this->cats[0][$arg][ID]?>\">
  100. <?=$this->cats[0][$arg][catName]?>
  101. </a>
  102. <br>
  103. <?
  104. }
  105.  
  106.  
  107.  
  108.  
  109. function make_delim() {
  110. for($i=0;$i<$this->num_subs;$i++) {
  111. $d .= $this->delim;
  112. }
  113. return $d;
  114. }
  115.  
  116. function print_subs($arg) {
  117. foreach($arg as $key => $val) {
  118. $this->num_subs++;
  119. if(is_array($this->cats[$arg[$key][ID]])) {
  120. $this->num_subs++;
  121. ?>
  122. <?=$this->make_delim()?>
  123. <a href=\"<?=$PHP_SELF?>?catid=<?=$arg[$key][ID]?>\">
  124. <?=$arg[$key][catName]?>
  125. </a>
  126. <br>
  127. <?
  128. $this->print_subs($this->cats[$arg[$key][ID]]);
  129. $this->num_subs--;
  130. }
  131. else {
  132. ?>
  133. <?=$this->make_delim()?>
  134. <a href=\"<?=$PHP_SELF?>?catid=<?=$arg[$key][ID]?>\">
  135. <?=$arg[$key][catName]?>
  136. </a>
  137. <br>
  138. <?
  139. $this->num_subs--;
  140. }
  141. }
  142. return;
  143. }
  144.  
  145.  
  146. function printMenu() {
  147. for($i=0;$i<count($this->cats[0]);$i++) {
  148. $this->print_main($i);
  149. if(is_array($this->cats[$this->cats[0][$i][ID]])) {
  150. $this->print_subs($this->cats[$this->cats[0][$i][ID]]);
  151. }
  152. }
  153. return;
  154. }
  155.  
  156.  
  157. }
  158.  
  159. $dbname = 'test';
  160. $dbhost = 'localhost';
  161. $dbuser = '***';
  162. $dbpass = '***';
  163. $db = mysql_connect($dbhost, $dbuser, $dbpass) or DIE(mysql_error());
  164. mysql_select_db($dbname);
  165. $m = new menuSystem;
  166. $m->printMenu();
  167.  
  168.  
  169. ?>
nospor
Odchodząc trochę od Twojego pytania:

jak widzę takie opisanie tabel w postaci sql to aż w sercu radość rośnie (to jest sarkazam tongue.gif) . Na mój gust czytelniejsze byłby zrzut ekranu z bazy lub ręczne wypisanie wartości. Tu u Ciebie na szczęście nie ma dużo kolumn, ale mimo wszystko.
amicek
Cytat(nospor @ 2005-04-20 07:12:16)
Odchodząc trochę od Twojego pytania:

jak widzę takie opisanie tabel w postaci sql to aż w sercu radość rośnie (to jest sarkazam tongue.gif) . Na mój gust czytelniejsze byłby zrzut ekranu z bazy lub ręczne wypisanie wartości. Tu u Ciebie na szczęście nie ma dużo kolumn, ale mimo wszystko.

No cóż, dlatego zamieściłam w php początkujący gdyż poznaję zasady funkcjonowania tego forum. Teraz będę wiedziała, że taki zapis jest niemile widziany i na następny raz się poprawię. thumbsupsmileyanim.gif


Dopisek z 2005-04-22
Czy nikt nie jest w stanie mi pomóc?
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.