ProjeXCode Forum: Membuat Like Button Configuration Firebase + LocalStorage

Title Role Staff

Title Role Senior Member

Title Role Member

Title Role Junior Member

Title Role New Member

Title Badge Moderator

Title Color Moderator

Title Badge Staff

Title Color Staff

Title Badge Member

Title Color Member

Status Info

Status Verified

ADS Title User

Your Time :

Server Time :

  • Membuat Like Button Configuration Firebase + LocalStorage
    March 16, 2022
    Share this Threads
    Close
    Request dari YZG

    Demo bisa kalian cek di post/comment forum ini.

    disini ada 2 category yg mau ku kasih dan sebelumnya saya minta maaf kalo tampilan btn nya biasa aja.karena saya malas buat style2 begini karena setiap theme structurenya beda jadi saya menghindari hal ini :D.

    Untuk Style sama semua yg beda ada dipemanggil dan JSnya.

    Style:
    /* Like */
    #footer-article{display: flex;justify-content: space-between;align-items: center;margin-top: 12px;}
    .like{display: flex;align-items: center;cursor: pointer;}
    .like svg{width: 36px;height: 36px;stroke: #4f4d4d;fill: #4f4d4d;}
    .liked svg{fill:red !important;stroke:red !important;}


    Pasang diatas </head>:

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


    Category 1 (Hanya untuk Post):

    Markup Button HTML :
    <div class='btn-likes'>
    <div class='like' expr:data-id='data:post.id'><svg class='icon icon-tabler icon-tabler-heart' fill='none' height='44' stroke='#2c3e50' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24' width='44' xmlns='http://www.w3.org/2000/svg'><path d='M0 0h24v24H0z' fill='none' stroke='none'></path><path d='M19.5 13.572l-7.5 7.428l-7.5 -7.428m0 0a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572'></path></svg></div>
    <div class='text'><i></i><span></span></div>
    </div>


    Script.js :
    function UID(){
    var resnumb = '';
    var numbres = '1234567890';
    var numbreslength = numbres.length;
    for ( var i = 0; i < 12; i++ ) {
    resnumb += numbres.charAt(Math.floor(Math.random() * 
     numbreslength));
     }
     return resnumb;
    }
    var setUID =(function(){
    set=[];
    
    function Item(id){
    	this.key = id;
    }
    
    function setBookmark(){
    	localStorage.setItem('UID', JSON.stringify(set));
    }
    
    function loadBookmark() {
        set = JSON.parse(localStorage.getItem('UID'));
    }
    
    if (localStorage.getItem("UID") != null) {
        loadBookmark();
    }
    
    obj = {};
    
    obj.pushUID = function(id) {
        var item = new Item(id),
        itemList = set;
        if(itemList != null){
        same = itemList.find(item =>{return item.key == id;});
        if(set.length<1){
         if(!same){
        	set.push(item);
        	setBookmark();
          }
         }
        }else{
        	set.push(item);
        	setBookmark();
        }
    } 
      return obj;
    })();
    setUID.pushUID(UID());
    
    $.each($('.like'),function(){
    const data = $(this).data('id'),
    getUID = JSON.parse(localStorage.getItem('UID')),
    urlFirebase = 'https://pxclikes-default-rtdb.firebaseio.com/';
    
    for(var item in getUID){
    var match = getUID[item].key;
    }
    
    const firebase = new Firebase(urlFirebase + 'like/' +data+'/'+match);
    function it(){
    fetch(urlFirebase + 'like/' +data+'.json')
    .then(res => res.json())
    .then(res =>{
    let num = 0;
    var text;
    for(var item in res){
    if(res[item] != null){
    num += res[item].value;
    if(res[item].key == match){
    $('.like').addClass('liked');
    }
    }
    }
    $('.btn-likes .text i').html(num>0 ? num : '');
    $('.btn-likes .text span').html(num>0 ? ' Likes' : '');
    })
    .catch(e => console.log(e));
    };
    it();
    
      $(this).click(function(){
      if(!$('.like').hasClass('liked')){
    	  	firebase.once('value',function(e){
      		let obj = e.val(),
            g=!1;
            null==obj&&(obj={},obj.title=document.title,obj.url=location.protocol + '//' + location.hostname + location.pathname,obj.value=1,obj.key=match,g=!0),
            it(),
            "/"!=window.location.pathname&&(g&&firebase.set(obj))
      		});
            }else{
            firebase.once('value',function(e){
            $('.like').removeClass('liked'),
            it(),(firebase.remove())
            });
            }
      });
    });



    Category 2 (Dipasang untuk Post dan Comment Seperti Forum Ini):

    Markup Button Post :
    <div class='btn-likes'>
    <div class='like' expr:data-id='data:post.id'><svg class='icon icon-tabler icon-tabler-heart' fill='none' height='44' stroke='#2c3e50' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24' width='44' xmlns='http://www.w3.org/2000/svg'><path d='M0 0h24v24H0z' fill='none' stroke='none'></path><path d='M19.5 13.572l-7.5 7.428l-7.5 -7.428m0 0a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572'></path></svg></div>
    <div class='text' expr:data-id='data:post.id'><i></i><span></span></div>
    </div>

    Markup Button Comment :
    <div class='btn-likes'>
    <div class='like' expr:data-id='data:comment.id'><svg class='icon icon-tabler icon-tabler-heart' fill='none' height='44' stroke='#2c3e50' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24' width='44' xmlns='http://www.w3.org/2000/svg'><path d='M0 0h24v24H0z' fill='none' stroke='none'></path><path d='M19.5 13.572l-7.5 7.428l-7.5 -7.428m0 0a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572'></path></svg></div>
    <div class='text' expr:data-id='data:comment.id'><i></i><span></span></div>
    </div>


    Script.js :
    function UID(){
    var resnumb = '';
    var numbres = '1234567890';
    var numbreslength = numbres.length;
    for ( var i = 0; i < 12; i++ ) {
    resnumb += numbres.charAt(Math.floor(Math.random() * 
     numbreslength));
     }
     return resnumb;
    }
    var setUID =(function(){
    set=[];
    
    function Item(id){
    	this.key = id;
    }
    
    function setBookmark(){
    	localStorage.setItem('UID', JSON.stringify(set));
    }
    
    function loadBookmark() {
        set = JSON.parse(localStorage.getItem('UID'));
    }
    
    if (localStorage.getItem("UID") != null) {
        loadBookmark();
    }
    
    obj = {};
    
    obj.pushUID = function(id) {
        var item = new Item(id),
        itemList = set;
        if(itemList != null){
        same = itemList.find(item =>{return item.key == id;});
        if(set.length<1){
         if(!same){
        	set.push(item);
        	setBookmark();
          }
         }
        }else{
        	set.push(item);
        	setBookmark();
        }
    } 
      return obj;
    })();
    setUID.pushUID(UID());
    
    $.each($('.like'),function(){
    const data = $(this).data('id'),
    getUID = JSON.parse(localStorage.getItem('UID')),
    urlFirebase = 'https://pxclikes-default-rtdb.firebaseio.com/';
    
    for(var item in getUID){
    var match = getUID[item].key;
    }
    
    const firebase = new Firebase(urlFirebase + 'like/' +data+'/'+match);
    
    function it(){
    fetch(urlFirebase + 'like/' +data+'.json')
    .then(res => res.json())
    .then(res =>{
    let num = 0;
    var text;
    for(var item in res){
    if(res != null){
    num += res[item].value;
    if(res[item].key == match){
    $('.like[data-id=' + res[item].btn + ']').addClass('liked');
    }
    }
    $('.text[data-id=' + res[item].btn + '] i').html(num&&num);
    $('.text[data-id=' + res[item].btn + '] span').text(num&&' Likes');
    }
    if(res == null){
    $('.text[data-id=' + data + '] i').html('');
    $('.text[data-id=' + data + '] span').text('');
    }
    })
    .catch(e => console.log(e));
    };
    it();
    
      $(this).click(function(){
      if(!$('.like[data-id=' + data + ']').hasClass('liked')){
    	  	firebase.once('value',function(e){
      		let obj = e.val(),
            g=!1;
            null==obj&&(obj={},obj.title=document.title,obj.url=location.protocol + '//' + location.hostname + location.pathname,obj.value=1,obj.key=match,obj.btn=data,g=!0),
            it(),
            "/"!=window.location.pathname&&(g&&firebase.set(obj))
      		});
            }else{
            firebase.once('value',function(e){
            $('.like[data-id=' + data + ']').removeClass('liked'),
            it(),(firebase.remove())
            });
            }
      });
    });


    Catatan :
    - Gunakan Jquery Library.jika belum ada pasang jquery library bawah ini diatas </head>
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js'></script>
    - Script ini Menggunakan LocalStorage Untuk Membuat Fake UID. untuk match Condition apabila sudah melakukan Like.
    - ya karena menggunakan LocalStorage 1 Browser 1 Like.dan apabila hapus cache Like tidak akan dihapus karena bakal generate UID baru.
    - Untuk Post Letakkan kedalam Markup yang mengandung value data:posts dan untuk Comment juga sama yg terdapat value data:comments nah untuk var sesuaikan sendiri dengan yg ada di structure markup value kalian.
    - Ubah URL Firebase Seperti dibawah ini dengan firebase kalian. tidak dihapus juga gpp.kalo merasa privacy ganti aja.
    https://pxclikes-default-rtdb.firebaseio.com/
    Last edited : March 17, 2022
    Wed Mar 16, 10:46:00 PM GMT+9
    Aihh mantapppp om, ntar mlm langsung coba. terima kasih banyak. 🙏
    Wed Mar 16, 11:02:00 PM GMT+9
    loh?, anjay, baru tau blogger bisa dipasangin kek ginian :v, kirain wp doang yg bisa karena harus buat db pake mySql atau apalah gak tau wkwk
    Wed Mar 16, 11:09:00 PM GMT+9
    kalo ini mah admin nya kelewatan pro buset
    Thu Mar 17, 12:20:00 AM GMT+9
    lapor om admin di saya tombol muncul tapi di klik tidak ada reaksi.
    https://ctdclean.blogspot.com/2018/11/how-to-convenience-foods-to-meet-our.html

    saya sudah coba ganti pakai firebase sendiri tetep ga bisa, ini saya pakai firebase punya om admin lagi, apa yang mesti diperbaiki ya?
    Thu Mar 17, 12:58:00 AM GMT+9
    Sorry ada library yg ketinggalan.

    Pasang diatas </head>:
    <script src='https://cdn.firebase.com/js/client/2.3.2/firebase.js' type='text/javascript'></script>
    Thu Mar 17, 01:45:00 AM GMT+9
    mantap! worked om. thanks again.
    Thu Mar 17, 05:57:00 AM GMT+9
    yow sama²
    Thu Mar 17, 08:27:00 PM GMT+9
    mantap bang keren nih
    Thu Mar 17, 09:05:00 PM GMT+9
    kalo dibuat gini bisa gak?
    pengunjung harus klik like dulu biar bisa munculin download box
    Thu Mar 17, 09:27:00 PM GMT+9
    Bisa kamu setting aja, cuma ngatur condition aja itu
    Sun Apr 17, 11:29:00 PM GMT+9
    bang klo hall ini bisa ngga pake firebase nya yang post-view soalnya saya pake firebase tuh untuk post view .
    nah pertanyaan apa bisa firebase yg saya pakai dipakai discript ini?
    Mon Apr 18, 10:10:00 PM GMT+9
    bisa aja. gabakal ngeganggu post viewnya karena path database nya beda
    Fri Apr 22, 01:49:00 AM GMT+9
    bang kok ngga jalan yaa untuk data:comment.id nya yaa ?
    klo saya CTA (Click to action) cuman data:post.id doank yg bekerjanya ?

    need solution please
    check disini https://sim-stream.blogspot.com/2022/04/orchestra-part-ii_16.html?showComment=1650558875743#c7631333235461597771
    Fri Apr 22, 02:27:00 PM GMT+9
    letakkan dalam value data:comments jika diluar itu maka bakal Null nantinya.

    contoh value data:comments default theme :

    <b:loop values='data:comments' var='comment'>
    Fri Jun 03, 07:20:00 PM GMT+9
    bang kyknya ada sedikit glitch ya seperti kadang harus 2x klik/tap. bukan hal besar sih, ingin feedback aja setelah beberapa hari pakai. 🙏
    Fri Jun 03, 08:27:00 PM GMT+9
    YZG said: bang kyknya ada sedikit glitch ya seperti kadang harus 2x klik/tap. bukan hal besar sih, ingin feedback aja setelah beberapa hari pakai. 🙏
    indikasi yg diterima :
    - Jaringan (disaat mau ngirim ke database jaringan tidak mendukung)
    - Blocking Script (ini yang sering terjadi ada nya script yg error akan mempengaruhi script yg lainnya coba cek console log)
    - Script halaman yng belum termuat


    soalnya selama ini aman2 aja aku, kecuali kamu modifikasi scriptnya coba kamu perhatikan lagi
    Fri Jun 03, 09:50:00 PM GMT+9
    Kubao said: indikasi yg diterima :
    - Jaringan (disaat mau ngirim ke database jaringan tidak mendukung)
    - Blocking Script (ini yang sering terjadi ada nya script yg error akan mempengaruhi script yg lainnya coba cek console log)
    - Script halaman yng belum termuat


    soalnya selama ini aman2 aja aku, kecuali kamu modifikasi scriptnya coba kamu perhatikan lagi
    ia jg ya, memang sempet curiga di jaringan. siap bg. 😁
    Wed Jun 22, 05:41:00 PM GMT+9
    bg maaf request lg, bisa ga jumlah indikator lovenya tampil juga di halaman index? hanya nampilin jumlahnya aja ga perlu bisa di love. 🙏
    Wed Jun 22, 10:24:00 PM GMT+9
    YZG said: bg maaf request lg, bisa ga jumlah indikator lovenya tampil juga di halaman index? hanya nampilin jumlahnya aja ga perlu bisa di love. 🙏
    Extrack Data menggunakan Fetch :
    letakkan script di atas tag /head :
    const love_ = (id) => {
    fetch(Link_Firebase + '/like/' + id + '.json')
    .then(res => res.json())
    .then(res =>{
    let num = 0;
    for(let item in res){
    num += res[item].value;
    }
    document.getElementById(id).innerHTML = num;
    })
    .catch(e => console.log(e));
    };


    habis itu panggil script dengan cara ini :
    <div id='1186434082041833069'><script>love_('1186434082041833069')</script></div>

    jika bingung dalam blogger bisa gunain ini :
    <div expr:id='data:post.id'><script>love_(<data:post.id/>)</script></div>
    Thu Jun 23, 02:00:00 AM GMT+9
    thanks responnya bg, lapor bg hasilnya berupa tulisan seperti ini love_(4282561784970796608), https://cdmagz.blogspot.com
    Thu Jun 23, 03:27:00 AM GMT+9
    YZG said: thanks responnya bg, lapor bg hasilnya berupa tulisan seperti ini love_(4282561784970796608), https://cdmagz.blogspot.com
    kesalahan ada di url firebasenya salah input abangnya
    ubah jadi gini :
    'linkFirebase.com/like/' + id + '.json'

    Similar Threads