v2.5.2
Giriş yap

Yorum Cevaplandırma

coder
324 defa görüntülendi

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ı?

ebykdrms
293 gün önce

İ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.