Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
7
Cevap
165
Tıklama
0
Öne Çıkarma
Php'de 1 gün geçince new yazısını kaldırmak
W
9 yıl (490 mesaj)
Yüzbaşı
Konu Sahibi

Merhaba,

php'de ürünler eğer ürün 1 gün içerisinde eklenmişse new diye bir yazı olmasını istiyorum. Bu zaman dilimini nasıl ayarlayabilirim?

Bir gün arasındaki zamanı nasıl ayarlayabilirim?

Yardımınıza ihtiyacım var.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



C
9 yıl (571 mesaj)
Yüzbaşı

Yöntem 1

Her db sorgusundan sonra dönen sonuçları for loop a alacaksın. Yazının oluşturulduğu zamanla şimdiki zamanı karşılaştırıp farkı günden az ise işaretli fazla ise işaretsiz html düzenlemesi yaptıracaksın. Zaman kıyaslarken utc zamanını baz alırsan daha kolay olur.



Yöntem 2(daha az kaynak tüketir)

Tablona “yeni” diye bir boolean sütun ekleyeceksin. Yeni yazı yazıldığında otomatik olarak true olacak. Bir arkaplan rutini oluşturup saat başı tüm postları zamanı 1 gündem eski olan ve “yeni” sütunu True olacak şekilde sorgulayacaksın (SQL filtrelerine göz at). Kalan sonuç varsa “yeni” sütununu false yapıp kaydedeceksin. Kullanıcı sorgu yaptığında “yeni” sütunundaki değere göre HTLM düzenlemesi yapacaksın.



İlk yöntemde her kullanıcı her listeleme yaptığında database sorgusu, sonuçların listelenip zamana kıyaslanması ve sonrasında HTML ayarlanması yapcak. 100-200 post için sorun olmaz belki ama 10000 post dakikada bir kaç kez sorgulandığında RAM ve CPU ciddi şekilde tıkanır. İkinci yöntemde saat başı tek bir sorguda zaman kıyaslaması yaptığı için ve filtre kullanıldığı için kat kat verimli olacaktır.



Not: Bu yazdığım işin mantığı. Kullandığın dile göre uygulamasını yapmak sana kalmış.



< Bu ileti mini sürüm kullanılarak atıldı >

E
9 yıl (3264 mesaj)
Yarbay

Ürünlerin tablosunda createdDate tut. Ürünleri sayfaya basarken kontrol et eğer createdDate bugüne eşit değilse new yazdırma eşitse yazdır. CreatedDate + 1 olarak kontrol yaparsan bir gün daha durur.



Basit bir soru çok kastırmaya benchmark yapmaya gerek yok.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
W
9 yıl (490 mesaj)
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: L[A]hor

Ürünlerin tablosunda createdDate tut. Ürünleri sayfaya basarken kontrol et eğer createdDate bugüne eşit değilse new yazdırma eşitse yazdır. CreatedDate + 1 olarak kontrol yaparsan bir gün daha durur.



Basit bir soru çok kastırmaya benchmark yapmaya gerek yok.

Merhaba,

baktım ama createdDate yok sadece Date ve Datetime var. Hangisini seçmem gerekiyor ve bir de kod örneği verirseniz çok iyi olur.

Yardımınıza ihtiyacım var.


Bu mesaja 1 cevap geldi.
E
9 yıl (3264 mesaj)
Yarbay

quote:

Orijinalden alıntı: webandyazilimprofesor


quote:

Orijinalden alıntı: L[A]hor

Ürünlerin tablosunda createdDate tut. Ürünleri sayfaya basarken kontrol et eğer createdDate bugüne eşit değilse new yazdırma eşitse yazdır. CreatedDate + 1 olarak kontrol yaparsan bir gün daha durur.



Basit bir soru çok kastırmaya benchmark yapmaya gerek yok.

Merhaba,

baktım ama createdDate yok sadece Date ve Datetime var. Hangisini seçmem gerekiyor ve bir de kod örneği verirseniz çok iyi olur.

Yardımınıza ihtiyacım var.

Php bilmiyorum, veritabanında kolon için şimdilik Date tutman yeterli, kolon adı createdDate türü de Date olsun. Orayı her kayıt yeni kayıt eklemede o anki tarihi alarak kaydet.

Sayafaya verileri çekerken yani bir for döngüsü veya foreach veya while döngüsü kullandığını farz ediyorum, o döngü içerisinde o anki iterasyondaki verinin createdDate kolonunu bugünkü tarhiten çıkar eğer sonuç 0 veya 1 ise istediğin yere new yazdır. Eğer sonuç 1 veya 0 değilse ki bu da doğruca else kısmı olur veriyi new yazdıramdan bas sayfaya.



D
9 yıl (2971 mesaj)
Yarbay

Bu tür işler için tabloda bir tarih sutunu olmalı. ben tarih bilgilerini int olarak yani unix time stamp olarak tutmayı tercih ediyorum.

şimdi 1 gün 86400 sn dir

yani eğer int olarak tutuyorsan

if(($time - $today) <= 86400) {
echo "new";
}

datetime olarak tutuyorsan

$time = str_totime($dbfield)


Bu mesaja 1 cevap geldi.
W
9 yıl (490 mesaj)
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Delifisek.Tux

Bu tür işler için tabloda bir tarih sutunu olmalı. ben tarih bilgilerini int olarak yani unix time stamp olarak tutmayı tercih ediyorum.

şimdi 1 gün 86400 sn dir

yani eğer int olarak tutuyorsan

if(($time - $today) <= 86400) {
echo "new";
}

datetime olarak tutuyorsan

$time = str_totime($dbfield)

Peki varchar olarak tutabilir miyim?



D
9 yıl (2971 mesaj)
Yarbay

tutarsın da niye ? int olarak tutsana. int zaten.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.