Page Views

Page Views

Mei 21, 2022
Page Views Img

Database menggunakan Firebasenya google yang nanti akan dipakai untuk menyimpan total pengunjung yang melihat halaman postingan. Untuk scriptnya ada 2 versi yang setelah dicoba keduanya work dengan sempurna. Namun saya lebih memilih untuk menggunakan script pertama.

Versi 1 :

1. Jquery

<script src='https://ajax.googleapis.com/ajax/libs/jquery/Versi_JQUERY/jquery.min.js'/>

2. Awesome Font (untuk spinner)

<link href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/VERSI_AWESOME/css/all.css' rel='stylesheet'/>

3. Firebase Client JS

<script src='//cdn.firebase.com/js/client/2.2.1/firebase.js' type='text/javascript'/>

4. Jquery Untuk Koneksi Firebase

<script>//<![CDATA[
(jQuery);$.each($(".post-view[data-id]"),function(c,f){var b=$(f).parent().find("#ViewZis").addClass("view-load"),d=new Firebase("https://USERFIREBASE.firebaseio.com/pages/id/"+$(f).attr("data-id"));d.once("value",function(e){var a=e.val(),g=!1;null==a&&(a={},a.value=0,a.url=window.location.href,a.id=$(f).attr("data-id"),g=!0),b.removeClass("view-load").text(a.value),a.value++,"/"!=window.location.pathname&&(g?d.set(a):d.child("value").set(a.value))})});
//]]></script>

5. HTML untuk menampilkan

<span class='post-view' expr:data-id='data:post.id'><span class='view-load' id='ViewZis'><i class='fas fa-spinner fa-pulse faa-fast'/></span> Views</span>

Versi 2 (Lazy Load):

1. Setting rules Firebase

{
    "rules": {
      ".read": true,
      "BlogID_0000000000000000000": {
        ".read": true,
        "$post_id": {
          ".write": "newData.exists() && (data.exists() ? newData.val() == data.val() + 1 : newData.val() == 1)",
          ".validate": "newData.isNumber() && newData.val() % 1 === 0.0 && newData.val() <= 99999999"
        }
      }
    }
}

2. Script koneksi firebase

<script>
    /*<![CDATA[*/
    const viewSeting = {
        blogID: '0000000000000000000',
        databaseUrl: 'databaseUrl',
        abbreviation: true,
        lazyload: true
    }
    function loadJs(e, b, c, d) {
        let a = document.createElement("script");
        b && (a.id = b), a.async = c, a.defer = c, a.src = e, d && (a.onload = d), document.getElementsByTagName("head")[0].appendChild(a)
    }
    function abvr(a) {
        var b = Math.sign(Number(a));
        return 1e9 <= Math.abs(Number(a)) ? b * (Math.abs(Number(a)) / 1e9).toFixed(2) + "B" : 1e6 <= Math.abs(Number(a)) ? b * (Math.abs(Number(a)) / 1e6).toFixed(2) + "M" : 1e3 <= Math.abs(Number(a)) ? b * (Math.abs(Number(a)) / 1e3).toFixed(2) + "K" : Math.abs(Number(a))
    }
    function loadPostVw() {
        for (var c = document.querySelectorAll(".View_Zis"), e = firebase.database(), a = 0; a < c.length; a++) {
            var d = c[a],
                b = d.getAttribute("data-id");
            (b = e.ref("BlogID_" + viewSeting.blogID + "/PostID_" + b)).once("value", function(a, b) {
                return function(c) {
                    0 < (c = c.exists() ? c.val() : 0) && (a.setAttribute("data-view", viewSeting.abbreviation ? abvr(c) : c), a.classList.remove("hidden")), "true" == a.getAttribute("data-add") && (a.setAttribute("data-add", !1), c = parseInt(c) + 1, b.set(c))
                }
            }(d, b))
        }
    }
    function postVw() {
        loadJs("https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js", "fb-app", !0, () => {
            loadJs("https://www.gstatic.com/firebasejs/8.10.1/firebase-database.js", "fb-db", !0, () => {
                var a = {};
                a.databaseURL = viewSeting.databaseUrl, firebase.initializeApp(a), loadPostVw()
            })
        })
    }
    if (!0 === viewSeting.lazyload) {
        var a = [],
            b = [];
        let c = () => {
            0 == a.length && null == localStorage.getItem("LZ_VIEW") && (localStorage.setItem("LZ_VIEW", 1), postVw())
        };
        window.addEventListener("scroll", a => {
            (0 != document.documentElement.scrollTop && 0 == b.length || 0 != document.body.scrollTop && 0 == b.length) && c()
        }, !0), document.getElementsByTagName("body")[0].addEventListener("click", a => {
            c()
        }), localStorage.getItem("LZ_VIEW") && postVw()
    } else postVw()
    /*]]>*/
</script>

Keterangan :

  • 0000000000000000000 : diganti dengan BLOG_ID
  • databaseURL : diganti dengan URL Firebase Realtime Database

3. HTML untuk menampilkan

<span class='View_Zis entry-views hidden' data-add='true' expr:data-id='data:post.id'/>

4. CSS Merapihkan tampilan

.entry-views{color:#000;font-size:14px;visibility:hidden;opacity:0;transition:all .2s ease}
.entry-views[data-view]{visibility:visible;opacity:1}
.entry-views::after{content:attr(data-view) ' views'}

Done.

Thanks to : vuinsider & NLD