Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Do góry, na dół... w prawo, w lewo
Forum PHP.pl > Forum > PHP
Fibolg
Mam sobie menu wyświetlane z bazy danych na zasadzie...
  1. <?php
  2. include &#092;"dbconf.php\";
  3.  
  4. $zapyt1 = &#092;"SELECT * FROM t_menu\";
  5. $wyk1 = mysql_query ($zapyt1);
  6. $zapyt2 = &#092;"SELECT count(ID) FROM t_menu\";
  7. $wyk2 = mysql_query ($zapyt2);
  8. $wier2 = mysql_fetch_array ($wyk2);
  9.  
  10. echo &#092;"<table cellpadding=\"0\" cellspacing=\"0\" width=\"750\" align=\"center\" bgcolor=\"#000000\" border=\"0\">
  11. <tr><TD height=&#092;"20\" bgcolor=\"#000000\" style=\"color:#ffffff; font-size:xx-small;\">
  12. &nbsp;&nbsp;&nbsp;&nbsp;&#092;";
  13. while ($wier1 = mysql_fetch_array ($wyk1)){
  14.  
  15. if ($wier1[ID]==$wier2[0]){
  16. echo &#092;" <a href=\"$adres/$wier1[NAZWA]/index.php\">$wier1[OPIS]</a>\";
  17. }
  18. else {
  19. if ($wier1[ID]==1){
  20. echo &#092;" <a href=\"$adres/index.php\">$wier1[OPIS]</a> &nbsp;|&nbsp;\";
  21. }
  22. else{
  23. echo &#092;" <a href=\"$adres/$wier1[NAZWA]/index.php\">$wier1[OPIS]</a> &nbsp;|&nbsp;\";
  24. }
  25. }
  26. }
  27. echo &#092;"</td></tr>
  28. </table>&#092;";
  29. ?>

Teraz próbuję zrobić dodawanie w panelu administracyjnym dodawanie kolejnych modułow. Wszystko ładnie pięknie, ale...
w jaki sposób zrobić strzałki <- ->, które ustalą kolejność wyświetlanych linków w menu? Czy potrzebne jest do tego kolejne pole w bazie? Myslałem, żeby tak właśnie zrobić, tylko nie wiem jak wówczas zapytaniem zmienić wszystkie rekordy w bazie indexując je wg nowego porządku, gdy kliknie się np jedno pole <-. Mam nadzieję, że zrozumieliście o co chodzi winksmiley.jpg
cim
wg. mnie trzeba by zrobić kolejne pole w tabeli i w nim kolejne liczby według ktorych sortowałoby sie wyniki zapytania przy wyświetlaniu menu na stronie... a przy kliku w '<-'/'->' zamieniałoby sie wartość rekordu przy którym klik był wykonany z tym które jest wcześniej/poźniej w menu... trzeba by tez pomyśleć o przypadku kiedy nie ma kolejnych liczb...
tiraeth
możesz oczywiście modyfikować rekordy... np. zmieniać ID z 2 na 1 etc.
Fibolg
Tak, tylko wówczas modyfikować trzeba wszystkie rekordy - jakby zmiana wszystkich pól w danej kolumnie w bazie, a powiesdzmy przy 30 odnośnikach... nie wiem jak to zapytanie by skonstruować...
Spirit86
zrób pola w tabeli:
x i y i tam wpisuj pozycje, np.
x = Right, y = 1
kociou1
Ja rozwiązałem ten problem w ten sposób: dodałem do tabeli kolumne `kolejnosc`

do zmiany kolejnosci uzywam takiej funkcji:

  1. <?php
  2.  
  3. function zmien_kolejnosc($tabela, $kolumna, $id, $zmiana, $warunek=NULL, $kolumna_warunek=NULL)
  4. /*
  5. $tabela -> nazwa tabeli z danymi
  6. $kolumna -> nazwa kolumny w ktorej są dane o kolejności (u mnie nazywa się `kolejnosc` :) )
  7. $id -> id strony której położenie w np. menu (czyli kolejność) chcę zmienić
  8. $zmiana -> przyjmuje wartosci \"gora\" albo \"dół\" - czyli przesunięcie w dół lub w górę
  9. $warunek i $kolumna warunek -> jeśli ustawione dodają do zapytania to: where `'.$kolumna_warunek.'`=''.$warunek.'' '; dzięki czemu mogę zmieniać kolejność stron o np. id > 76 , albo tylko stron należących do określonej kategorii itp..
  10. */
  11. {
  12. if(isset($warunek)&&isset($kolumna_warunek))
  13. {
  14. $where=' where `'.$kolumna_warunek.'`=''.$warunek.'' ';
  15. }
  16.  
  17. $sql='select `id`, `'.$kolumna.'` from `'.$tabela.'`'.$where.' order by `'.$kolumna.'`';
  18. $zapytanie=mysql_query($sql, DBID);
  19. while($odpowiedz=mysql_fetch_assoc($zapytanie))
  20. {
  21. $tablica[]=$odpowiedz;
  22. }
  23. $ilosc=count($tablica);
  24. //tutaj jest kod który \"naprawia\" kolejność - np. gdy mamu kolejność: 1,2,5,7,9 dane kolejności są przepisywane i dostaniemy -> 1,2,3,4,5 :)
  25. foreach($tablica as $klucz => $wartosc)
  26. {
  27. $tablica[$klucz][$kolumna]=$klucz+1;
  28. if($tablica[$klucz]['id']==$id)
  29. {
  30. $index=$klucz;
  31. }
  32. }
  33. //koniec naprawy kolejnosci
  34. if(($zmiana=='gora')&&(!$index==0))
  35. {
  36. $tablica[$index][$kolumna]=$tablica[$index][$kolumna]-1;
  37. $tablica[$index-1][$kolumna]=$tablica[$index-1][$kolumna]+1;
  38. }
  39. elseif(($zmiana=='dol')&&!($index===$ilosc))
  40. {
  41. $tablica[$index][$kolumna]=$tablica[$index][$kolumna]+1;
  42. $tablica[$index+1][$kolumna]=$tablica[$index+1][$kolumna]-1;
  43. }
  44.  
  45. foreach($tablica as $wartosc)
  46. {
  47. $sql='update `'.$tabela.'` set `'.$kolumna.'`=''.$wartosc['kolejnosc'].'' where `id`=''.$wartosc['id'].'' limit 1';
  48. mysql_query($sql, DBID);
  49. }
  50. }
  51.  
  52. ?>

Pewnie są wydajniejsze i "ładniejsze" rozwiązania ale... to też działa smile.gif, używan tego na tabelach zawierających do 200 elementów i w zasadzie nie obserwuję jakichś zwiech ani wydłużenia ładowania strony prz zmianie klejności. smile.gif
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.