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

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

Шрифт:

-
+

Интервал:

-
+
1 ... 13 14 15 16 17 18 19 20 21 ... 23
Перейти на страницу:
w – ширина изображения

// ratio – коэффициент пропорциональности

$w = 90; // квадратная 90x90. Можно поставить и другой размер.

$h = 90;

// создаём исходное изображение на основе

// исходного файла и определяем его размеры

$w_src = imagesx($im); //вычисляем ширину

$h_src = imagesy($im); //вычисляем высоту изображения

if ($w_src !== $h_src) {

exit('<h4>Стороны изображения для загрузки должны быть равны. Например 256*256.<br>Рекомендую использовать готовые аватары со специализированных сайтов.<br>

Или подготовьте картинку в графическом редакторе</h4><br><i>p.s. грузим аватары, а не картины</i>');

}

// создаём пустую квадратную картинку

// важно именно truecolor!, иначе будем иметь 8-битный результат

$dest = imagecreatetruecolor($w, $w);

$white = imagecolorallocate($dest, 255, 255, 255);

imagefill($dest, 0, 0, $white);

imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $h_src);

$date = time(); //вычисляем время в настоящий момент.

imagejpeg($dest, $path_to_90_directory . $date . ".jpg"); //сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.

$avatar = $path_to_90_directory . $date . ".jpg"; //заносим в переменную путь до аватара.

$delfull = $path_to_90_directory . $filename;

unlink($delfull); //удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было – получить миниатюру.

} else {

//в случае несоответствия формата, выдаем соответствующее сообщение

exit("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев

}

//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы

}

/*.........................Сохраняем пользователя в базу......................*/

if (!isset($date)) {

$date = time();

}

try {

$sql = "INSERT INTO users (login,password,email,img,date) VALUES(:login,:password,:email,:img, :date)";

$result2 = $dsn->prepare($sql);

$result2->execute([

'login' => $login,

'password' => $password,

'email' => $email,

'img' => $avatar,

'date' => $date

]);

$role = 'user';

$authorid = $dsn->lastInsertId();

$sql = "INSERT INTO authorrole (authorid,roleid) VALUE (:authorid,:roleid)";

$resultrole = $dsn->prepare($sql);

$resultrole->execute([

'authorid' => $authorid,

'roleid' => $role

]);

echo '<img src="' . $avatar . '">';

echo ' ' . '<h3>' . $login . '</h3>' . ' ' . "Вы успешно зарегистрированы! <a href='/index.html'>Главная страница</a>";

} catch (PDOException $e) {

echo "You have an error: " . $e->getMessage() . "<br>";

echo "On line: " . $e->getLine();

}

$activation = md5($authorid) . md5($login);

$subject = "Подтверждение регистрации"; //тема сообщения

$message = "Здравствуйте! Спасибо за регистрацию в модуле комментариев chatnВаш логин: " . $login . "n

Перейдите по ссылке, чтобы активировать ваш аккаунт:nhttp://" . $_SERVER['HTTP_HOST'] . "/chat/admin/users/activation.php?login=" . $login . "&code=" . $activation . "nС уважением,n

Администратор модуля"; //содержание сообщение

mail($email, $subject, $message, "Content-type:text/plane; Charset=utf-8rn"); //отправляем сообщение

echo "<hr><h3>Вам на E-mail выслано письмо с cсылкой, для подтверждения регистрации.</h3> <br><b>Внимание! Ссылка действительна 1 час.</b>"; //говорим о отправленном письме пользователю

В этом скрипте проверяются данные пользователя и сохраняются в БД. Обработка изображений для аватара сделана только для квадрата, т.к. PHP это язык серверный и обработка изображений явно не его конек. Результаты при обработке прямоугольников мягко говоря разочаровывают, поэтому загрузка и обработка прямоугольных исходников не предусмотрена. Лучше взять готовый или подготовить аватар в графическом редакторе. Код в данном скрипте прокомментирован практически построчно, думается вопросов быть не должно.

