Как сделать древовидные комментарии
Совсем недавно мне понадобилось написать для сайта древовидные комментарии. Гугли всюду ну и особо варианты меня не порадовали, слишком много запросов в базу данных или еще что то оставляло желать лучшего.
Немного подумал и решил все сделать по своему, используя всего 3 запроса в базу данных, а именно, добавление самого комментария, получение id комментария и последующее обновление этого же комментария, так же нужно будет осуществить запись в куки, временно, лишь на добавление коммента, и так же файл CSS с настройками стиля, которые в свою очередь будут отодвигать цитируемые комменты.
Думаю суть понятна?
Поверьте ничего в этом сложного нет, все пишется на лету, лишь бы вам сейчас понять логику скрипта.
Начнем с PHP.
Предположим у вас есть форма добавление комментария, которая передает в функцию POST запрос с текстом коммента, эта функция записывает коммент в базу данных, так вот, вам необходимо в базе (в таблице) комментариев создать дополнительное поле и назвать его скажем offer. В него мы будем писать что то вроде этого
где
1 — это айди этого же коммента (нужно для правильной сортировки)
3 и 7 — это так же айди последующих комментов
Вам необходимо модернизировать вашу функцию добавления комментария прописав +2 запроса.
1 запрос. нужно получить айди последнего коммента
К примеру в CodeIgniter это можно осуществить так
Далее нам нужно обновить этот коммент и прописать в поле offer его айди
Теперь нам нужно обратиться к кукам и осуществить запись.
Вам нужно добавить у каждого комментария ссылку или кнопочку Ответить, я не особо хочу разбирать как сделать кнопочку с записью куков, но если кому нибудь понадобиться, обязательно объясню.
В куки вам необходимо записать offer коммента, которые уже находятся в базе данных.
К примеру у вас есть в базе один комментарий с айди 1 и offer = 1
Вот этот offer нам и нужно взять при клике на кнопочку, если он будет 1.3.7 то так же нужно записывать его в куки.
Добавьте для текста эту функцию куда нибудь на странице или в самой функции вывода формы комментария.
После того как мы установили offer в куках, нам нужно немного изменить выше написанное, а именно, перед данным кодом
необходимо вставить код который будет проверять, если куки заполнены, то нужно брать данные именно из них, если нет, то берем айди самого коммента.
Остальное чуть позже =)
Немного подумал и решил все сделать по своему, используя всего 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 комментариев