Webboard

Pełna wersja: Okienko z informacją - wybór zapisywany w cache
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Czym najlepiej (najoptymalniej) mogę zrobić informację dla użytkowników, którzy po zapoznaniu się z tekstem mogą kliknąć X. Po kliknięciu, powinni nie widzieć już jej, aż do czasu usunięcia cache.
Czysty javascript z zapisem do localstorage. Po kliknięciu danego przycisku dodajesz flagę do twojej zmiennej, a przed wywołaniem funkcji pokazującej okienko sprawdzasz warunkiem jej status.
(18.04.2017, 22:47)Divir napisał(a): [ -> ]javascript z zapisem do localstorage
A jeśli chciałbym kontrolować to? To znaczy, że w dowolnym momencie mogę zmienić tekst, i wtedy dzieje się to od początku?
Po prostu zmieniasz tekst i flagę w localstorage przez js z true na false (lub odwrotnie, zależy jak to zakodujesz).
Powiedzmy, że zastosuję jednak informację o cookies. Chciałbym, aby po jakiejś zmianie każdy miał wyświetlone zmienioną informację, niezależnie od tego, kiedy zaakceptował.

Wiem, że po zmianie T na N, osoby, które zaakceptowały komunikat w czasie flagi T, mają go wyświetlony jeszcze raz.

Kiedy zmienię na N, osoby, które zaakceptowały komunikat w czasie flagi N, nie mają możliwości zauważenia tego komunikatu ponownie.

Tutaj zmieniam T na N i odwrotnie.
Kod PHP:
if(WHReadCookie('cookies_accepted') != 'T'

Kod PHP:
/*
 * Skrypt wyświetlający okienko z informacją o wykorzystaniu ciasteczek (cookies)
 * 
 * Więcej informacji: http://webhelp.pl/artykuly/okienko-z-informacja-o-ciasteczkach-cookies/
 * 
 */

function WHCreateCookie(namevaluedays) {
    var 
date = new Date();
    
date.setTime(date.getTime() + (days*24*60*60*1000));
    var 
expires "; expires=" date.toGMTString();
    
document.cookie name+"="+value+expires+"; path=/";
}
function 
WHReadCookie(name) {
    var 
nameEQ name "=";
    var 
ca document.cookie.split(';');
    for(var 
i=0ca.lengthi++) {
        var 
ca[i];
        while (
c.charAt(0) == ' 'c.substring(1c.length);
        if (
c.indexOf(nameEQ) == 0) return c.substring(nameEQ.lengthc.length);
    }
    return 
null;
}

window.onload WHCheckCookies;

function 
WHCheckCookies() {
    if(
WHReadCookie('cookies_accepted') != 'T') {
        var 
message_container document.createElement('div');
        
message_container.id 'cookies-message-container';
        var 
html_code '<div id="cookies-message" style="padding: 10px 0px; font-size: 14px; line-height: 22px; border-bottom: 1px solid rgb(211, 208, 208); text-align: center; position: fixed; top: 0px;     background-color: #071927; width: 100%; z-index: 999;">Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. <a href="http://wszystkoociasteczkach.pl" target="_blank">Dowiedz się więcej</a><a href="javascript:WHCloseCookiesWindow();" id="accept-cookies-checkbox" name="accept-cookies" style="background-color: #004be5; padding: 5px 10px; color: #FFF; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; display: inline-block; margin-left: 10px; text-decoration: none; cursor: pointer;">Rozumiem</a></div>';
        
message_container.innerHTML html_code;
        
document.body.appendChild(message_container);
    }
}

function 
WHCloseCookiesWindow() {
    
WHCreateCookie('cookies_accepted''T'365);
    
document.getElementById('cookies-message-container').removeChild(document.getElementById('cookies-message'));

Zrób to tak, że (skoro zdecydowałeś się na używanie ciasteczek) w wartości cookie przechowuj zapisaną wersję komunikatu.


if ( $.cookie("info") == "infoV3" ) { // jeśli wersja ciasteczka to infoV3
return false; // nie rób nic
} else { // w przeciwnym wypadku odwołaj się do jakiejś funkcji
doStuff();
}
Tak? Nie działa, mam zaznaczone akceptowanie na T oraz N - nie ukazuje się ponownie.

Kod PHP:
/*
 * Skrypt wyświetlający okienko z informacją o wykorzystaniu ciasteczek (cookies)
 * 
 * Więcej informacji: http://webhelp.pl/artykuly/okienko-z-informacja-o-ciasteczkach-cookies/
 * 
 */
if ( $.cookie("info") == "infoV3" ) { // jeśli wersja ciasteczka to infoV3
 
return false// nie rób nic
} else { // w przeciwnym wypadku odwołaj się do jakiejś funkcji
  
WHCheckCookies();
}

function 
WHCreateCookie(namevaluedays) {
    var 
date = new Date();
    
date.setTime(date.getTime() + (days*24*60*60*1000));
    var 
expires "; expires=" date.toGMTString();
    
document.cookie name+"="+value+expires+"; path=/";
}
function 
WHReadCookie(name) {
    var 
nameEQ name "=";
    var 
ca document.cookie.split(';');
    for(var 
i=0ca.lengthi++) {
        var 
ca[i];
        while (
c.charAt(0) == ' 'c.substring(1c.length);
        if (
c.indexOf(nameEQ) == 0) return c.substring(nameEQ.lengthc.length);
    }
    return 
null;
}

window.onload WHCheckCookies;

function 
WHCheckCookies() {
    if(
WHReadCookie('cookies_accepted') != 'T') {
        var 
message_container document.createElement('div');
        
message_container.id 'cookies-message-container';
        var 
html_code '<div id="cookies-message" style="padding: 10px 0px; font-size: 14px; line-height: 22px; border-bottom: 1px solid rgb(211, 208, 208); text-align: center; position: fixed; top: 0px;     background-color: #071927; width: 100%; z-index: 999;">Ta strona używa ciasteczek (cookies), dzięki którym nasze forum może działać lepiej. <a href="http://wszystkoociasteczkach.pl" target="_blank">Dowiedz się więcej</a><a href="javascript:WHCloseCookiesWindow();" id="accept-cookies-checkbox" name="accept-cookies" style="background-color: #004be5; padding: 5px 10px; color: #FFF; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; display: inline-block; margin-left: 10px; text-decoration: none; cursor: pointer;">Rozumiem</a></div>';
        
message_container.innerHTML html_code;
        
document.body.appendChild(message_container);
    }
}

function 
WHCloseCookiesWindow() {
    
WHCreateCookie('cookies_accepted''T'365);
    
document.getElementById('cookies-message-container').removeChild(document.getElementById('cookies-message'));

Masz: https://jsfiddle.net/17o2gnc2/
Możesz się tym wzorować. Jeśli nie chcesz używać tego w MyBB, a w projekcie bez jQuery i będziesz miał problem z przepisaniem tego na czysty JS to daj znać.