📚 Hub Books: Онлайн-чтение книгРазная литератураPHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

Шрифт:

-
+

Интервал:

-
+
1 ... 14 15 16 17 18 19 20 21 22 23
Перейти на страницу:
class="p1">function comment_to_smile($comment)

{

try {

include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

$sql = "SELECT smile, path FROM smiles";

$s = $dsn->query($sql);

$ress = $s->fetchall();

foreach ($ress as $row) :

$smiles_key = $row['smile'];

$smile_path = $row['path'];

endforeach;

} catch (PDOException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

$smile_path = array_column($ress, 'path'); // Массив с кодами смайлов

$smiles_keys = array_column($ress, 'smile'); // Массив с соответствующими путями к изображениям смайлов

for ($i = 0; $i < count($smile_path); $i++) {

$smile_path[$i] = "<img src='" . $smile_path[$i] . "' alt='' />";//получаем изображение смайла

}

$comment = str_replace($smiles_keys, $smile_path, $comment); //Меняем в комментарии ключи смайлов на пути к смайлам

echo $comment; //печатаем комментарий со смайлами

}

Получаем из таблицы smiles массивы условных обозначений смайлов и путей к их изображениям. В цикле обрабатываем и выводим на печать комментарии со смайлами.

25. Страница сепарации данных

Страница separate_action.php получает данные из формы formaddsay.html.php и обрабатывает их. Введение этой страницы было необходимо для обнуления $_POST на странице обработки комментариев после их отправки. Если этого не сделать, то при размещении этого кода на странице с контроллером 3 при обычном обновлении страницы возникала бы проблема с его обработкой т.к. браузер обычно запоминает данные, которые отправляются с текущей страницы для того, чтобы отправить их снова при обновлении страницы и:

без обнуления переменной POST один и тот же комментарий будет добавляться до бесконечности при каждой перезагрузке страницы.

Если же мы уйдем со страницы на другую и отправим данные формы на следующую (в данном случае вернемся обратно) страницу, то браузер запомнит уже новые заголовки и при обновлении будет обрабатывать их, а при возврате они будут для страницы возврата пусты и соответственно при ее обновлении ничего не произойдет.

Листинг 41. separate_action.php Путь: news/chat/function/ print_comment.php

<?php

if(session_id() == '') {session_start();}

include_once $_SERVER['DOCUMENT_ROOT'].'./chat/admin/clean.php';

/* включаем/выключаем видимость блока смайлов */

if (isset($_POST['smileblock'])) {

$_SESSION['smileblock']      = 'display:block';

}

if (isset($_POST['smileblock_close'])) {

$_SESSION['smileblock']      = 'display:none';

}

/* Комментарии */

//если была нажата кнопка "Добавить" вставляем форму добавления комментариев,

//если была нажата кнопка "Ответить" вставляем форму ответа на комментарии,

if (isset($_POST['action']) and $_POST['action'] == 'Добавить') {

include_once $_SERVER['DOCUMENT_ROOT'].'/chat/say/makeformaddsay.php';

}

elseif (isset($_POST['action']) and $_POST['action'] == 'Ответить') {

include_once $_SERVER['DOCUMENT_ROOT'].'/chat/say/make_reply.php';

}

else {//Проверяем куда пойдет смайл в комментарии или в ответы

include_once $_SERVER['DOCUMENT_ROOT'].'/chat/say/smile_make.php';

}

Скрипт управляет отображением/скрытием блока смайлов, вставкой формы добавления комментариев и вставкой формы добавления ответов на комментарии.

26. Форма для вывода комментариев

Форма form_say.html.php служит для вывода комментариев

Листинг 42. form_say.html.php Путь: news/chat/say/ form_say.html.php

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

</head>

<div class="wrapsayform" style="<?= $display_say ?>">

<?php

include $_SERVER['DOCUMENT_ROOT'] . '/chat/say/list_reply.php';

if (!empty($say)) {

foreach ($say as $saylist) : ?>

<div class="sayform" id="">

<!– Выводим логин и дату –>

<div class="topprintcomment" id="">

<b><?php echo $saylist['login']; ?></b>

<?php $t = $saylist['saydate'];

echo '<span style="float:right;">' . date("d.m.Y", "$t") . '</span>'; ?>

</div>

<!– Выводим аватар и комментарии –>

<div class="printcomment" id="">

<p></p><img src="<?= '/chat/admin/users/' . $saylist['img'] ?>" class="sayavatar">

<?php

$comment = $saylist['saytext'];

comment_to_smile($comment); //печатаем комментарии

$post_id = $saylist['id'];

/* Активация кнопок */

if (userHasRole('admin')) {

$buttonactive = 'submit'; //если админ делаем активными все кнопки

} elseif ($saylist['userid'] == $userid) {

$buttonactive = 'submit'; //делаем активными кнопки для юзера

} else {

$buttonactive = 'hidden'; //отключаем кнопки

} ?></p>

</div><!– END printcomment –>

<!– Выводим блок кнопок –>

<div class="block_button_say" id="">

<div class="wrappersaybutton">

<div class="reply_button" id="">

<div class="postnumber" id=""><?php echo '#' . $saylist['id']; ?> </div>

<a href="?reply=<?php htmlout($post_id); ?>" class="areply">Ответить</a>

</div>

<div class="sayright">

<div class="button_say_edit">

<form name="" method="post" action="/chat/say/sayedit.php" class="logout">

<input type="hidden" name="pageid" id="" value=" <?php echo $pageid; ?>" />

<input type="hidden" name="textedit" value="<?php echo $saylist['id']; ?>">

<input type="hidden" name="saytext" id="" value="<?php echo $saylist['saytext']; ?>" />

<input type="<?= $buttonactive ?>" name="actionedit" value="Редактировать" />

</form>

</div>

<div class="button_say_delete">

<form name="sayform" method="post" action="/chat/say/reset.php" class="logout">

<input type="hidden" name="pageid" id="" value=" <?php echo $pageid; ?>" />

<input type="hidden" name="deleteid" id="" value=" <?php echo $saylist['id']; ?>" />

<input type="<?= $buttonactive ?>" name="delete" id="" value="Удалить" />

</form>

</div>

</div>

</div>

            <!– Форма ответить на комментарий –>

<div class="add_reply" id="">

<?php

if (isset($_SESSION['login'])) {

if (isset($_GET['reply']) and $_GET['reply'] == $post_id) {

include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/say/form_add_reply.html.php';

}

} ?>

</div>

</div><!– END block_button_say –>

</div><!– END sayform –>

<!– Выводим ответы на комментарии и кнопки –>

<?php

include $_SERVER['DOCUMENT_ROOT'] . '/chat/say/print_reply.html.php';

endforeach;

} ?>

</div><!– END wrapsayform –>

</html>

Здесь вставляется, подготовленный в list_reply.php массив ответов на комментарии $reply, затем в цикле foreach – endforeach обрабатываются комментарии, содержащиеся в массиве $say, созданном в контроллере 3, которые выводятся в соответствующих блоках div и происходит активация кнопок для каждого комментария, затем в этом же цикле подключается файл print_reply.html.php, который печатает ответы и выводит кнопки ответов.

27. Форма добавления комментариев

Для добавления комментариев служит форма formaddsay.html.php

Листинг 43. form_addsay.html.php Путь: news/chat/say/ form_addsay.html.php

<!DOCTYPE html>

<html lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

<title>Добавление</title>

</head>

<!– При нажатии кнопок формы идем на страницу сепарации переменных –>

<form action="/chat/say/separate_action.php" method="post" class="say">

<div>

<label for="saytext" class="say">Введите ваш комментарий:</label>

<textarea id="saytext" name="saytext" rows="5" cols="60" autofocus><?php if (isset($_SESSION['txt'])) {

echo htmlout($_SESSION['txt']);} ?></textarea>

</div>

<br />

<div class="">

<div class="">

<div class="says">

<input type="hidden" name="userid" value="Добавить">

<input type="hidden" name="pageid" value="<?php echo $pageid ?>">

<input type="hidden" name="sayid" value="<?php if (isset($sayid)) {

echo $sayid;

} ?>">

<input type="submit" name="action" value="Добавить">

<input type="submit" name="smileblock" value="Показать смайлы" style="">

<input type="submit" name="smileblock_close" value="Скрыть смайлы" style="">

</div>

<div class="notaddsay" id=""><a href="?">Отмена</a></div>

</div>

<br>

<hr>

<!– Вставляем лист доступных смайлов –>

<div class="smilesetdiv" id="">

<fieldset class="smileset" style="<?php if (isset($_SESSION['smileblock'])) {

echo $_SESSION['smileblock'];

} ?>">

<?php print_smile_set(); ?>

</fieldset>

</div>

</div>

<br />

</form>

</body>

</html>

Это HTML форма состоящая из следующих частей:

• Поле ввода комментариев тип textarea,autofocus.

• Кнопки «Добавить», «Показать смайлы», «Скрыть смайлы» тип input submit.

• Ссылка «Отмена», при нажатии обнуляет все значения в $_GET.

• Блок смайлов, который выводит доступный набор смайлов.

28. Обработка комментариев

1 ... 14 15 16 17 18 19 20 21 22 23
Перейти на страницу:

Комментарии

Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!

Никто еще не прокомментировал. Хотите быть первым, кто выскажется?