Mengecek Adanya Komentar Akhir Pada Komentar Induk - Dewa Blogger

Halaman

    Social Items

Buy Now

Mengecek Adanya Komentar Akhir Pada Komentar Induk

Mengingat kembali wacana bagaimana kita membedakan antara komentar induk dengan komentar jawaban pada Blogger sanggup kita lakukan dengan cara mengecek adanya properti var.inReplyTo pada item komentar yang dimaksud. Properti ini bertugas untuk menyimpan ID komentar induk:

<b:loop values='data:post.comments' var='comment'>   <b:if cond='data:comment.inReplyTo'>     <!-- `data:comment` yakni komentar jawaban -->   <b:else/>     <!-- `data:comment` yakni komentar induk -->   </b:if> </b:loop>

Dari sini kita sanggup melaksanakan iterasi ulang di dalam iterasi komentar induk, dan kemudian menyaring belum dewasa komentar yang mempunyai nilai properti var.inReplyTo (dalam hal ini yakni reply.inReplyTo) yang sama dengan parent.id (dalam hal ini yakni comment.id):

<b:loop values='data:post.comments' var='comment'>   <b:if cond='!data:comment.inReplyTo'>     <b:loop values='data:post.comments' var='reply'>       <b:if cond='data:reply.inReplyTo == data:comment.id'>         <!-- komentar jawaban untuk `data:comment` akan tersedia di sini sebagai `data:reply` -->       </b:if>     </b:loop>   </b:if> </b:loop>

Ekspresi lambda (fungsi anonim) pada Blogger memungkinkan kita untuk melaksanakan penyaringan komentar-komentar jawaban terhadap ID komentar induk dengan cara yang lebih cepat ibarat ini, sebab penyaringan data komentar sanggup dilakukan sebelum proses iterasi dilakukan:

<b:loop values='data:post.comments' var='comment'>   <b:if cond='!data:comment.inReplyTo'>     <b:loop values='data:post.comments filter (i => i.inReplyTo == data:comment.id)' var='reply'>       <!-- komentar jawaban untuk `data:comment` akan tersedia di sini sebagai `data:reply` -->     </b:loop>   </b:if> </b:loop>

Ada satu metode yang menarik dalam fungsi anonim Blogger yaitu metode count. Metode ini memungkinkan kita untuk menghitung jumlah item yang ada sehabis proses bersyarat jawaban diterapkan pada koleksi data. Sebagai contoh, arahan di bawah ini akan menampilkan jumlah total komentar dengan nama penulis Taufik Nurrohman:

Jumlah komentar dari Taufik Nurrohman: <b:eval expr='data:post.comments count (i => i.author == "Taufik Nurrohman")'/>

Dalam bahasa pemrograman, kita sanggup melaksanakan sesuatu ibarat ini untuk menghitung jumlah komentar dari Taufik Nurrohman, yang mana ini tidak akan sanggup kita lakukan pada Blogger sebelum adanya fitur fungsi anonim:

let i = 0; post.comments.forEach(comment => {     if (comment.author == 'Taufik Nurrohman') {         ++i;     } });  console.log('Jumlah komentar dari Taufik Nurrohman: ' + i);

Metode count pada fungsi anonim akan lebih sesuai jikalau disamakan dengan metode filter dan properti length pada JavaScript ibarat ini:

let i = post.comments.filter(i => i.author == 'Taufik Nurrohman').length;  console.log('Jumlah komentar dari Taufik Nurrohman: ' + i);

Cara Mengecek Apakah Komentar Induk Memiliki Komentar Balasan atau Tidak

Sebuah komentar dari seorang pembaca berjulukan Satank Mkr pada artikel Membuat Fitur Komentar Berbalas (Threaded Comments) pada Blogger dengan Fungsional yang Asli kurang lebih menanyakan wacana bagaimana caranya menambahkan elemen pembungkus khusus yang akan melingkupi seluruh komentar balasan, sehingga jikalau terdapat setidaknya satu buah komentar jawaban di bawah komentar induk, maka komentar-komentar jawaban tersebut akan dibungkus dengan elemen HTML tertentu. Berikut yakni ilustrasi yang dia maksudkan:

<b:if cond='data:post.numberOfComments > 0'>   <ul class='comments'>     <b:loop values='data:post.comments' var='comment'>       <li class='comment'> … </li>     </b:loop>   </ul> </b:if>
<ul class="comments">   <li class="comment"> … </li>   <li class="comment"> … </li>   <li class="comment"> … </li> </ul>

Melihat pada referensi di atas, akan sangat gampang untuk menambahkan elemen pembungkus <ul class="comments"> sebab Blogger mempunyai properti numberOfComments pada data:post yang bertugas untuk menyimpan jumlah keseluruhan komentar yang ada. Akan tetapi, kita tidak mempunyai properti khusus untuk menghitung jumlah komentar jawaban melalui data:comment, sehingga untuk memilih apakah sebuah komentar induk mempunyai komentar jawaban atau tidak akan tidak mungkin tanpa adanya properti khusus; katakanlah var.numReplies ibarat ini:

<b:if cond='data:post.numberOfComments > 0'>   <ul class='comments'>     <b:loop values='data:post.comments' var='comment'>       <li class='comment'> … </li>         <b:if cond='data:comment.numReplies > 0'>           <ul class='comment-replies'>             <b:loop values='data:post.comments filter (i => i.inReplyTo == data:comment.id)' var='reply'>               <li class='reply'> … </li>             </b:loop>           </ul>       </b:if>     </b:loop>   </ul> </b:if>
<ul class="comments">   <li class="comment"> … </li>   <li class="comment"> … </li>   <li class="comment">     …     <ul class='comment-replies'>       <li class='reply'> … </li>       <li class='reply'> … </li>     </ul>   </li>   <li class="comment"> … </li> </ul>

Metode count tiba menyelamatkan! Karena metode ini bisa menghitung jumlah komentar yang ada sehabis proses bersyarat diterapkan pada data komentar, maka kita sanggup menghitung jumlah komentar jawaban terkait dengan komentar induk dengan cara ibarat ini:

<b:with var='numReplies' value='data:post.comments count (i => i.inReplyTo == data:comment.id)'>   Jumlah komentar balasan: <data:numReplies/> </b:with>

Untuk menerapkannya sebagai lisan kondisional di dalam iterasi komentar, kita bisa menuliskannya ibarat ini:

<b:if cond='data:post.numberOfComments > 0'>   <ul class='comments'>     <b:loop values='data:post.comments' var='comment'>       <li class='comment'> … </li>         <b:with var='numReplies' value='data:post.comments count (i => i.inReplyTo == data:comment.id)'>           <b:if cond='data:numReplies > 0'>             <ul class='comment-replies'>               <b:loop values='data:post.comments filter (i => i.inReplyTo == data:comment.id)' var='reply'>                 <li class='reply'> … </li>               </b:loop>             </ul>           </b:if>         </b:with>       </b:if>     </b:loop>   </ul> </b:if>

Atau ibarat ini juga bisa:

<b:if cond='data:post.numberOfComments > 0'>   <ul class='comments'>     <b:loop values='data:post.comments' var='comment'>       <li class='comment'> … </li>         <b:with var='replies' value='data:post.comments filter (i => i.inReplyTo == data:comment.id)'>           <b:if cond='data:replies.size > 0'>             <ul class='comment-replies'>               <b:loop values='data:replies' var='reply'>                 <li class='reply'> … </li>               </b:loop>             </ul>           </b:if>         </b:with>       </b:if>     </b:loop>   </ul> </b:if>

Sumber https://www.dte.web.id/