Облако ссылок Добавить сайт Опубликовать Пользователи Категории

Сервис полезной информации


Размещайте полезную информацию и одновременно продвигайте свои проекты.


Узнать больше

Как сделать добавление новостей на сайте при помощи 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 команда сайта
Реклама помогает поддерживать
и развивать наш сервис.


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