Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Menu w poziomie
Forum PHP.pl > Forum > Gotowe rozwiązania
chomiczek
Zastanawiam sie w jaki sposób zrobić dobre menu w poziomie.. Tzn wchodząc w głab chciałbym, zeby mi się pojawiało coś na wzór tego co jest np. na tym forum, tzn. Linki php.pl -> Forum -> Skrypty php w bazie mam kilka tabel, w tej która mnie interesuje sa m.in. takie pola jak cat_id oraz parent_id, gdzie pole parent_id wskazuje numer cat_id.. Jak zrobić, żeby takie menu działało.. prubowałem tworzyć na sesjach, ale coś spartoliłem.. nie oczekuje odpowiedzi (no może troszeczke).. ale raczej wskazania w jaki sposób, czego użyć, itp.
kicaj
A czytales o 'drzewkach'?
chomiczek
No czytałem.. tylko, że.. hmmm.. no właśnie.. nie bardzo wiem jak to ugryźć.. tzn co i kiedy wyświetlać (tzn jak tworzyć to menu z linkami)questionmark.gif
Linandar
Ja uŻywam czegoś takiego, może i ty przerobisz skrypt, tak aby pasował do twojej strony.
  1. <?php
  2.  
  3. function get_category_tree($pid)
  4. {
  5.       $sql = &#092;"SELECT up_id, title FROM \".TABEL_PAGES.\" WHERE pid = $pid\";
  6.       if (!$sql)
  7.       {
  8.          message_die(GENERAL_ERROR, 'Couldn't retrieve data', '', __LINE__, __FILE__, $sql);
  9.       }
  10.       $qid = mysql_query($sql);
  11.       if (mysql_num_rows($qid))
  12.       {
  13.             list($parent, $name) = mysql_fetch_row($qid);
  14.             $name = \"<a href='pages.php?id=$pid' class=\"mainmenu\">$name</a>\";
  15.       }
  16.       else
  17.       {
  18.             $parent = -1;
  19.             $name = \"\";
  20.       }
  21.       if ($parent > -1)
  22.       {
  23.             return print_category_tree($parent) . \" -&gt; \" . $name;
  24.       }
  25.       elseif ($pid > 0)
  26.       {
  27.             return \"<a href='portal.php' class=\"mainmenu\">Home</a> -&gt; \" . $name;
  28.       }
  29.       elseif ($id == 0)
  30.       {
  31.             return \"<a href='portal.php' class=\"mainmenu\">Home</a>\";
  32.       }
  33. }
  34.  
  35. function print_category_tree($pid=false) {
  36. /* prints the category tree by calling get_category_tree */
  37.  
  38. echo get_category_tree($pid);
  39. }
  40.  
  41. $sql = \"SELECT title FROM \".TABEL_PAGES.\" WHERE pid = $id\";
  42. if (!$sql)
  43.       {
  44.             message_die(GENERAL_ERROR, 'Couldn't retrieve data', '', __LINE__, __FILE__, $sql);
  45.       }
  46. $qid = mysql_query($sql);
  47. $row = mysql_fetch_row($qid);
  48. $title = $row[0];
  49. print(&#092;"<span class=\"nav\">\");
  50. get_category_tree($id);
  51. print (&#092;" -&gt; \".$title.\"</span>\");
  52. ?>

Oczywiście zmienną $id musisz sobie pobrać z np adresu. Jeśli chcesz zobaczyć jak to dział u mnie to zapraszam Moja strona
chomiczek
@Linandar
Hmm.. niby ok, ale coś u mnie nie działa.. de facto póki co zmieniłem kod w dwóch miejscach i niestety nie działa.. zwraca mi tylko tyle: ->

Mój zmodyfikowany kod wygląda tak (te fragmenty, które zmieniłem):
  1. <?php
  2. $sql = &#092;"SELECT `parent_id`, `nazwa` FROM `kwasny_kategorie` WHERE `cat_id` = $pid\";
  3. ?>

oraz
  1. <?php
  2. $sql = &#092;"SELECT `nazwa` FROM `kwasny_kategorie` WHERE `cat_id` = $pid\";
  3. ?>


czyli tak naprawdę zmieniłem tylko nazwy pól.. zastanawiam się co mogłem zrobić źle.. Masz może jakąś propozycję?? Sugestie??

P.S. Może (tzn. raczej napewno chodzi o nazwy pól w tabeli)
W mnie to odpowienio:
- cat_id to numer katalogu
- nazwa to nazwa
- parent_id wskazuje na cat_id (jesli parent_id == 0 wtedy jest to kategoria TOP
Linandar
Pytnie, czy zwraca ci też błędy, np: Warning: mysql_fetch_row()... czy tylko "->" ?
chomiczek
Zwraca mi tylko to.. byc moze że jest jakis błąd, ale nie widzę go... z doświadczenia wiem, że na tym serwerze wyłączone jest raportowanie błedów na ekranie i dlatego mogę nie widzieć nic.. sad.gif
Linandar
no to na 99% nie masz pobranego identyfikatora. Nie czyta zmiennej $pid
np dla strony o identyfikatorze 3 musisz mieć ades w postaci: url/strona.php?pid=3 i wówczas odczytujesz zminną pid
  1. <?php
  2. $pid = ( isset( $HTTP_POST_VARS['pid']) ) ? $HTTP_POST_VARS['pid'] : $HTTP_GET_VARS['pid'];
  3. ?>

zakładam, że linie wyprostowałeś.
chomiczek
zmieniłem serwer i teraz wygląda to tak:
w tej:
  1. <?php
  2. $row = mysql_fetch_row($qid);
  3. ?>
mam taki błąd:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/*****/test/admin/index.php on line 133

natomiast w tej:
  1. <?php
  2. if (mysql_num_rows($qid))
  3. ?>
mam taki:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/****/test/admin/index.php on line 100

I to by było na tyle.
Linandar
No to w takim razie masz dodładnie to, co opisałem ci w poprzednim poście. Pusisz pobrać a adresu wartość zminnej $qid.
można to zrobić na kilka sposobów. Ważne jest jednak to, że w adresie musi być umieszczony identyfikator strony! zakładając, że masz adres postaci: url/page.php?id={tutaj jakać wartość} pobierasz z niego info o id:
  1. <?php
  2. $pid = isset($_GET['id']) ? $_GET['id'] : 1;
  3. ?>
powyższy kod umieszczasz zaraz pod znacznikiem <?php w swoim skrypcie.
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.