Yorum Cevaplandırma
Merhaba arkadaşlar.
Bir makalemiz var.
Ona yorum yapılıyor. Ama yorum sisteminde kişiler, bir yorum altında bir birine cevap verebiliyor.
Aşağıdaki resimde olduğu gibi.
Şimdi bunu yapabilmem için şunlar olması gerekiyor.
makaleler tablosu
makale_id | makale_icerik
uyeler tablosu
uye_id | uye_adi
yorumlar tablosu
yorum_id | makale_id | uye_id | yorum_icerik
Şimdi takıldığım nokta şu.
Bir yorum altında kişileri nasıl birbirine cevap verdirebilirim.
Tablo yapısı nasıl olmalı?
İlk fonksiyonda eksik yazmışım gibi görünüyor.
Bu yüzden hiyerarşi düzgün oluşamamış.
else içindeki 'yorum_id' kısmını 'ust_yorum_id' olarak düzelttim:
$yorumlar = tumYorumlar($mak_id);
$duzenlenmisYorumlar = [];
foreach($yorumlar as $yorum) {
// Baktığımız yorumun üst yorumu yoksa, ana yorum olarak eklensin.
if($yorum['ust_yorum_id'] === 0) {
$duzenlenmisYorumlar[ 'yorum_'.$yorum['yorum_id'] ] = ['yorum'=>$yorum, 'alt_yorumlar'=>[]];
}
// Baktığımız yorumun üst yorumu varsa, o yorumun alt yorumu olarak eklensin
else {
$duzenlenmisYorumlar[ 'yorum_'.$yorum['ust_yorum_id'] ]['alt_yorumlar'][] = $yorum;
}
}
Ayrıca ikinci foreach içinde de patlama ihtimalini engellemek gerek.
<?php foreach($duzenlenmisYorumlar as $key=>$data) { ?>
<?php if(!isset($data['yorum'])) continue; ?>
<div class="ana_yorum" data-key="<?= $key ?>">
<div><?= $data['yorum']['yorum_adi'] ?></div>
<div><?= $data['yorum']['yorum_icerik'] ?></div>
<a href="#" class="mt-2" data-ust-yorum-id="<?= $data['yorum_id'] ?>">Cevapla</a>
<?php foreach($data['alt_yorumlar'] as $altYorum) { ?>
<div class="cevap_yorum">
<div><?= $altYorum['yorum_adi'] ?></div>
<div><?= $altYorum['yorum_icerik'] ?></div>
<a href="#" class="mt-2" data-ust-yorum-id="<?= $data['yorum_id'] ?>">Cevapla</a>
</div>
<?php } ?>
</div>
<?php } ?>
Not: Bu sistem, yazılan bir ana yorum altına cevaplar eklenmesini sağlar.
Ama yoruma verilen cevaba verilen cevap şeklinde düzen oluşturmaz.
Bu nedenle verilen cevaplar her zaman ust_yorum_id
'ye bakılarak yapılmalı.
O yüzden belki değiştirip kullanabilmeniz için <a>
taglarınıza, üst yorum id'lerini bir attribute olarak ekledim.
Eğer çalışmazsa, showVar()
fonksiyonu ile yeniden $duzenlenmisYorumlar
dizisine bakabiliriz.