Witam. Chciałbym się dowiedzieć jak zrobić coś takiego: powiedzmy, że na stronie www mam jakieś ogłoszenia. Po miesiącu (lub jakimś innym czasie) ogłoszenie ma być widoczne z tym, że nie można z niego nić skopiować, jest szare a na nim jest napis np. "nieaktualne". Często takie rozwiązanie można spotkać w serwisach z ofertami o prace. Proszę o wskazówki jak to jest rozwiązane.
Napisz skrypt i uruchamiaj go przez CRONa raz dziennie. Generalnie można to robić na zasadzie schematu:
- Uruchom skrypt każdego dnia o godzinie 00:00
- Sprawdź każdy rekord, czy jego data publikacji nie jest dłuższa niż np. 30 dni
- Jeśli dłuższa to usuń/dodaj info o wygaśnięciu i leć dalej, jeżeli krótsza zostaw w spokoju i leć dalej.
Można to zrobić w PHP.
http://pl.php.net/date
http://pl.php.net/manual/pl/function.mktime.php
$czas_wygasniecia = mktime($godzina, $minuta, $sekunda, $miesiąc, $dzień, $rok [, $letni/zimowy ]);
W ten sposób zapiszemy ile sekund zostanie rozpoczętych licząc od czasu startu epoki Unixowej. Możemy na przykład podać:
$czas_wygasniecia = mktime(10, 59, 00, 2, 23, 2009);
Wtedy zapiszemy ilość sekund która upłynie między czasem rozpoczęcia epoki Unixowej, a godziną 1000, 23 dnia 2 miesiąca 2009 roku.
Czyli czas wygaśnięcia już mamy. Aktualną ilość sekund od epoki Unixowej poda nam funkcja time(), czyli warunek jest taki:
if ($czas_wygasniecia < time()) { //Jeśli rzeczywista ilość sekund jest większa od naszej założonej daty wygaśnięcia to wykonywany jest ten warunek
echo('Oferta wygasła!');
} else {
echo('Oferta jeszcze nie wygasła!');
}
Mam nadzieję, że zrozumiałeś.
Vendro, bo co pchać do tego crona? Przecież PHP nic samo nie zrobi bez użytkownika.
bo co pchać do tego crona? Przecież PHP nic samo nie zrobi bez użytkownika.
???
po co użytkownik do przemielenia plików czy rekordów z bazy danych? PHP równie dobrze może coś robić wywołane przez użytkownika jak i przez automat.
swoją drogą rozwiązanie Vendro jest bezsensowne. co Ty chcesz tam mielić? rekordy w bazie danych? przecież to kompletnie bez sensu. zmiana layoutu jest realizowana na etapie generowania strony (jeśli strona jest buforowana, to co za problem dodać odpowiedni warunek w systemie cache'ującym?). w praktyce wygląda to tak, jak napisał Monk.
żeby nic nie dało się zaznaczyć, dajesz przezroczystego diva rozciągniętego na 100% z position:fixed.
ŁF napisał(a)
żeby nic nie dało się zaznaczyć, dajesz przezroczystego diva rozciągniętego na 100% z position:fixed.
Chodziło mi właśnie o to co napisałeś. Czyli czy da się na siebie nałożyć jakby dwa divy :)??
// a niby czemu nie? - Ł
ŁF napisał(a)
(...)
swoją drogą rozwiązanie Vendro jest bezsensowne. co Ty chcesz tam mielić? rekordy w bazie danych? przecież to kompletnie bez sensu. zmiana layoutu jest realizowana na etapie generowania strony (jeśli strona jest buforowana, to co za problem dodać odpowiedni warunek w systemie cache'ującym?). w praktyce wygląda to tak, jak napisał Monk.żeby nic nie dało się zaznaczyć, dajesz przezroczystego diva rozciągniętego na 100% z position:fixed.
Ja widzę ten problem tak, tworzę tabelę w bazie (chodzi głównie o ostatnią komórkę):
| id | tytul | tresc ogloszenia | data dodania | aktywne |
Wyciągnąłbym rekordy starsze niż X dni i dodał do komórki aktywne 0 w innym przypadku 1 wtedy przy generowaniu/wyświetlaniu wyników od razu wiesz czy ogłoszenie jest ważne czy nie i tutaj wystarczy utworzyć dwie klasy dla div'ów jedna standardowa - aktywna, a druga dla wygasłych ogłoszeń w której dajesz np.
div.nieaktywne {color:#cacaca; background:#eee;}
div.nieaktywne a,a:hover,a:visited {color:#cacaca; text-decoration:none;}
Ewentualnie fakt, można napisać sobie funkcję sprawdzającą datę dodania i obliczającą ile ogłoszenie już "wisi" w serwisie i przy wyświetlaniu wyników zmieniać klasy tak jak pisałem powyżej. I tutaj racja, wykorzystanie CRONa nie jest koniecznie, moja pomyłka. Zmylił mnie temat "okresowe wygaszanie" :)