Autor Zpráva
gully
Profil
Ahoj všem,

dělám lištu se zobrazením zpráv. Zprávy se načítají z MySQL a každá zpráva má unikátní ID, které při jejím zavření uživatelem ukládám jako cookies, aby se zpráva dále nezobrazovala. Podle výsledného html se zdá ze, že vše je ok, ale přesto se DIV s lištou občas nezobrazí, a to i když je ve výsledném html vidět. Nevíte, čím to je způsobeno a případně jak to opravit?

Pro ilustraci posílám část výsledné html stránky, kde se DIV nezobrazil a která je na chlup stejná se stránkou, kde se zobrazil v pořádku (obě vygenerované stránky jsem stáhnul a porovnal jejich obsah a velikost).

<!--========================================================
                   OZNAMOVACI LISTA
=========================================================-->
<div id="barwrap"><div class="bar"><span id="text">Zprovoznili jsme nové <a href="diskuze">diskuzní fórum</a>, na kterém se nás můžete na cokoliv ohledně naší činnosti zeptat. Neváhejte a pojďte s námi <a href="diskuze">diskutovat</a>.</span><span id="otherimg"></span><span id="ok"><a href="#">X</a></span></div></div>
<script>
    var cookie_name = "C7F00409CD8A4FE8843BA10027FF8QA1";
    $(function() {
        setTimeout(function() {
            return $(".bar").animate({
                height: "toggle"
            }, "slow")
        }, 450);
        return $("#ok").on("click", function() {
            $("#barwrap").css("margin-bottom", "0px");
            $(".bar").animate({
                height: "toggle"
            }, "slow");
            $.cookie(cookie_name, 1);
            return !1
        })
    });
</script>
<!--========================================================
                          HEADER
=========================================================-->
Keeehi
Profil
Nebylo by lepší udělat nějaké komplexnější řešení? Jako neukládat to do cookie ale ajaxem si poslat informaci o odkliknutí a uložit to do databáze.
Protože pokud to správně chápu, tak teď, pokud bych si promazal prohlížeč a nebo se přihlásil z jiného zařízení, tak uvidím všechny zprávy, co kdy byly poslány protože mi v prohlížeči budou chybět ty potřebné cookies.
Tedy je to celé za předpokladu, že uživatelé se na tvůj web přihlašují, jelikož jinak je nerozlišíš a toto řešení by nešlo použít.

Nicméně v tvém kódu chybí část, která oznámení automaticky skryje, pokud uživatel danou cookie má. A nebo to řešíš už na serveru podle poslaných cookies a to oznámení se vůbec ne vygeneruje?

Z těch třech returnů dělá něco pořádaného jen ten třetí a hezčí by ho bylo zapsat jako return false;

Konstrukce $.cookie v jQuery oficiálně není. Takže to bude zřejmě nějaký plugin. Podle syntaxe by to mohl být github.com/carhartl/jquery-cookie. Což je tedy už nevyvýjený projekt, nahrazený github.com/js-cookie/js-cookie, jak by jsi se dočetl v dokumentaci toho pluginu.
gully
Profil
Správu oznámení řeší administrace. Každá zpráva má nastavenou dobu zobrazení od-do, případně že se zobrazuje stále a další atributy. Takže ano - pokud smažu cookies, nebo se přihlásím z jiného prohlížeče, budou se mi znovu zobrazovat ty zprávy, které mají platnost (jsou aktuální). To si ale myslím, že je v pořádku. Jinak uživatelé se nepřihlašují, pro případné registrované uživatele bych samozřejmě u každého ukládal do db, které zprávy má přečtené a ty mu nezobrazoval.

Ano, je tam použitý plugin, který ale funguje spolehlivě. Je ale fakt, že časem to tak být třeba nemusí. Popravdě to js řešení není moje, našel jsem ho na webu a pouze tupě zkopíroval.

Skrytí/zobrazení probíhá přes php tím, že pokud cookie existuje, DIV ani js se vubec nevygenerují, takže tam zbytečně nejsou.

Nicméně chybu jsem právě našel, zapomněl jsem odstranit jednu operaci s polem výsledků db dotazu a (i když nechápu souvislost) po vyčistění kódu to šlape, jak má.

EDIT: Za ten odkaz na aktuální js cookies plugin děkuji.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0