• 16-04-2021, 19:13:48
    #1
    Merhabalar r10 üyeleri konu başlığındaki gibi jQuery'de problem yaşıyorum. Problemim söyle bir beğeni sistemi kodluyorum kodlarken de fa fa-healht ikonları yerine svg ikon tercih ettim ondan dolayı da tıkladığım zaman ikon simgesi değişmiyor aşağıdaki gibi problem ektedir.



    Yukardaki gibi beğendiğim halde böyle kalıyor normalde başka tanımladığım kalp kısması lazım onu görebilmek için ana sayfamı yenilemek zorunda kalıyorum her seferin de beğendiğim zaman böyle ikon olması lazım.



    Yukardaki gibi beğendiğim zaman böyle gözükmesi lazım fakat 1 görüntüdeki gibi oluyor nedense sayfayı yenilemediğim zaman nerde hata yapıyorum acaba kimler yardımcı olabilir acaba ?, Dün geceden beri kafayı yemek üzeriyim, kodlarımın fotoğraflarını buraya bırakıyorum hatam nerede acaba çünkü ben baktığım da hata gibi gözükmüyor veya ben gözden kaçırıyorum.

    Beğeni ikonların bulunduğu kod kısmı svg olarak tanımlama yaptım. ondan sonra javascript ile tanımlama yaptım bunlara göre fakat gene bir türlü çalışmadı her türlü deneme yaptım fakat bir türlü svg ikonlar değişmiyor nedense... Çözüm bulana veya yardımcı olmak isteyenler yorumlara yazabilirler her türlü konuya ve yorumlara açığım ücretli veya ücretsiz yardımcı olmak isteyenlerde yazabilirler çünkü sistem bir an önce aktif etmek istiyorum...

        private function createLikeButton($postId,$postedBy,$user_id){
    
            $text  = $this->tweet->getLikes($postId);
            $class = "like-btn";
            $imageSrc = '<svg class="fa-heart-o" xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24"><g><path d="M12 21.638h-.014C9.403 21.59 1.95 14.856 1.95 8.478c0-3.064 2.525-5.754 5.403-5.754 2.29 0 3.83 1.58 4.646 2.73.814-1.148 2.354-2.73 4.645-2.73 2.88 0 5.404 2.69 5.404 5.755 0 6.376-7.454 13.11-10.037 13.157H12zM7.354 4.225c-2.08 0-3.903 1.988-3.903 4.255 0 5.74 7.034 11.596 8.55 11.658 1.518-.062 8.55-5.917 8.55-11.658 0-2.267-1.823-4.255-3.903-4.255-2.528 0-3.94 2.936-3.952 2.965-.23.562-1.156.562-1.387 0-.014-.03-1.425-2.965-3.954-2.965z"></path></g></svg>';
            $action = "likeTweet(this,$postId,$user_id,$postedBy)";
    
            if($this->tweet->wasLikedBy($user_id,$postId)){
                $imageSrc = '<svg class="fa-heart" xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 24 24"><g><path d="M12 21.638h-.014C9.403 21.59 1.95 14.856 1.95 8.478c0-3.064 2.525-5.754 5.403-5.754 2.29 0 3.83 1.58 4.646 2.73.814-1.148 2.354-2.73 4.645-2.73 2.88 0 5.404 2.69 5.404 5.755 0 6.376-7.454 13.11-10.037 13.157H12z"></path></g></svg>';
            }
    
            return '<div class="postButtonContainer">
                    '.ButtonProvider::createLikeTweetButton($text,$imageSrc,$class,$action,$postId,$postedBy,$user_id).'
                  </div>';
        }
    &nbsp;

    Beğeni ikonların bulunduğu javascript kısmı yani jQuery kısmı. ilk önce post ile liketweet.php yolluyorum sonra veriyi bana geri veriyor ondan sonra svg ikonları değiştiriyor fakat anasayfa düşmüyor yenilemediğim zaman nerede hata yapmış olabilirim acaba ?

    function likeTweet(button,postId,likedBy,postedBy){
        $.post("likeTweet.php",{tweetID:postId,likedBy:likedBy,likeOn:postedBy},function(data){
          let likeButton=$(button);
          likeButton.addClass("like-active");
          let result=JSON.parse(data);
          updateLikesValue(likeButton.find(".likesCounter"),result.likes);
    
          if(result.likes <0){
              likeButton.removeClass("like-active");
              likeButton.find(".fa-heart").addClass("fa-heart-o");
              likeButton.find(".fa-heart-o").removeClass("fa-heart");
          }else{
            likeButton.addClass("like-active");
            likeButton.find(".fa-heart-o").addClass("fa-heart");
            likeButton.find(".fa-heart").removeClass("fa-heart-o");
          }
        });
    }
    
    function updateLikesValue(element,num){
        let likesCountVal=element.text() || "0";
        element.text(parseInt(likesCountVal) + parseInt(num));
    }
  • 16-04-2021, 19:27:42
    #2
    Hocam yanlış anladıysam düzelt ama, bir svg yi "class" değiştirerek iki farklı svg miş gibi davranmasını bekleyemezsin.

    Nasıl ki, backend de (Yani PHP de) sorgu yapıp ($this->tweet->wasLikedBy($user_id,$postId) ) svg leri fiziksel olarak değiştiriyorsan, JS de de aynısını yapmalısın. Class değiştirmek işe yaramaz.

    Bana kalırsa bununla uğraşma.

    Her iki SVG yi de (PHP de bas) sorguya göre birine (.display-none) at. JS de de display-none classlarını iki SVG arasında yer değiştir.
  • 16-04-2021, 20:02:48
    #3
    Prototype adlı üyeden alıntı: mesajı görüntüle
    Hocam yanlış anladıysam düzelt ama, bir svg yi "class" değiştirerek iki farklı svg miş gibi davranmasını bekleyemezsin.

    Nasıl ki, backend de (Yani PHP de) sorgu yapıp ($this->tweet->wasLikedBy($user_id,$postId) ) svg leri fiziksel olarak değiştiriyorsan, JS de de aynısını yapmalısın. Class değiştirmek işe yaramaz.

    Bana kalırsa bununla uğraşma.

    Her iki SVG yi de (PHP de bas) sorguya göre birine (.display-none) at. JS de de display-none classlarını iki SVG arasında yer değiştir.
    Tabi öyle class için deneme olarak yaptım fakat beceremedim zaten benim amacım her iki emojiyi javascript tanıttırmak php yapmak için tüm iş modelini değiştirmem gerekiyor zaten bu işlem için değiştirmek istemiyorum. svgyi javascript değiştirme kodu veya davranma gibi kod olsa harika olacak mesela twitter'da örnek verirsem onda aynı şekilde kalp tıkladığı zaman kalp oluyor geri aldığında 1 resim gibi görüntü sunuyor sana onlar nasıl yapmış kaynak vs. bulsam yapacağım da bir türlü kaynak bulamadım kimse de svg addclass yapmamışlar hep divle veya fa fa-healht iconları üstünde bahsetmişler.
  • 16-04-2021, 21:12:00
    #5
    Teşekkürler hocam bunlara göz atayım hemen yardımcı olduğunuz için de teşekkür ederim. bu svglerin arka plan veya içi boş dolu yapma imkanımız var mı veya öyle şeyler oluyor mu ?
  • 16-04-2021, 21:18:57
    #6
    Tabii, stroke yerine fill verirsen içi dolu olur, fill yerine stroke verirsen outline olur.

    https://codepen.io/ionurboz/pen/xxgJwQg

    Bak burada bir kopyasının içi boş olanını yaptım. Daha da geliştirerek hoş bir görüntü elde edebilirsin.
  • 19-04-2021, 00:46:45
    #7
    Prototype adlı üyeden alıntı: mesajı görüntüle
    Tabii, stroke yerine fill verirsen içi dolu olur, fill yerine stroke verirsen outline olur.

    https://codepen.io/ionurboz/pen/xxgJwQg

    Bak burada bir kopyasının içi boş olanını yaptım. Daha da geliştirerek hoş bir görüntü elde edebilirsin.
    Teşekkür ederim hocam dediğiniz gibi yaptım harika oldu bide özelleştirme yaptım fıstık gibi oldu sistem, yardım ettiğiniz için teşekkür ederim.