Как сделать древовидные комментарии

PHP
Совсем недавно мне понадобилось написать для сайта древовидные комментарии. Гугли всюду ну и особо варианты меня не порадовали, слишком много запросов в базу данных или еще что то оставляло желать лучшего.

Немного подумал и решил все сделать по своему, используя всего 3 запроса в базу данных, а именно, добавление самого комментария, получение id комментария и последующее обновление этого же комментария, так же нужно будет осуществить запись в куки, временно, лишь на добавление коммента, и так же файл CSS с настройками стиля, которые в свою очередь будут отодвигать цитируемые комменты.

Думаю суть понятна?
Поверьте ничего в этом сложного нет, все пишется на лету, лишь бы вам сейчас понять логику скрипта.

Начнем с PHP.
Предположим у вас есть форма добавление комментария, которая передает в функцию POST запрос с текстом коммента, эта функция записывает коммент в базу данных, так вот, вам необходимо в базе (в таблице) комментариев создать дополнительное поле и назвать его скажем offer. В него мы будем писать что то вроде этого
1.3.7

где
1 — это айди этого же коммента (нужно для правильной сортировки)
3 и 7 — это так же айди последующих комментов

Вам необходимо модернизировать вашу функцию добавления комментария прописав +2 запроса.
1 запрос. нужно получить айди последнего коммента
К примеру в CodeIgniter это можно осуществить так
$id = $this->db->insert_id('comment');


Далее нам нужно обновить этот коммент и прописать в поле offer его айди
$this->db->where('id', $$id);
        $this->db->update('comments', $data); // $data массив, в котором содержится текст коммента, отправитель и еще что то.


Теперь нам нужно обратиться к кукам и осуществить запись.
Вам нужно добавить у каждого комментария ссылку или кнопочку Ответить, я не особо хочу разбирать как сделать кнопочку с записью куков, но если кому нибудь понадобиться, обязательно объясню.
В куки вам необходимо записать offer коммента, которые уже находятся в базе данных.
К примеру у вас есть в базе один комментарий с айди 1 и offer = 1
Вот этот offer нам и нужно взять при клике на кнопочку, если он будет 1.3.7 то так же нужно записывать его в куки.

<?php setcookie('offer', 1); ?>


Добавьте для текста эту функцию куда нибудь на странице или в самой функции вывода формы комментария.

После того как мы установили offer в куках, нам нужно немного изменить выше написанное, а именно, перед данным кодом
$this->db->where('id', $$id);
        $this->db->update('comments', $data); // $data массив, в котором содержится текст коммента, отправитель и еще что то.


необходимо вставить код который будет проверять, если куки заполнены, то нужно брать данные именно из них, если нет, то берем айди самого коммента.
if(! isset($_COOKIE['offer']))
        {
            $data = array('offer' => $id);
        }
        else
        {
            $data = array('offer' => $_COOKIE['offer'] . '.' . $id);
        }


Остальное чуть позже =)

Девушкам думаю будет интересно посмотреть на стильные аксессуары для волос, которые вы можете приобрести на сайте stylepit.ua.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.