Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pozycje menu
Forum PHP.pl > Forum > PHP
danielv13
Jak zrobić, aby można było ustawiać pozycje w menu (przesuwać je w górę i w dół)...
Próbowałem kilku metod ale nie działają sad.gif

Moja tabela z menu wygląda mniej więcej tak:

  1. <?php
  2. ID | NAZWA  | LINK  | POZYCJA
  3. 1 | home | index | 1
  4. 2 | forum  | forum | 2
  5. 3 | kontakt | contac | 3
  6. ?>


Jak mogę zamienić np. pozycje 1 z pozycją 2, aby wszystko się nie posypało??
Ma ktoś jakiś prosty kod, ale miał ktoś już taki problem?questionmark.gif
TomASS
A nie możesz zrobić:
  1. UPDATE tabela SET Pozycja=2 WHERE ID=1;
  2. UPDATE tabela SET Pozycja=1 WHERE ID=2;

?
danielv13
TomASS robiłeś już coś takiego?
Bo muszę to zrobić szybko a nie mam żadnego pomysłu dry.gif
Aha i jeszcze bym zrobił z tym update, ale... skąd mam wziąć id elementu wyżej czy niżej?
Beka ze mnie to wiem haha.gif
tsharek
Pomyśl. Nie będe pisać gotowego rozwiązania, ale kierunek postępowania (jednego z możliwych):

Mniejsze `id`:
1. Wybieraz `pozycje` z `tabela` o zadanym `id`
2. Wybierasz `idy` mniejsze od danej `pozycji` z kroku 1, sortujesz od maxymalnych i ucinasz limit 1

Pozdrawiam,
tsharek
danielv13
tsharek jaśniej się nie da? blink.gif

Może to ktoś napisać, albo podrzucić gotowy skrypt?? PLZ...
sad.gif
Kicok
1. Musisz znać ID linku, który chcesz przemieścić, czyli odnośniki tworzysz mniej więcej w ten sposób:
Cytat
<a href="plik.php?action=move&amp;id=3&amp;direction=up"><img src="strzaleczka_w_gore.gif" alt="up" /></a>
i odczytujesz sobie ID z tablicy $_GET


2. Jeśli przesuwasz link do góry to:
- Pobierasz ID linku który ma największą liczbę w polu pozycja, ale nie większą niż pozycja przesuwanego linku.
Jeśli nie znaleziono nic, to znaczy że przesuwany link jest na samej górze i już z nim nic nie musisz robić
3. Jeśli przesuwasz link na dół to:
- Pobierasz ID linku który ma najmniejszą liczbę w polu pozycja, ale nie mniejszą niż pozycja przesuwanego linku.
Jeśli nie znaleziono nic, to znaczy że przesuwany link jest na samym dole i już z nim nic nie musisz robić


4. Gdy masz już ID linku przesuwanego oraz ID sąsiedniego linku to po prostu zamieniasz ich wartości w polu pozycja


Będą ci potrzebne: MIN(), MAX(), ORDER BY więc http://google.pl i piszesz sobie gotowca ;]
danielv13
Cytat(Kicok @ 24.07.2007, 09:01:40 ) *
- Pobierasz ID linku który ma największą liczbę w polu pozycja, ale nie większą niż pozycja przesuwanego linku.
Jeśli nie znaleziono nic, to znaczy że przesuwany link jest na samej górze i już z nim nic nie musisz robić


I już problem sad.gif


Mam pętelke i tak są ustawione linki:
  1. <?php
  2. while ( $row = mysql_fetch_assoc($w) ) {
  3.  
  4. $id = $row['id'];
  5. $title = $row['nazwa'];
  6. $pozycja = $row['pozycja'];
  7.  
  8. echo (" $title <a href='menu.php?co=move&id=$id&gdzie=up'>W góre</a> <a href='menu.php?co=move&id=$id&gdzie=down'>W dól</a> | 
  9. <a href='menu.php?co=del&id=$id'>Usun</a> <a href='menu.php?co=edit&id=$id'>Edytuj</a><br>");
  10. }
  11. ?>


Przykład przesuniecia w góre:

  1. <?php
  2. if ( $co == "move" ) {
  3.  
  4. $id = $_GET['id'];
  5.  
  6. if ( $gdzie == "up" ) {
  7.  
  8. baza_polacz();
  9.  
  10. $w = mysql_query("SELECT MAX(pozcyja)<$id AS poz FROM menu");
  11. ?>

Jak ma wygladac to zapytanie bo w google to sie ch** dowiedziałem sadsmiley02.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.