Włóczykij
9.05.2009, 19:56:20
Witam, czy byłby ktoś chętny na wykonanie skryptu zmiany pozycji "obiektu" z poziomu panela administracyjnego? Konkretnie wkomponowanie go w skrypt memht portal na stronie eioban.com/articles.
Kod
id1 [Jakiś news]-------[up][down]
id2 [Jakiś news]-------[up][down]
id3 [Jakiś news]-------[up][down]
Jeżeli jest jakiś ładnie opisany skrypt prosiłbym o odnośnik.
korkie
10.05.2009, 10:31:42
Witam.
Rozwiązanie problemu jest bardzo proste.
Baza danych musi mieć kolumnę index ( nie id !).
Zmieniając kolejność zamieniasz po prostu indeksy, a wyświetlasz dane posortowane właśnie wg indeksów.
Ale jest jedna pułapka:
wiersz 1 | id=1 | indeks =1 |
wiersz 2 | id=2 | indeks =2 |
Jeśli z automata zamienisz w wierszach indeksy, to w chwili zmiany będą one miały tą samą wartość i zamiana się sypnie.
Rozwiązanie:
Najpierw przypisujesz dla wiersz1 indeks abstrakcyjny, np. indeks=99999, potem zamieniasz w wiersz2 indeks=2 na indeks=1,
a na końcu wartość abstrakcyjną czyli dla wiersz1 indeks=99999 na indeks=2.
I wszystko powinno działać.
Oczywiste jest, że indeksy powinny zamieniać swe wartości dynamicznie.
Byłoby nonsensem posługiwanie się konkretnymi liczbami przypisanymi do indeksów.
Rozwiązanie (takie ogólne):
$indeks_obecnie_używany # - to twój indeks, który ma zamienić się wartością np. z tym pierwszym w kolejności o wartości niższej.
# Nie powinieneś zakładać, że będzie on miał po prostu wartość $indeks_obecnie_używany-1, bo w chwili usunięcia jakiegoś wiersza z tabeli
zamiana może się nie wykonać.
$indeks_obecnie_używany pobierzesz sobie z bazy w chwili kliknięcia np. na link "w górę".
Potem pobierz indeks niższy lub wyższy, mniej więcej tak:
$a="SELECT indeks FROM tabela WHERE indeks<= indeks_obecnie_obslugiwany";
$b = mysql_query($a);
while($w = mysql_fetch_array($b))
{
#Z pętli foreach wyciągniemy ostatnią wartość, czyli tą która nas ineteresuje - indeks o jeden niższy niż obecny;
foreach ($w as $wartosc)
{
}
}
$wartosc; # - to twój indeks o jeden niższy.
Można przystąpić do zamiany.