Forum gratuit: forum de suport al utilizatorilor
Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

Notificari in browser

Pagina 1 din 2 1, 2  Urmatorul

Vezi subiectul anterior Vezi subiectul urmator In jos

  • 0

Notificari in browser Empty Notificari in browser

Mesaj Scris de Zeus Mar Mai 16, 2017 6:15 pm

Salutare tuturor,

Facilitatea din acest subiect permite afisarea notificarilor in browser. Pentru functionare corespunzatoare browser-ul trebuie sa permita cookies si javascript, iar forumul sa aiba un certificat SSL.

Google a anuntat ca incepand cu luna septembrie a acestui an API-ul pentru notificari nu va mai fi functional pentru site-urile care nu au un certificat SSL activ.

Demonstratie

Notificari in browser Show10
Notificari in browser Header10
Notificari in browser Header11

Instalare

Pentru instalarea acestei caracteristici intrati in:
Panou > Module > HTML & JAVASCRIPT > Gestiunea codurilor javascript > Creati un nou cod JavaScript

Completati rubricile cu:

  • Titlu: Notificari in browser
  • Amplasare: Toate paginile
  • Cod:

    Cod:

    $(function() {
       
        if (navigator.cookieEnabled !== true) return;
       
        var config = {
            notif_comm: false,
            forum_name: "Forumul forumurilor",
            forum_icon: "https://2img.net/r/frmste/images/sigle.png",
            recheck: 120,
            debug: false,
            lang: "ro", // "eng" or "ro"
            margin_top: 30,
            limit: 4,
            forums: [45, 43, 44]
        };
       
        config.forums = shuffle(config.forums);
     
       
        switch (config.lang) {
            case "ro":
                $lang = {
                    request_permission : "%s doreste sa va afiseze notificari",
                    allow : "Permite",
                    notallow : "Nu, multumesc"
                };
            break;
           
            case "eng":
                $lang = {
                    request_permission : "%s wants to show notifications",
                    allow : "Allow",
                    notallow : "No, thank you"
                };
            break;
        }   


        function sentNotif() {
            if (Notification.permission !== "granted") {
                if(getCookie("notif_allow") !== "") return;
                requestPermissions();
            } else if (navigator.cookieEnabled === true) {
                setCookie("notif_allow", true, 365);
               
                if (getCookie("notif_push_forum_" + config.forums[0]) !== "") {
                   
                    $posts = shuffle(JSON.parse(getCookie("notif_push_forum_" + config.forums[0])));

                    if (getCookie("notif_push_topics").indexOf($posts[0].topic_id) > -1) return;
                   
                    if (getCookie("notif_count") >= config.limit) return;
                   
                    if (getCookie("notif_wait") === "1") return;
                   
                    setCookie("notif_wait", "1", "", 3);
                   
                    viewTopic($posts[0].topic_id);

                    var notification = new Notification(config.forum_name, {
                        icon: config.forum_icon,
                        body: $posts[0].topic_title
                    });

                    notification.onclick = function() {
                        window.open($posts[0].topic_link);
                        window.focus();
                    };
                   
                    notifCount();
                }
            }
        }
       
        function notifCount() {
            if(getCookie("notif_count") === "") {
                setCookie("notif_count", 1, 1);
            } else {
                setCookie("notif_count", (Number(getCookie("notif_count") ) + 1), 1);
            }
        }

        function viewTopic($topic_id) {
            if ($topic_id === null || $topic_id === "") return;
            $seen = [];
            if (getCookie("notif_push_topics") === "") {
                $seen = [$topic_id];
                setCookie("notif_push_topics", JSON.stringify($seen), 30);
                if (config.debug === true) {
                    console.log("[DEBUG] The cookie \"notif_push_topics\" has been created");
                    console.log($seen);
                }
            } else {
                if ($.inArray($topic_id, JSON.parse(getCookie("notif_push_topics"))) === -1) {
                    setCookie("notif_push_topics", JSON.stringify(JSON.parse(getCookie("notif_push_topics")).concat($topic_id)), 30);
                    if (config.debug === true) {
                        console.log("[DEBUG] The cookie \"notif_push_topics\" has been updated");
                        console.log(JSON.parse(getCookie("notif_push_topics")));
                    }
                } else {
                    if (config.debug === true) {
                        console.log("[DEBUG] The cookie \"notif_push_topics\" is already the value " + $topic_id);
                        console.log(JSON.parse(getCookie("notif_push_topics")));
                    }
                }
            }
        }

        function requestPermissions() {
           
            if (getCookie("notif_allow") === "false") return;
           
            $("head").append('<style>.mondal_notif{position:fixed;top:' + config.margin_top + 'px;margin:0 auto;width:100%;}.mondal_notif > .container_notif{width:600px;background:#fff;box-shadow:0 0 20px rgba(0,0,0,0.3);padding:10px;text-align:center;margin:0 auto;border:1px solid #d7d7d7;margin-top:-1px}.mondal_notif > .container_notif p{font-size:16px}.mondal_notif [name="allow"],.mondal_notif [name="notallow"]{background:#39c;padding:10px;cursor:pointer;margin-right:20px;border:0;color:#fff;font-weight:400;text-transform:uppercase}.mondal_notif [name="notallow"]{background:#adadad}</style');
           
            $("body").append('  <div class="mondal_notif">' +
                                    '<div class="container_notif">' +
                                        '<p>' + $lang.request_permission.replace("%s", config.forum_name) + '</p>' +
                                        '<div class="buttons_notif">' +
                                            '<button name="allow" class="allownotif">' + $lang.allow + '</button>' +
                                            '<button name="notallow"  class="notallownotif">' + $lang.notallow + '</button>' +
                                        '</div>' +
                                    '</div>' +
                                '</div>');
                               
            $('.allownotif').on( "click", function() {
                setCookie("notif_allow", true, 7);
                Notification.requestPermission();
                $(".mondal_notif").hide();
            });
       
            $('.notallownotif').on( "click", function() {
                setCookie("notif_allow", false, 7);
                $(".mondal_notif").hide();
            });                     
                               
        }

        function reloadData() {
            for (var x = 0; x < config.forums.length; x++) {
                $id = config.forums[x];
                $.get("/feed/?f=" + $id).done(function(data) {
                    $id = config.forums[x];
                    $object = [];
                    $xml = $(data);
                    if (getCookie("notif_push_topics") === "" || getCookie("notif_push_topics") === null) {
                        setCookie("notif_push_topics", JSON.stringify([]), 30);
                    }
                    for (var i = 0; i < $xml.find("item").length; i++) {
                        if (checkDate(new Date(new Date().getTime() + -1 * 24 * 60 * 60 * 1000), $xml.find("item").find("pubDate")[i].textContent, $xml.find("item").find("pubDate")[i].textContent) && JSON.parse(getCookie("notif_push_topics")).indexOf($xml.find("item").find("link")[i].textContent.replace(/[^0-9]+/g, "")) === -1) {
                            $object.push({
                                topic_id: $xml.find("item").find("link")[i].textContent.replace(/[^0-9]+/g, ""),
                                topic_title: $xml.find("item").find("title")[i].textContent,
                                topic_date: $xml.find("item").find("pubDate")[i].textContent,
                                topic_link: $xml.find("item").find("link")[i].textContent,
                                forum_id: $xml.find("image").find("link").text().replace(/[^0-9]+/g, ""),
                                comment_id: $xml.find("item").find("comments")[i].textContent.replace(/[^0-9]+/g, ""),
                                forum_name: $xml.find("image").find("title").text()
                            });
                        }
                    }
                    if (!isEmpty($object)) {
                        $cookie_name = "notif_push_forum_" + $xml.find("image").find("link").text().replace(/[^0-9]+/g, "");
                        if (getCookie($cookie_name) === "" || getCookie($cookie_name) !== JSON.stringify($object)) {
                            if (config.debug === true) {
                                console.log("[DEBUG] The cookie \"" + $cookie_name + "\" has been saved/updated");
                                console.log($object);
                            }
                            setCookie($cookie_name, JSON.stringify($object), 30);
                        }
                    }
                });
            }
        }

        function shuffle(array) {
            var currentIndex = array.length,
                temporaryValue, randomIndex;
            while (0 !== currentIndex) {
                randomIndex = Math.floor(Math.random() * currentIndex);
                currentIndex -= 1;
                temporaryValue = array[currentIndex];
                array[currentIndex] = array[randomIndex];
                array[randomIndex] = temporaryValue;
            }
            return array;
        }

        function checkDate(from, to, check) {
            var fDate = Date.parse(from),
                lDate = Date.parse(to),
                cDate = Date.parse(check);
            if ((cDate <= lDate && cDate >= fDate)) {
                return true;
            }
            return false;
        }

        function isEmpty(obj) {
            for (var key in obj) {
                if (obj.hasOwnProperty(key))
                    return false;
            }
            return true;
        }


        function setCookie(cname, cvalue, exdays, exmins) {
            var d = new Date();
            if(exdays === "") {
                d.setTime(d.getTime() + (exmins * 60 * 1000));
            } else {
                d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            }
            var expires = "expires=" + d.toGMTString();
            document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
        }

        function getCookie(cname) {
            var name = cname + "=";
            var decodedCookie = decodeURIComponent(document.cookie);
            var ca = decodedCookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) === ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) === 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        }

        setTimeout(function() {
            reloadData();
            sentNotif();
        }, (config.recheck * 1000));


        window.onload = function() {
            reloadData();
            sentNotif();
        };

    });


