Document

Блог на php для самых маленьких

Привет, я php backend разработчик и по совместительству преподаю php в основном для детей и не только. Последний проект над которым я работал, был сайт votpusk.ru. Я не считаю себя гуру, тем не менее знаний у меня достаточно что бы направить на путь истинный начинающих php программистов.

Для кого эта публикация?

Эта публикация для кодеров которые освоили азы программирования, но испытывают трудности при написании своего первого сайта. Публикация будет полезна тем кто уже имеет базовые знания php и html, но на практике применить свои знания им трудно. Планируется целый цикл публикаций от простого к сложному.

Цель публикации

Основная цель данной публикации, начать написание блога на процедурном php и html. При этом используя минимальное количество функций с приближенной к реальному проекту архитектурой. Вместо базы данных будем использовать обычный txt файл с данными.

Начнем-с

Для начала нужно будет создать несколько папок и файлов как показано на скрине: (blog.com это корневая папка проекта у вас может быть другое название, остальное как на скрине).

Файловая структура

Теперь когда файлы и папки созданы, давайте откроем файл index.php в браузере. Пропишем название нашего сайта и через слэш имя нужного файла у меня это будет выглядеть так: http://blog.com/index.php Запустив файл мы увидим белый экран так как в файле пока нет кода. Файл index.php запускается по умолчанию если мы не указываем название другого файла. Поэтому мы можем исправить нашу ссылку на http://blog.com и увидим точно такой же результат.

Файл index.php это единственная точка входа в наш проект. Мы всегда будем попадать на этот файл и в зависимости от условий подключим другие файлы с кодом нужных страниц.

Теперь нужно прикинуть какие страницы будут на нашем сайте. Изначально планируем «Главную», «Контакты», и собственно страницу со статьями. Так же нужно продумать возможность вывода статей по категориям.

Теперь откроем файл index.php в редакторе. Зная что мы попадаем на этот файл всегда как нам узнать когда нужно подключать файл с кодом главной страницы, а когда например страницы с контактами?

В php есть механизм позволяющий передавать значения из адресной строки в переменную $_GET которая является массивом (array). Теперь добавляя к http://blog.com/ строку типа ?c=contact&a=index мы получим в массиве $_GET два значения, которые запишем в переменные. Обратите внимание, что значения разделены знаком &. Почитать о $_GET

Теперь то что мы получили в переменной $controller будем считать именем подключаемого файла нужной страницы, но с условием что будем добавлять к имени строку ‘Controller’. Подключаемые файлы будем хранить в папке /controllers.

Создадим файл contactController.php для страницы «Контакты» в папке /controllers. Так же можем создать файлы и для главной (mainController.php), и для страницы со статьями (articlesController.php). Переменную $action пока не трогаем, она нам понадобиться позже.

Теперь хочу пояснить для чего нам значение в переменной $action. У нас есть пока что только одна страница для вывода всех статей. Но если вдруг нам понадобиться еще страница для вывода каждой статьи по отдельности, по нашей логике мы создадим два файла, что само собой не хорошо. Т.е. 100 файлов для 100 страниц и непонятно какой файл за что отвечает и для поиска нужного файла мы крутим колесико вечность. Как вариант мы можем все файлы которые относятся к статьям поместить в папку articles/ это бы помогло нам быстрее находить файлы с нужным кодом, но количество файлов это никак не уменьшит.

Читайте также:  Прохождение капчи на python

Решением данной ситуации я вижу поместив в наш файл articlesController.php две или более функции и вызывать их в зависимости от значения переменной $action. При этом предлагаю немного модифицировать имя функции добавив к нему параметр $_GET[‘c’]. По итогу файл articlesController.php будет выглядеть вот так:

