Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Kotwice do stron nowości pobieranych z bazy, jak wykonać, gdy adres (link) zmienia się dynamicznie?
artoor
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Proszę o pomoc w rozwiązaniu następującego problemu.

Jest sobie strona, niech będzie to: www.mojadomena/aktualnosci na której wyświetla się pięć newsów z bazy danych (każdy news ma dodany atrybut id=”news-1”, id=”news-2” id=”news-5” wartości liczbowe są kolejnymi wierszami gdzie id jest kluczem głównym w MySQL). Jako że podstrona aktualności pobiera newsy z bazy, oczywiste jest, że będzie ich coraz więcej, zatem wykorzystuję paginację, w której kolejne pięć nowości będzie znajdowało się na stronie www.mojadomena/aktualnosci,2 , następne na www.mojadomena/aktualnosci,3 itd.

Sortowanie rzecz jasna jest malejące, ponieważ każdy nowy wpis otrzymuje wyższy numer id który musi wyświetlać się na pierwszej podstronie www.mojadomena/aktualnosci , co za tym idzie, news o id=”news-6”, czyli ten najnowszy powoduje, że id=”news-1”, który jeszcze przed chwilą był na podstronie www.mojadomena/aktualnosci teraz przeskakuje na www.mojadomena/aktualnosci,2

Nie byłoby w tym nic niepokojącego mnie, gdyby nie fakt, że chciałbym móc odnosić się do poszczególnych nowości z innych podstron (tudzież z kanału RSS/Atom) za pomocą kotwic do nich (na zasadzie www.mojadomena/aktualnosci#news-3 itp.)
Problem mam nadzieje jest zrozumiały. Ponieważ przy pięciu newsach w bazie wiem, że odnośnik www.mojadomena/aktualnosci#news-3 zadziała prawidłowo, ale gdy ilość wpisów w bazie będzie już dajmy na to 9, to prawidłowo odnośnik powinien wskazywać na www.mojadomena/aktualnosci,2#news-3 przy 15 wpisach w bazie ten znów nie zadziała, bo należy użyć wówczas www.mojadomena/aktualnosci,3#news-3. Czyli prawidłowy adres jest zależny od ilości wpisów w bazie.

Jakie widzicie rozwiązanie takiego problemu? Zaznaczam, że zależy mi na tym, żeby móc odnieść się do poszczególnych newsów zarówno z innych podstron, jak i kanału RSS/Atom.

Za wszelkie sugestie dziękuję smile.gif
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Jeżeli odnosisz się tylko do jednego wpisu to po co ci w url'u paginacja?? zamiast www.mojadomena/aktualnosci,2#news-3 wystarczy www.mojadomena/aktualnosci#news-3

Twój system paginacji chyba nie działa jak należy? w jaki sposób nowy wpis, może powodować przesunięcie wpisu starszego??

np.

aktualnosci,2
news-10
news-9
news-8
news-7
news-6

aktualnosci,1
news-5
news-4
news-3
news-2
news-1

jest prawidłowym zapisem - id powinno pozostać unikalne tak aby łatwo, można było operować na danych

Ten post edytował CuteOne 23.07.2011, 01:42:33
Go to the top of the page
+Quote Post
artoor
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Dzięki za reakcję smile.gif Wyjaśniam nieścisłości smile.gif
Cytat
Jeżeli odnosisz się tylko do jednego wpisu to po co ci w url'u paginacja??

Chodzi mi o to, żeby pomimo, że odnoszę się do na przykład wpisu o id="news-3" osoba widziała również wpisy przed nim i po nim (czyli cztery pozostałe na tej podstronie wynikającej z paginacji). A dzięki efektowi "kotwiczenia" #news-3 przeglądarka zjechała do tego wpisu i na przykład za pomocą odpowiedniego ostylowania id tego wpisu postawić tam jakiś znacznik - ale to nie jest tematem postu smile.gif
Cytat
Twój system paginacji chyba nie działa jak należy? w jaki sposób nowy wpis, może powodować przesunięcie wpisu starszego?? np.

aktualnosci,2
news-10
...
news-6

aktualnosci,1
news-5
...
news-1

jest prawidłowym zapisem - id powinno pozostać unikalne tak aby łatwo, można było operować na danych

Zgadza się, i tak by było, gdyby nie sortowanie malejące w bazie za pomocą zapytania
Kod
"select * from news order by id DESC limit $strona, $iloscNaStronie";

Gdy zmienię na sortowanie rosnące
Kod
"select * from news order by id ASC limit $strona, $iloscNaStronie";
wówczas wszystko zachowuje się prawidłowo, tak jak w cytowanym przez Ciebie fragmencie... tyle że idea newsów się trochę chwieje, wszak najświeższe wpisy są wyższymi numerami www.mojadomena/aktualnosci,2 sad.gif a zdaje się, że z założenia powinny być niższe, domyślnie po prostu www.mojadomena/aktualnosci.
Jakieś dodatkowe sugestie? smile.gif
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Chyba załapałem w czym masz problem ;D sprawdź
  1. <?php
  2.  
  3. $strona = $_GET['strona'];
  4. $limit = 2;
  5.  
  6. $start = ($strona - 1) * $limit;
  7.  
  8. $select = mysql_query("SELECT * FROM news ORDER BY id ASC LIMIT $start, $limit");
  9.  
  10. $news = array();
  11. while($row = mysql_fetch_assoc($select)) {
  12.  
  13. $news[] = $row;
  14. }
  15.  
  16. krsort($news);
  17.  
  18. echo '<pre>'; print_r($news);
  19.  
  20. ?>


Pobierasz dane tak jak się to zazwyczaj robi przy paginacji czyli od najmniejszego do największego a potem dzięki funkcji krsort sortujesz już pobrane dane wg. klucza

Ten post edytował CuteOne 24.07.2011, 00:17:03
Go to the top of the page
+Quote Post
artoor
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Wielkie dzięki!
Faktycznie rozwiązuje to poniekąd mój problem.
Widzę jednak, że nie da się pogodzić rozwiązania, które mi zaproponowałeś z numeracją wynikającą z paginacji. Teraz jest faktycznie tak jak pisałeś
Cytat
aktualnosci,2
news-10
news-9
news-8
news-7
news-6

aktualnosci,1
news-5
news-4
news-3
news-2
news-1

A zatem, im nowszy wpis, tym wyższy numer, tak więc przybywa wartości aktualnosci,2, aktualnosci,3, aktualnosci,4 (jest to prawidłowe). Borykam się więc z problemem nie do rozwiązania, bo z jednej strony chciałbym mieć najnowsze wpisy dla aktualnosci,1 (wszak ta strona otwiera się domyślnie, a dokładniej po prostu aktualności bez parametru, co jest równe aktualności,1), ale wyklucza to unikalność adresu dla wpisu o określonym id. Zatem wędrują one do aktualnosci,x (gdzie x, to ostatnia strona z najnowszymi wpisami) Jak to się mówi, albo rybki, albo akwarium wink.gif Zastanawiam się jeszcze nad jakąś regułą w .htaccess, albo dokładniejszą analizę (nie mojego autorstwa) funkcji stronicującej... tak czy inaczej dzięki za wszelkie sugestie smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 18:32