Как сделать добавление новостей на сайте при помощи MVC и PHP


X

Как сделать добавление новостей на сайте при помощи 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();
}
Grai Просмотров сегодня +8 27 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Ограничение символов вводимых в текстовое поле на JavaScript

Как на AJAX передать переменные в PHP с выводом результата в блок с проверкой условий без перезагрузки страницы

Как разрезать изображение на части и склеить обратно из фрагментов, используя PHP и Ajax

Тег datalist - это список возможных вариантов

Как создать свою CMS или фреймворк на MVC. Часть Первая

В какие каталоги добавить свой сайт бесплатно

Безопасная авторизация пользователей на MVC и PHP

Как на MVC с помощью PHP правильно загружать файлы с сервера. Часть Вторая

Тег dd - это определение термина

Как узнать ID последней вставленной записи

Тег b - это полужирный шрифт

Как на MVC с помощью PHP загружать изображения на сервер

Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
Создание сайтов от 5 500 руб.
Мобильные приложения от 50 000 руб.
irogex.ru
Наши проекты Инстаграм от 6 500 руб.
Конструкторы Ugears купить в Иркутске от 690 руб. с Доставкой!
Реклама UGEARS это путешествие в удивительную атмосферу гармонии природы и совершенства конструкторской мысли
Конструктор Навигатор дат - 690 руб.
Конструктор Комбайн - 2990 руб.
ugears-irk.ru
Оплата и Доставка Контакты
Стоматология в Улан-Удэ | ДентаВита | Шок цены от 100 руб!
Реклама От всей нашей семьи хотим выразить огромную благодарность стоматологической клинике
Осмотр, консультация от 150 руб.
Рентгеновский снимок от 100 руб.
dentavita03.ru
Наши цены Отзывы
Реклама помогает поддерживать
и развивать наш сервис.


Подробнее
(ссылка откроется в новой вкладке)
  Реклама