Теперь давайте напишем код, который анализирует значения переменной $controller и подключает нужный нам файл(контроллер). А так же анализируя переменную $action вызывает нужную функцию. Договоримся что если $_GET[‘c’] содержит пустое значение в $controller по умолчанию у нас будет main, ну а $action — index. По итогу файл index.php будет выглядеть вот так: ( empty file_exists include_once function_exists )

 /*Если в $_GET['c'] не пустое значение запишем в переменную $action */ if (! empty($_GET['a'])) < $action = $_GET['a']; >//Сформируем путь к нашему контролеру $controllerPath = "controllers/Controller.php"; //Сформируем название вызываемой функции $functionName = $controller . '_' . $action; //Если такой контролер существует подключим его инклудом if (file_exists($controllerPath)) < include_once $controllerPath; //Если такая функция существует вызовем её if (function_exists($functionName)) < $data = $functionName(); >>

Теперь перейдя по адресу http://blog.com/?c=contact&a=index мы подключим файл contactController.php и выполним функцию сontact_index().

Отлично хотел бы сказать я, но это еще не все. Обычно html разметку и php код следует размещать в разных файлах. Код отдельно, а разметку отдельно. А это значит что для каждой такой функции нам нужен будет отдельный файл вида. Который мы поместим в папку views/ далее в папку по имени контролера, например views/contact/, а файл назовем по имени $action. Создадим файлы вида и папки для контролеров contactController и mainController.

Теперь заполним кодом сами контролеры и файлы видов:

/controllers/contactController.php и views/contact/index.php

Добро пожаловать!

Добро пожаловать!

Теперь обратите внимание на файл layout.php что в папке views/. Он нужен для того что бы вынести в него общий для сайта код. Например, шапку сайта, меню, логотип и т.д. и внутри общего шаблона подключить конкретные файлы видов. Скопируйте код файла layout.php

         

Супер Блог

Шапка

СтрелкаГлавная

СтрелкаПопулярные

СтрелкаЖивотные

СтрелкаРастения

СтрелкаКонтакты

/$action.php"; ?>

Теперь напишем функцию, которая будет подключать общий файл вида, а в нем и конкретный. Для этого в папке /lib создайте файл viewLib.php и поместите в него следующий код:

 //Подключаем наш общий вид include_once 'views/layout.php'; >

и добавим в файл index.php подключение этого файла и вызов функции

 if (! empty($_GET['a'])) < $action = $_GET['a']; >$controllerPath = "controllers/Controller.php"; $functionName = $controller . '_' . $action; if (file_exists($controllerPath)) < include_once $controllerPath; if (function_exists($functionName)) < $data = $functionName(); //Вызываем функцию render($controller, $action, $data); >> 

Теперь если скопировать все картинки из моей папки img в вашу и перейти по адресу http://blog.com/?c=contact&a=index мы подключим файл contactController, вызовем функцию contact_index(), дальше произойдет вызов функции render() в которой подключиться общий шаблон с разметкой, а в общем шаблоне конкретный файл вида. То же самое произойдет если поменять ссылку на http://blog.com/?c=main&a=index только файлы теперь будут другие и соответственно мы увидим другую страницу.

Десерт

Приступим к созданию страниц для вывода статей. Для на чала создадим файл db.txt в корне проекта. Формат файла должен быть следующим

id-1|категория|текст статьи -*- id-2|категория|текст статьи

1|животные| 

Собакай

Текст статьи про собаку

-*- 2|животные|

Суслик

Текст статьи про суслика

-*- 3|животные|

Олень

Текст статьи про оленя

-*- 4|растения|

Кульбаба

Текст статьи про кульбабу

-*- 5|растения|

Айстра

Текст статьи про айстру

-*- 6|растения|

Бавовник

Текст статьи про бавовник

Контроллер articlesController заполним следующим кодом

 $result = []; foreach ($items as $item) < //Разделяем данные одной статьи id категорию и текст $article = explode('|', $item); //Отбор по категориям if ($category === 'популярные' || $article['1'] === $category) < //Формируем конечный масив со статьями $result[] = [ 'id' =>$article['0'], 'category' => $article['1'], 'text' => $article['2'] ]; > > //Передаем данные в шаблон return ['articles' => $result, 'category' => $category]; > function articles_view() < $id = $_GET['id']; $text = file_get_contents('db.txt'); $items = explode('-*-', $text); $result = NULL; foreach ($items as $item) < $article = explode('|', $item); if ($id == $article['0']) < $result = [ 'id' =>$article['0'], 'category' => $article['1'], 'text' => $article['2'] ]; > > return ['article' => $result]; > 