In variabila config exista alte variabile care permit personalizarea

  • forum_name - numele forumului
  • forum_icon - icon-ul de afisat in notificare
  • recheck - interval de timp in secunde pentru reverificarea notificarilor.
  • debug - mod dezvoltator (permite true sau
  • false)
  • lang - limba prestabilita (valori disponibile: eng sau
  • ro)
  • margin_top - distanta in pixeli a pop-up-ului fata de antent
  • limit - limita de notificari de afisat in decurs de 24 ore
  • forums - ID-urile forumurilor dorite


Ultima editare efectuata de catre Zeus in Mier Iul 26, 2017 10:41 pm, editata de 1 ori
Zeus

Zeus
Membru onorific
Membru onorific

Mesaje : 4160
Varsta : 27
Localizare : Bucuresti, Romania
Data înscrierii : 19/02/2012
Mulțumiri : 644
Google Chrome phpBB3

https://github.com/zeusmaximus
Zeus a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Ionut_FG Mar Mai 16, 2017 6:43 pm

Foarte frumos, am crezut că s-a actualizat brownser-ul de îmi apărea acea notificare. clap
avatar

Ionut_FG
Membru activ

Mesaje : 777
Varsta : 26
Data înscrierii : 01/11/2015
Mulțumiri : 123
Google Chrome Invision

