v2.5.2
Giriş yap

Özel tarih ve günde div'in aktif olması

erdal42
460 defa görüntülendi ve 1 kişi tarafından değerlendirildi

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 ?

Cevap yaz
Cevaplar (14)
ebykdrms
784 gün önce

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 } ?>
erdal42
784 gün önce

Siz cansınız hocam. Dediğiniz gibi denediğimde olmadı. Ancak sizin yöntem ile harika bir şekilde çalıştı. Bu da bilgi olarak kenarda kalsın :)

ebykdrms
784 gün önce

> @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ı

halilibrahimunlu
784 gün önce

Soru çözülmüş Kolay Gelsin :)

erdal42
784 gün önce

@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 ?

erdal42
784 gün önce

Çok teşekkürler.

erdal42
784 gün önce

Attığınız kod da sadece ay gün çalışmasını istiyorum. Yıl tarihlerini çıkarmak için ne yapabiliriz ?

ebykdrms
784 gün önce

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 } ?>
erdal42
785 gün önce

@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.

ebykdrms
785 gün önce

MySQL ile işiniz olmasa da verdiğim kodu kendi kodunuza uygun hale getirebilirsiniz.
Anladığım kadarıyla cevabımdaki kodu kendi kodunuza entegre edecek düzeyde PHP bilmiyorsunuz.
Sizin kodunuzu görmeden yorum yapmak zor.

erdal42
785 gün önce

@ebykdrms bilgi için teşekkürler.

Mysql ile işim yok. Sadece index.php içinde php ile tarih sistemi ile içinde div olan kodun sadece günü geldiğinde çalışmasını istiyorum. Diğer güne gelince otomatik olarak gitmesini istiyorum.

ebykdrms
785 gün önce

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>
erdal42
785 gün önce

Örnek kod var mı peki ? @abidino

abidino
785 gün önce

if sorgusu içerisinde anlık tarihi görünütülencek tarih ile karşılatırıp eşit ise div!i ekrana yazdır.