Özel tarih ve günde div'in aktif olması
Merhabalar,
ALışveriş sitem için örneğin 27 Ekim ayı ve gününe gelindiğine otomatik olarak çalıştırak istediğim bir div'i aktif etmesini isteyeceğim. Nasıl yapabiliriz ?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (14)
Diyelim ki PHP ile şu şekilde tarihleri tutuyorsunuz:
$activeDates = [
'10-29',
'21-1',
'4-23',
'5-19',
];
Şimdi bugünün yukarıdaki tarihlerden biri olup olmadığını bulalım.
// Önce bugünün tarihini alalım:
$today = date("m-d");
// Henüz kontrol sağlamadan önce, bugünün aktif gün olup olmadığını tutacak değişkene false verelim:
$isTodayActive = false;
// Şimdi tüm aktif günlere tek tek bakmak için bir döngü oluşturalım:
foreach($activeDates as $date) {
// Döngünün baktığımız elemanı ile bugün aynı mı?
if($date == $today) {
// Aynıysa bugünün aktif olduğunu belirten değişkenimizi true yapalım.
$isTodayActive = true;
// Ve döngünün sonraki tarihlere bakmadan sonlanmasını sağlayalım.
break;
}
}
Artık $isTodayActive
değişkenimiz true ise bugünün özel günlerden biri olduğunu anlayabiliyoruz.
Bu durumda DOM'daki ilgili elementimizin $isTodayActive
değerine göre gösterilmesini/gösterilmemesini sağlayabiliriz.
<?php if($isTodayActive===true) { ?>
<a href="ornek.html">
<div class="ozelgunlerlinki">
Bu fırsatı kaçırmayın ! (resimler vs olacak)
</div>
</a>
<?php } ?>
Siz diyebilirsiniz ki:
"Özel tarih olunca anlayalım ama aynı zamanda bu özel tarihin adını da ekrana yazmak istersek ne yapabiliriz?"
Bu durumda $activeDates
değişkenimizi biraz daha geliştirmemiz gerekir:
$activeDates = [
['10-29', 'Cumhuriyet Bayramı'],
['1-1', 'Yılbaşı'],
['4-23', 'Ulusal Egemenlik ve Çocuk Bayramı'],
['5-19', 'Gençlik ve Spor Bayramı'],
];
Böylece 2 boyutlu bir dizi oluşturmuş olduk.
Şimdi bugünün aktif olup olmadığını tutan değişkenimize true
veya false
atamak yerine, bugün eğer özel günlerden biriyse bu özel günün ne olduğunu yazalım.
// Önce bugünün tarihini alalım:
$today = date("m-d");
// Henüz kontrol sağlamadan önce, bugünün aktif gün olup olmadığını tutacak değişkene boş string ("") verelim:
$isTodayActive = "";
// Şimdi tüm aktif günlere tek tek bakmak için bir döngü oluşturalım:
foreach($activeDates as $date) {
// Döngünün baktığımız elemanı ile bugün aynı mı?
if($date[0] == $today) {
// Aynıysa bugünün aktif olduğunu belirten değişkenimize o günün verisini tutan dizinin 2. elemanını verelim.
$isTodayActive = $date[1];
// Ve döngünün sonraki tarihlere bakmadan sonlanmasını sağlayalım.
break;
}
}
Böylece eğer bugün özel günlerden biriyse $isTodayActive
değişkeninde o günün adı yazıyor. Eğer değilse bu değişken boş string olarak kalmış demektir. Bu durumu if içinde kontrol edebiliriz.
<?php if($isTodayActive!=="") { ?>
<a href="ornek.html">
<div class="ozelgunlerlinki">
<?= $isTodayActive ?> gününe özel bu fırsatı kaçırmayın ! (resimler vs olacak)
</div>
</a>
<?php } ?>
> @ebykdrms son olarak hocam, linke (firsatlar?q=) gibi q='nın yanına o özel gün geldiğinde otomatik olarak (firsatlar?q=Cumhuriyet Bayramı) yazdırabiliyor muyuz ?
Siz bu tarihi a elementinin href attribute'sine ekleyip bir sayfaya göndermek istiyorsunuz. O sayfada da günün hangi gün olduğunu yakalamak istiyorsunuz.
Sizin sorduğunuz şekliyle istediğinizi PHP ile de Javascript ile de yapmak mümkün. Ancak q parametresinin değerini silip yerine başka bi'şey yazmak beraberinde başka sorunlar getirir.
Böyle yapmak yerine q parametresine ek olarak mesela t parametresi de ekleyin ve günün adını öyle yazın. Örneğin:
<a href="?q=<?=$today?>"> ... </a>
Bu şekilde yaptığınızda bu linkte şu yazacak: ?q=10-29
Buna ek olarak bulduğunuz gün adını da t parametresiyle eklemek için:
<a href="?q=<?=$today.($isTodayActive!=="" ? "&t=$isTodayActive" : "")?>"> ... </a>
Bu şekilde yaptığınızda bu linkte şu yazacak: ?q=10-29&t=Cumhuriyet Bayramı
Böylece yönlendirme yapmak istediğiniz sayfada $_GET
dizisiyle hem q hem de t değerlerini alabileceksiniz.
Eğer q parametresini silerseniz bu değeri okuyamazsınız.
Ama tabi benim tarihle işim yok gün adı bana yetiyor diyorsanız direkt $isTodayActive
değişkenini yazdırabilirsiniz.
<a href="?q=<?=$isTodayActive?>"> ... </a>
Böylece linkte şu ifade geçecek: ?q=Cumhuriyet Bayramı
Diyelim ki PHP ile şu şekilde tarihleri tutuyorsunuz:
$activeDates = [
'2022-10-29',
'2022-1-1',
'2023-4-23',
'2023-5-19',
];
Şimdi bugünün yukarıdaki tarihlerden biri olup olmadığını bulalım.
// Önce bugünün tarihini alalım:
$today = date("Y-m-d");
// Henüz kontrol sağlamadan önce, bugünün aktif gün olup olmadığını tutacak değişkene false verelim:
$isTodayActive = false;
// Şimdi tüm aktif günlere tek tek bakmak için bir döngü oluşturalım:
foreach($activeDates as $date) {
// Döngünün baktığımız elemanı ile bugün aynı mı?
if($date == $today) {
// Aynıysa bugünün aktif olduğunu belirten değişkenimizi true yapalım.
$isTodayActive = true;
// Ve döngünün sonraki tarihlere bakmadan sonlanmasını sağlayalım.
break;
}
}
Artık $isTodayActive
değişkenimiz true ise bugünün özel günlerden biri olduğunu anlayabiliyoruz.
Bu durumda DOM'daki ilgili elementimizin $isTodayActive
değerine göre gösterilmesini/gösterilmemesini sağlayabiliriz.
<?php if($isTodayActive===true) { ?>
<a href="ornek.html">
<div class="ozelgunlerlinki">
Bu fırsatı kaçırmayın ! (resimler vs olacak)
</div>
</a>
<?php } ?>
Siz diyebilirsiniz ki:
"Özel tarih olunca anlayalım ama aynı zamanda bu özel tarihin adını da ekrana yazmak istersek ne yapabiliriz?"
Bu durumda $activeDates
değişkenimizi biraz daha geliştirmemiz gerekir:
$activeDates = [
['2022-10-29', 'Cumhuriyet Bayramı'],
['2022-1-1', 'Yılbaşı'],
['2023-4-23', 'Ulusal Egemenlik ve Çocuk Bayramı'],
['2023-5-19', 'Gençlik ve Spor Bayramı'],
];
Böylece 2 boyutlu bir dizi oluşturmuş olduk.
Şimdi bugünün aktif olup olmadığını tutan değişkenimize true
veya false
atamak yerine, bugün eğer özel günlerden biriyse bu özel günün ne olduğunu yazalım.
// Önce bugünün tarihini alalım:
$today = date("Y-m-d");
// Henüz kontrol sağlamadan önce, bugünün aktif gün olup olmadığını tutacak değişkene boş string ("") verelim:
$isTodayActive = "";
// Şimdi tüm aktif günlere tek tek bakmak için bir döngü oluşturalım:
foreach($activeDates as $date) {
// Döngünün baktığımız elemanı ile bugün aynı mı?
if($date[0] == $today) {
// Aynıysa bugünün aktif olduğunu belirten değişkenimize o günün verisini tutan dizinin 2. elemanını verelim.
$isTodayActive = $date[1];
// Ve döngünün sonraki tarihlere bakmadan sonlanmasını sağlayalım.
break;
}
}
Böylece eğer bugün özel günlerden biriyse $isTodayActive
değişkeninde o günün adı yazıyor. Eğer değilse bu değişken boş string olarak kalmış demektir. Bu durumu if içinde kontrol edebiliriz.
<?php if($isTodayActive!=="") { ?>
<a href="ornek.html">
<div class="ozelgunlerlinki">
<?= $isTodayActive ?> gününe özel bu fırsatı kaçırmayın ! (resimler vs olacak)
</div>
</a>
<?php } ?>
@ebykdrms evet, yeni girdik. Sizlerin sayesinde tecrübe kazanıyorum. Kısaca kodumdan bahsedeyim.
burada özel tarih için yazılacak php kodu yer alacak. (üst yerde <?php başlangıcı olacak)
<a href="ornek.html"><div class="ozelgunlerlinki">Bu fırsatı kaçırmayın ! (resimler vs olacak)</div>
?> (burada da kod sonu php'nin)
Ancak direkt echo olarak değil de üsteki gibi divli yapabiliyorsak eğer güzel olur :)
Kısaca ana sayfamda php ile kodladığımız özel tarihler geldiğinde bu yukarıdaki gibi sadece php ile gözükmesini isteyeceğim.
Biraz klasik bir kod yazdım, ancak onun içine resim vs ekleyeceğim.
Diyelim ki ürünün tarih verisini MySQL'den alıp $mysqlDate
değişkeninde atadınız.
$mysqlDate = "2022-10-28 21:45:51";
O halde $mysqlDate
değişkenindeki değerin "bugün" olup olmadığını anlamak için aşağıdaki kodlar iş görür.
$activeDate = date("Y-m-d", strtotime($mysqlDate));
$today = date("Y-m-d");
$isActiveDate = $activeDate == $today;
unset($activeDate, $today);
Böylece elinizde $isActiveDate
adlı bir değişken var.
Bu değişkene, eğer $mysqlDate
'te tutuğunuz tarih bugünse true
, değilse false
değeri atanmış durumda.
Bir <div>
'i bu değere göre göstermek istiyorsanız <div>
'i php if koşuluna sarabilirsiniz:
<div class="product">
<img class="img" source="<?=$productImg?>" />
<div>
<h1><?=$productName?></h1>
<div class="price"><?=$price?></div>
<?php if($isActiveDate) { ?>
<div>Bugün bu ürünün aktif günü!!!</div>
<?php } ?>
</div>
</div>