С административным разделом закончили, приступаем к комментариям.

22. Комментарии

Для работы с комментариями используем папку «say», созданную ранее в разделе 3. На данном этапе она пуста и кроме папки «smiles» в которой хранятся заранее подготовленные смайлы в ней ничего нет.

23. Контроллер 3

Для вывода комментариев создаем контроллер 3 «say_controller.php».

Листинг 38. say_controller.php Путь: news/chat/ say_controller.php

<?php

error_reporting(E_ALL);

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

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

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

$page_id = $_SERVER['PHP_SELF']; //индексируем страницу

/* Если пользователь авторизован вставляем ссылку Добавить комментарий */

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

$userid = $_SESSION['userid'];

echo '<div class="addsay" id=""><a href="?addsay" class="aaddsays">Добавить комментарий</a></div>';

}

else {

$userid = '';

}

/* Устанавливаем условие видимости блока комментариев и кнопок показать и скрыть комментарии */

if (isset($_GET['opensay'])) {

$display_say = 'display:none;';

$display_but = 'display:flow-root;';

}

else {

$display_say = 'display:flow-root;';

$display_but = 'display:none;';

}

/* Применяем условие видимости к кнопкам показать и скрыть комментарии */

echo '<div class="opensay" style="'.$display_but.'"><a href="?" class="aopensays">Показать комментарии</a></div>';

echo '<div class="opensay" style="'.$display_say.'"><a href="?opensay" class="aopensays">Скрыть комментарии</a></div>';

/* Вставляем форму добавить комментарий */

if (isset($_GET['addsay'])){

$pageid = strtok($_SERVER['PHP_SELF'],'?');

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

}

/* Выводим лист комментариев */

//сортируем в обратном порядке наверху последний комментарий

try {

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

      $sql = 'SELECT say.id, say.userid, say.saydate, say.saytext, users.login, users.img FROM say INNER JOIN users ON users.`id` = say.userid WHERE say.page_id = :page_id ORDER BY say.id DESC';

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

$s -> bindValue(':page_id', $page_id);

$s -> execute();

}

catch (PDOException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

foreach ($s as $row) {

$say[] = array(

'id' => $row['id'],

'saytext' => $row['saytext'],

'saydate' => $row['saydate'],

'img' => $row['img'],

'login' => $row['login'],

            'userid' => $row['userid']);

}

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

Контроллер определяет условия видимости управляющих комментариями кнопок и форм ввода комментариев, индексирует страницу и формирует массив say[] с комментариями, который будет выводится в форме form_say.html.php после обработки.

Как видим у него также есть файлы которые нужно обрабатывать. Если сейчас подключить контроллер, то на странице будет ошибка. Файлы еще не готовы. В папке «chat» создаем папку «function» в которой будут находиться функции по обработке комментариев.

24. Папка функций

24.1 Печать смайлов

Для вывода набора доступных смайлов написана функция «print_smile_set.php»

Листинг 39. print_smile_set.php Путь: news/function/ print_smile_set.php

<?php

error_reporting(E_ALL);

/* печать блока доступных смайлов в виде кнопок */

function print_smile_set()

{

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']; ?>

<input type="submit" name="smile" title="<?= $smiles_key; ?>" value="<?= $smiles_key; ?>"

style="background:url(<?= $smile_path; ?> );

background-repeat: no-repeat;float:left;height:45px;border:none;

width:50px;font-size:0;" />

<?php

endforeach;

} catch (PDOException $e) {

echo $e->getMessage();

echo $e->getLine();

exit();

}

}

Смайлы сделаны в виде кнопок. В свойстве «background» кнопки идет картинка смайла. Нажатие кнопки вставляет смайл.

Внимание! Стили CSS для смайлов задаются непосредственно в скрипте в строке <input … style=””>

24.2 Печать комментариев

Для печати комментариев служит функция «print_comment.php»

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

<?php

/* печать комментария со смайлами */

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

Комментарии

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

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