Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System News - News Przyklejony
Forum PHP.pl > Forum > Gotowe rozwiązania
Najki
Mam system newsów napisany w php, oparty o MySQL. Chciałbym dodać mu możliwość ustawienia jakiemuś newsowi opcji "przyklejony" i/lub "gorący". News trzymałby się na początku listy newsów przez X dni (X - indywidualne ustawienie dni dla newsa), a gorący miałby nawet swój własny, wyróżniający go wygląd.

Ma ktoś pomysł jak zrobić takie coś?
bamboos
w tabelce dodajesz nowe pole: "przyklejony" o wartosciach 0 - normalny, 1 - przyklejony
potem wybierajac newsy z bazy dajesz: order by przyklejony
Najprostrzy sposób...
Najki
Ale jak dam order by przyklejony to najpierw wybierze wszystkie przyklejone, a dopiero potem te najnowsze datą.

order by data desc and przyklejony desc ?
Za cholerę nie mam pojęcia, myślałem też, że to bardziej skomplikowane tongue.gif.
anas
Hej.

Dodaj do tabeli z news'ami pola tabelaznewsami.DataWyroznieniaDo(typu date) oraz pole tabelaznewsami.Wyrozniony(typy calkowitego), teraz przed wyswietleniem normalnych newsow zrob zapytanie:

  1. SELECT * FROM tabelaznewsami WHERE DataWyroznieniaDo >= now() AND Wyrozniony = 1 ORDER BY DataDodania LIMIT 0, 1


Teraz troche objasnienin DataWyroznieniaDo przetrzymuje jak nazwa mowi date do kiedy ma byc wyrozniony news, dlatego sprawdzamy czy sa w bazie jakies newsy z DataWyroznieniaDo wieksza od dzisiejeszej badz jej rownej.

Kolejna faza to sprawdzenie czy news nalezy do wyroznionych, stad pole Wyrozniony - dodajesz z wartoscia 1 lub 0, 1 - odpowiada wyroznionemu, 0 niewyroznionemu.

Na koniec sortujemy przez DateDodania, zeby wyroznic najnowszy news dodany z opcja wyroznienia.

Ostatni kroczek to okreslenie limitu ze potrzebujemy pierwszy news ktory spelnia nasze kryteria.

Dalej juz wywalenie tego w odpowiedniej formie na stronie.

Ps. Mozna by to oprzec o kolejna tabele i zrobic relacje jeden do jednego i jesli w tabeli o strukturze

id_wyroznienia
id_newsa - Relacja z tabela newsy
data_do

i teraz mozemy latwiej zarzadzac taka baza przy dodawaniu mozliwosci przeszukiwania itp, wszystko odbywalo sie bedzie za pomoca kluczy.

pozdrawiam

anas
Najki
Dzięki wielkie smile.gif.
Trochę to obrobiłem i jest GIT! biggrin.gif
Co najważniejsze, działa smile.gif.

Udostępniam fragment, jakby ktoś był zainteresowany.

  1. <?php
  2. # pobieramy newsy przyklejone, które mają datę wygaśnięcia przyklejenia (pole \"przyklejony_do\") większą niż data obecna
  3. $q_news_przyklejony = mysql_query (&#092;"select * from twoja_tabela_news where przyklejony_do >= now() and przyklejony='1' order by data desc\");
  4.  
  5. # zliczamy ilość przyklejonych newsów
  6. $sum_news_przykl = mysql_num_rows ($q_news_przykl);
  7.  
  8. # odejmujemy ilość newsów przyklejonych od ilości newsów, które chcemy mieć wyśw
  9. etlone na stronie, np. 10
  10. $news_zwykle = 10-$sum_news_przykl;
  11.  
  12. # drukujemy newsy przyklejone
  13. while ($r_news_przyklejony = mysql_fetch_array ($q_news_przyklejony)) {
  14.  # druk (pomijam)
  15. }
  16.  
  17. # pobieramy newsy zwykłe, które wydrukujemy pod przyklejonymi
  18. $q_news = mysql_query (&#092;"select * from liga_bstr_news where przyklejony='0' order by data desc, id desc limit 0, $news_zwykle\");
  19.  
  20. # drukujemy newsy zwykłe
  21. while ($r_news = mysql_fetch_array ($q_news)) {
  22.  # druk (pomijam)
  23. }
  24. ?>

Mam nadzieję, że komuś to się przyda smile.gif.
Dzięki anas !
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.