http://invisionpower.rpgwars.net/
Ionut_FG a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Mihai Mar Mai 16, 2017 8:32 pm

am mai văzut site-uri, în care eu am probleme cu pc-ul (uneori), și când dau să caut, îmi apar și notificările, uneorii și informații din IT, apar și notificările acolo... good job!


Forumul Forumurilor

Regulile Forumgratuit | Tutoriale |
FAQ | Recuperarea parolei pentru forum și unelte



*** Forumul de suport nu vă va solicita niciodată adresa de e-mail sau parola, așa că vă rugăm să nu le postați nicăieri! ***
Nu ofer suport prin PM!
Mihai

Mihai
Administrator
Administrator

Mesaje : 1580
Varsta : 26
Localizare : București, România
Data înscrierii : 25/09/2014
Mulțumiri : 103
Google Chrome Notificari in browser Be_110

http://fgsuport.forumgratuit.ro
Mihai a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Nocti Mar Mai 16, 2017 8:55 pm

Thanks. Da
Nocti

Nocti
Membru Forumgratuit

Mesaje : 238
Varsta : 24
Data înscrierii : 04/06/2014
Mulțumiri : 3
Internet Explorer phpBB3

http://www.infinigame.biz/
Nocti a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de mr.franta Mar Mai 16, 2017 8:59 pm

Foarte reusit,este un topbar pe invizibil sa spun asa.Imi place mult!
mr.franta

mr.franta
Membru onorific
Membru onorific

Mesaje : 1403
Varsta : 36
Localizare : Giurgiu
Data înscrierii : 18/02/2012
Mulțumiri : 130
Google Chrome AwesomeBB

https://frannnta-design.forumgratuit.ro/
mr.franta a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Petronel Mar Mai 16, 2017 9:41 pm

O sa implemented ai eu codul asta ! Multumim mult!
Petronel

Petronel
Membru onorific
Membru onorific

Mesaje : 1046
Varsta : 22
Localizare : Constanţa & Calarasi
Data înscrierii : 21/05/2016
Mulțumiri : 113
Google Chrome AwesomeBB

https://www.fgdesign.biz/
Petronel a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Atracción Mier Mai 17, 2017 11:07 am

