Как сделать добавление новостей на сайте при помощи MVC и PHP
Добавление новости
Первым делом, как и всегда, заходим в папку config и открываем файл routes.php. В него нам нужно будет добавить путь к методу, который будет отрисовывать страницу:
'add_news' => 'news/add',
Также нужно создать вот такую таблицу в базе данных:
Теперь создадим саму страницу, которая будет содержать форму. В ней будет использована функция транслита и вывод сообщений из массива errors, все это было описан в прошлых уроках.
Создаем самую простую форму с атрибутом enctype="multipart/form-data", он нужен для загрузки картинок в форме:
<?
function translit($str) {
$rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ' ');
$lat = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya', '_');
return str_replace($rus, $lat, $str);
}
?>
<html>
<head>
<title>Добавление новости</title>
<script>
function CopyTxt() {
function strtr(str, repl) {
for (var i = 0; i < str.length; i++) {
var f = str.charAt(i), r = repl[f];
if (r) str = str.replace(new RegExp(f, 'g'), r);
}
return str;
}
var trans = {
'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'E', 'Ж':'Gh', 'З':'Z', 'И':'I', 'Й':'Y', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C', 'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sch', 'Ъ':'Y', 'Ы':'Y', 'Ь':'Y', 'Э':'E', 'Ю':'Yu', 'Я':'Ya', 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'e', 'ж':'gh', 'з':'z', 'и':'i', 'й':'y', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c', 'ч':'ch', 'ш':'sh', 'щ':'sch', 'ъ':'y', 'ы':'y', 'ь':'y', 'э':'e', 'ю':'yu', 'я':'ya', ' ':'_'
};
var txt = strtr(document.getElementById('id1').value, trans);
document.getElementById('id2').value = txt;
}
</script>
</head>
<body>
<div class="iro-admin-page">
<?php if (isset($errors) && is_array($errors)): ?>
<ul>
<?php foreach ($errors as $error): ?>
<li> - <?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<h1>СОЗДАТЬ НОВОСТЬ</h1>
<br><br/>
<form method="post" action="" enctype="multipart/form-data" >
<lable>Заголовок* <br><input id="id1" onkeyup="CopyTxt()" type="text" name="title" size="80"></lable><br><br>
<lable>Дата* <br><input type="date" name="date" size="10"></lable><br><br>
<lable>Загрузить изображение* <br><input name="img_url" type="file" /></lable><br><br>
<lable>Автоматический Url* <br><input id="id2" type="text" name="url" size="80" value=""></lable> *.html<br><br>
<textarea name="html" rows="10" cols="80"></textarea><br>
<input class="button" type="submit" name="submit" value="Сохранить"><br><br><br><br>
</form>
</div>
</body>
</html>
Теперь переходим в папку controllers и создаем файл NewsController.php. В файле создаем класс NewsContoller, в классе пишем метод для отрисовки и обработки полей с нашей формы:
При нажатии кнопки на форме получаем введенные в поля данные методом POST и записываем их в переменные. Проверяем введено ли название новости:
public function actionAdd()
{
if (isset($_POST['submit']))
{
$title = $_POST['title'];
$date = $_POST['date'];
$img_url = $_FILES['img_url']['name'];
$tmp_name_img = $_FILES['img_url']['tmp_name'];
$url = $_POST['url'];
$html = $_POST['html'];
$errors = false;
if (!$url) $errors[] = 'Введите название новости вручную';
Если после получения данных введенных в формы у нас не возникло ошибок, то переходим непосредственно к добавлению самих новостей.
У нас есть две функции добавления новости. Первая функция add_news выполняет добавление новости, если картинка не была выбрана. Если же картинка выбрана, то используется функция createNewsImg:
if ($errors == false)
{
$url = $url.'.html';
if($img_url == null)
{
$img_url = 'no_photo.png';
News::add_news($title, $date, $img_url, $url, $html);
header("Location: /add_news");
}
else
{
News::createNewsImg($title, $date, $img_url, $tmp_name_img, $url, $html);
header("Location: /add_news");
}
}
}
require_once(ROOT . '/views/site/add_news.php');
return true;
}
Затем нам следует описать функции, которые добавляют новости в базу данных:
Функция add_news добавляет введенные в поля данные, в таблицу базы данных:
public static function add_news($title, $date, $img_url, $url, $html)
{
$db = Db::getConnection();
$sql = 'INSERT INTO news (title, date, img_url, url, html) VALUES (:title, :date, :img_url, :url, :html)';
$result = $db->prepare($sql);
$result->bindParam(':title', $title, PDO::PARAM_STR);
$result->bindParam(':date', $date, PDO::PARAM_STR);
$result->bindParam(':img_url', $img_url, PDO::PARAM_STR);
$result->bindParam(':url', $url, PDO::PARAM_STR);
$result->bindParam(':html', $html, PDO::PARAM_STR);
return $result->execute();
}
Функция createNewsImg. Эта функция срабатывает тогда, когда в форме была выбрана картинка. С помощью функции downloadImg (
public static function createNewsImg($title, $date, $img_url, $tmp_name_img, $url, $html)
{
$img_url1 = Page::downloadImg($img_url, $tmp_name_img);
echo $img_url1;
$db = Db::getConnection();
$sql = 'INSERT INTO news (title, date, img_url, url, html) VALUES (:title, :date, :img_url, :url, :html)';
$result = $db->prepare($sql);
$result->bindParam(':title', $title, PDO::PARAM_STR);
$result->bindParam(':date', $date, PDO::PARAM_INT);
$result->bindParam(':img_url', $img_url1, PDO::PARAM_STR);
$result->bindParam(':url', $url, PDO::PARAM_STR);
$result->bindParam(':html', $html, PDO::PARAM_STR);
return $result->execute();
}
Ещё пока нет комментариев, будь первым!
🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.
Как добавить свой сайт в поисковые системы GOOGLE и YANDEX
Как сделать добавление новостей на сайте при помощи MVC и PHP
Тег br - это перенос строки
Тег b - это полужирный шрифт
Как на MVC с помощью PHP правильно загружать файлы на сервер. Часть Первая
Тег acronym - это акроним
Как на MVC и PHP создать систему восстановления доступа с отправкой пароля на адрес электронной почты
Как на MVC с помощью PHP загружать изображения на сервер
Ограничение символов вводимых в текстовое поле на JavaScript
Тег dd - это определение термина
Как сделать модуль бесплатной консультации на ajax
Как сделать алгоритм поиска по нескольким словам на PHP из БД