Файлы вида views/articles/index.php и views/articles/view.php

Итого

Вот и все 🙂 Я конечно не ожидал что это займет у меня почти пол ночи времени. Если вам понравилась публикация оставляйте комменты и будет продолжение или оставляйте критику дабы я смог отшлифовать материал, исправить ошибки и в дальнейшем готовить материал еще лучше. Заранее благодарен.

Источник

How to create the blog posts index page in WordPress

As I have said before, the blog posts index page displays all the blog posts irrespective of their category, tag, author or published year.

Based on the type of the Website, A blog posts index page could be a Homepage or an Internal Page.

Blog Posts Index page as the Homepage

For example, If it is a news-based website, usually, the blog posts index page is the homepage.

It might look complex, but it is a pretty straight forward Blog posts index page with a ton of custom queries. That’s all.

We will discuss custom queries in a future module.

The thing with the Blog Posts Index page as Homepage is, we don’t have to create a separate page in the Admin Dashboard -> Pages panel.

If the “Your Homepage Displays” option from the Settings -> Reading panel is set to “Your latest posts”, WordPress will render the Homepage with a bunch of blog posts using a default theme template file like index.php or home.php file.

Blog Posts Index page as Internal Page

If it is a business based website like the one we are building right now, the Blog Posts index page is definitely an internal page.

Unlike Homepage based blog, we have to implement the following steps to build this blog posts index page which gets displayed as an internal page.

Step 1) Create a page called “Blog” or “Articles” or “Name it what-ever-you-want”.

step 2) Select this newly created page for “Your Homepage Displays” option from the Settings -> Reading panel

step 3) That’s all. WordPress will use index.php or home.php file to render the above created internal page with all the blog posts.

Common, let’s start with the first step.

Step 1) Creating a page for the blog

Go to Admin Dashboard -> Pages -> Add New

Majority of the sites on the web will name this page as “Blog”. So, I am gonna follow the convention as well.

You don’t have to add any content to this page. You’ll understand “the why” part in a moment.

Also, you can ignore all page options and just click on the Publish button to create the page.

Step 2) Tell WordPress to use the newly created page for displaying blog posts index

Go to Admin Dashboard -> Settings -> Reading

During the earlier module of this course, For “Your homepage displays” We have selected “A Static Page” as our Homepage and selected “Home” page as the Homepage of our site. But during that time, we did not pay attention to the “Posts page” dropdown at all.

Now it is time to select our Posts page too.

Click on the Posts page dropdown and select the newly created “Blog” page from the list.

Finally, don’t forget to save the changes.

Now, if you go back to the “Blog” page edit screen in the admin dashboard, you’ll find something interesting.

First of all, WordPress switched to its classic interface and it is displaying a message saying

“You are currently editing the page that shows your latest posts.”

WordPress also removed the content editor altogether. This way, content editors or site administrators doesn’t accidentally edit this page trying to put content in it.

Anyway, that’s all you need to do.

Step 3) WordPress takes care of the rest

If you now visit the Blog page in the frontend, you can see all the blog posts that you have added using:

Admin Dashboard -> Posts panel

That’s pretty much what it takes to create a Blog Posts Index page in WordPress. Nothing complicated at all.

However, the Blog page doesn’t look anything like the below Mockup.

Currently, WordPress is using the index.php file to render the Blog page. WordPress is using this file because it can not find home.php file inside our nd-dosth theme.

But, we are not going to create the home.php file.

Remember? I said that it is totally ok to skip some template files from the WordPress Template Hierarchy.

So, We will modify the code inside the index.php file to make the Blog page look like the above mockup. And, we will do that in the next lesson.

Before that, let’s add the “Blog” page to the menu. The client asked to add it to the Header Navigation. So, we will do just that.

Go to Admin Dashboard -> Appearance -> Menus

Select the Header Navigation if it not already selected.

Finally, add the “Blog” page to the menu and save the menu.

And, it looks like this on the frontend.

“Hey! What if we change the title or slug of the blog page? Does the blog break?”

I will answer this question in the next lesson.

Источник

Оцените статью