Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Basılan İçerikleri İşaretleme Sorunu

Konu, 'PHP' kısmında yerdemli tarafından paylaşıldı.

Etiketler:
  1. yerdemli

    yerdemli Üye

    Kayıt:
    5 Ağustos 2014
    Mesajlar:
    28
    Beğenilen Mesajlar:
    5
    Meslek:
    Dijital Pazarlama & Web Geliştirme
    Şehir:
    İstanbul
    Merhaba,
    Bir popup yönetimi üzerinde çalışıyorum fakat basarken sorun yaşadım.
    Yapmak istediğim, sessionlara attığım aktif içerikleri gösterdikçe işaretlemek ve 1 kez gösterilmesi gerekenleri bir daha göstermeyip, birden çok gösterilmesi gerekenleri göstermeye devam etmek.
    $_SESSION['PopupShowAlways'] dinamik sessionlarına yüklenen 0'lar her zaman görünmesi gereken ve 1'ler de 1 kez gösterilmesi gereken içerikleri veriyor.
    Öncelikle, kaç tane aktif içerik varsa bunları dinamik session'lara atıyorum.
    PHP:
            // Aktif Popupları Dinamik Sessionlara Atama Başladı
            
    $counter 0;
            foreach (
    $resultPopup as $value)
            {
                
    $_SESSION['PopupName'][$counter]         = $value['name']        ;
                
    $_SESSION['PopupDetail'][$counter]         = $value['detail']        ;
                
    $_SESSION['PopupShowAlways'][$counter]     = $value['showAlways']    ; // Hepmi yekmi
                
    $_SESSION['PopupId'][$counter]            = $value['id']            ; // Hangi Popup
                
    $_SESSION['PopupShowed'][$counter]         = "0"                    // Gösterdik mi?
                
    $counter++;
            }
            
    // Aktif Popupları Dinamik Sessionlara Atama Bitti
    Hafızada en az 1 tane popup var mı diye kontrol ediyorum
    PHP:
        if($_SESSION['PopupId'][0]!="")
        {
            
    $size count($_SESSION['PopupName']);
            
    $realSize $size-1;
            
    $doCount 0;
            do 
    // Hem 1 kez hem de sürekli gösterilecek popup varsa ve 1 kez gösterilecek popuplar gösterildiyse, sürekli gösterilecek popup bulana kadar döndürüyoruz
            
    {
                
    $myRand rand(0,$realSize);
                
    $gostermelik     $_SESSION['PopupName'][$myRand];
                
    $basmalik         $_SESSION['PopupShowAlways'][$myRand];
             
                 
    // Gömsterilmemişse kodumuzu çalıştırıyoruz
                
    if($_SESSION['PopupShowed'][$myRand] == 0)
                {
                    
    // 1 kez gösterilmesi gerekiyorsa kodumuzu çalıştırıyoruz
                    
    if ($_SESSION['PopupShowAlways'][$myRand]==1)
                    {
                        
    $_SESSION['PopupShowed'][$myRand] = 1;
                    }
                   
    // Popup içeriğimizi değişkene atıyoruz
                    
    $printPopUp str_replace('[printDetail]',$_SESSION['PopupDetail'][$myRand],$getPopUpHTML);
                }
                    
    $doCount++;
            } while(
    $_SESSION['PopupShowed'][$myRand] != || $doCount == 20); // Gösterilmemiş değilse tekrar dön ya da kısır döngüye girmesin diye max 20 kez yap diyoruz
        
    }
    Bilgi:
    [popupX » A » B » C
    X = popup numarası
    A = gösterilmiş mi? 1 ise evet
    B = 1 kez mi gösterilecek? 1 ise evet
    C = popup'un adı
    Aşağıda göreceğiniz gibi
    popup1 1 kez gösterilmiş ve gösterildi olarak işaretlenmiş.
    Ancak kod gidip bir daha onu seçmiş (gösterilen popup).
    ve basmaması gerektiği için basmıyor (gösterilen popup dediğine bakma).
    Oysa ki gösterilmemişlerden birini bulana kadar dönmeye devam etmeliydi.

    [​IMG]

    Nerede yanlış yapıyorum?
    Teşekkürler.
     
  2. yunus

    yunus Daimi Üye

    Kayıt:
    26 Şubat 2015
    Mesajlar:
    508
    Beğenilen Mesajlar:
    117
    birincisi do döngüsünde ilk popup ile işlem yapıldıktan sonra $_SESSION['PopupShowed'][$myRand] = 1 değerini atıyorsun.
    ikincisi doCount == 20 koşulu eksik olmuş çünkü sadece doCount 20 ise döngüye devam etmesini söylüyorsun.

    dolayısılya ilk popuptan sonra döngüden çıkılıyor.

    doCount <=20 şeklinde max 20 tekrar için kısıtlama yapabilirsin.


    Ayrıca bazı noktaları anlamakta zorlanıyorum.
    PopupShowAlways = 1 ise her zaman gösterilecek
    PopupShowed = 1 ise gösterildi, 0 ise gösterilmedi
    bu şekilde değilmi? döngü içiinde farklı anlamda kullanılmış galiba.