Arata super bine ! L-am testat pe forumul personal si functioneaza perfect.
Atracción

Atracción
Membru onorific
Membru onorific

Mesaje : 1839
Varsta : 26
Data înscrierii : 19/11/2012
Mulțumiri : 11
Internet Explorer phpBB3

https://help.forumgratuit.ro/forum
Atracción a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de SSYT Dum Mai 21, 2017 10:22 pm

Un cod superb, foarte frumos @Zeus. Un astfel de cod ofera puțină culoare unui forum.
SSYT

SSYT
Membru onorific
Membru onorific

Mesaje : 1424
Varsta : 30
Localizare : Romania, localhost:80
Data înscrierii : 10/08/2015
Mulțumiri : 199
Opera phpBB3

https://help.forumgratuit.ro
SSYT a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Dan Ţeca Mier Iun 14, 2017 12:48 pm

Zeus a scris:Personalizarea notificarilor din cod:

var forums = [6, 4, 5, 16];

Inlocuiti sirul de numere din acea linie cu ID-urile sectiuniilor dorite.
Cred că nu am înţeles - ce înseamnă ID-ul unei secţiuni? Este vorba de numărul acela din adresa web a forumului cu "f" în faţă sau nr. cu "c" (de la categorie)? Sau e cu totul altceva? Unde-l găsesc?
Dan Ţeca

Dan Ţeca
Membru nou

Mesaje : 5
Varsta : 57
Data înscrierii : 08/03/2017
Mulțumiri : 0
Internet Explorer phpBB3

http://non-partid.forumgratuit.ro
Dan Ţeca a fost mulțumit de autorul acestui subiect.
  • 0

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Zachary Joi Iun 15, 2017 3:39 pm

Dan Ţeca a scris:
Zeus a scris:Personalizarea notificarilor din cod:

var forums = [6, 4, 5, 16];

Inlocuiti sirul de numere din acea linie cu ID-urile sectiuniilor dorite.
Cred că nu am înţeles - ce înseamnă ID-ul unei secţiuni? Este vorba de numărul acela din adresa web a forumului cu "f" în faţă sau nr. cu "c" (de la categorie)? Sau e cu totul altceva? Unde-l găsesc?

"Este vorba de numărul acela din adresa web a forumului cu "f" în faţă sau nr. cu "c" (de la categorie)?" -> răspunsul este cel îngroșat. Fericit
Zachary

Zachary
Membru onorific
Membru onorific

Mesaje : 2394
Localizare : România
Data înscrierii : 08/05/2013
Mulțumiri : 196
Google Chrome phpBB3

https://www.forumgratuit.ro
Zachary a fost mulțumit de autorul acestui subiect.

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Dan Ţeca Lun Iun 19, 2017 5:12 pm

Zeus a scris:Codul este inca in faza de dezvoltare, in caz de functionare necorespunzatoare postati aici. A face cu ochiul
Din păcate nu funcţionează. Supărat
După ce l-am implementat, într-adevăr, site-ul m-a întrebat dacă accept notificări (şi am răspuns Allow), dar nu primesc nicio notificare de la secţiunile respective, deşi am personalizat corect la var forums
Şi cauza nu este de la Chrome-ul meu - notificările altor site-uri (Facebook etc.) merg bine.
Dan Ţeca

Dan Ţeca
Membru nou

Mesaje : 5
Varsta : 57
Data înscrierii : 08/03/2017
Mulțumiri : 0
Internet Explorer phpBB3

http://non-partid.forumgratuit.ro
Dan Ţeca a fost mulțumit de autorul acestui subiect.
  • 0

Notificari in browser Empty Re: Notificari in browser

Mesaj Scris de Zeus Mar Iun 20, 2017 1:10 pm

Intr-adevar exista o problema in cod care impiedica functionarea corespunzatoare.

Voi revizui codul si voi reveni cu edit.
Zeus

Zeus
Membru onorific
Membru onorific

Mesaje : 4160
Varsta : 27
Localizare : Bucuresti, Romania
Data înscrierii : 19/02/2012
Mulțumiri : 644
Google Chrome phpBB3

https://github.com/zeusmaximus
Zeus a fost mulțumit de autorul acestui subiect.

Pagina 1 din 2 1, 2  Urmatorul

Vezi subiectul anterior Vezi subiectul urmator Sus

- Subiecte similare

Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum