Делаем вывод статей в блоге

Делаем вывод статей на сайте из базы данных

Итак, в прошлом уроке мы с вами создали класс для работы с базой данных и получили с его помощью две статьи. В этом уроке мы научимся выводить эти статьи на нашем сайте.

Давайте заглянем в наш шаблон.

templates/main/main.php

Код доступен только после покупки курса ООП в PHP.

Как видим, здесь у нас требуются ключи ‘name’ и ‘text’. И они есть у наших статей! Нам достаточно только передать эти статьи в шаблон, чтобы вывести их.

src/MyProject/Controllers/MainController.php

Код доступен только после покупки курса ООП в PHP.

Снова обновим страничку.
Статьи отрендеренные

Как видим, нужные данные успешно были использованы в шаблоне.
Давайте добавим на нашем сайте ещё одну страничку, на которой будет выводиться только одна статья.

Давайте создадим новый контроллер.

src/MyProject/Controllers/ArticlesController.php

Код доступен только после покупки курса ООП в PHP.

Добавим новый роут. Пусть наши статьи будут открываться по адресу типа: http://myproject.loc/articles/1, где вместо 1 может быть любой другой id статьи.

src/routes.php

Код доступен только после покупки курса ООП в PHP.

Давайте проверим, что наш роут успешно обрабатывается:
ЧПУ

Отлично, давайте теперь сделаем запрос в базу, в котором получим статью с нужным id.

src/MyProject/Controllers/ArticlesController.php

Код доступен только после покупки курса ООП в PHP.

Посмотрим на результат снова.
Одна статья в виде массива

Получили массив, в котором есть статья с id = 1.
Давайте посмотрим, что получится, если запросить статью с id = 2.
Вторая статья в виде массива

Всё снова хорошо отработало.
А что будет, если запросить статью, которой в базе нет?
Пустой массив

Мы получим пустой массив. Отлично, теперь давайте попробуем обработать эти две ситуации.

Код доступен только после покупки курса ООП в PHP.

Добавим шаблон для вывода одной статьи:

templates/articles/view.php

Код доступен только после покупки курса ООП в PHP.

И проверим, что всё ок.
Вывод статьи в шаблоне

Пришла пора добавить шаблон для страницы с ошибкой, когда что-то не найдено. Создадим ещё один шаблончик.

templates/errors/404.php

Код доступен только после покупки курса ООП в PHP.

И будем подключать этот шаблон для случаев, когда наша статья не нашлась.

src/MyProject/Controllers/ArticlesController.php

Код доступен только после покупки курса ООП в PHP.

Попробуем теперь открыть страничку с несуществующей статьёй.
Страница не найдена

Однако, просто так написать о том, что страница не найдена не верно. Важно при этом вернуть код ответа для страницы, который даст понять поисковым системам, что эту страницу индексировать не нужно. Если мы откроем панель разработчика в Google Chrome и перезагрузим страничку, мы увидим, что текущий код ответа – 200. Это стандартный код ответа, говорящий о том, что со страничкой всё хорошо.
200 код ответа

Нам же нужно вернуть код 404 – он говорит о том, что страница не найдена. Задать код ответа можно при помощи функции http_response_code(). В качестве аргумента ей передаётся код, который нужно вернуть.

Давайте отредактируем наш метод renderHtml() в классе View. Добавим возможность передавать код ответа.

src/MyProject/View/View.php

Код доступен только после покупки курса ООП в PHP.

По умолчанию, если мы не передадим третьим аргументом код, будет возвращён 200-ый, иначе – заданный нами.

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

src/MyProject/Controllers/ArticlesController.php

Код доступен только после покупки курса ООП в PHP.

Снова проверяем, обновив страничку.
404 код ответа

Вжух! Получили нужный код ошибки.

Итак, мы с вами сделали вывод списка статей и вывод каждой статьи отдельно. Уже немало. Давайте теперь сделаем ссылки со списка, ведущие на отдельную статью. Для этого нам нужно только немного поправить шаблон.

templates/main/main.php

Код доступен только после покупки курса ООП в PHP.

Зайдём в корень нашего сайтика и увидим, что теперь мы можем переходить по каждой статье отдельно.
Ссылки на статьи

На этом данный урок заканчивается, а в следующих мы научимся работать с базой данных, получая из неё объекты, а не массивы.