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 и увидим точно такой же результат.

Читайте также:  Base64 to zip java

Файл 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/ это бы помогло нам быстрее находить файлы с нужным кодом, но количество файлов это никак не уменьшит.

Решением данной ситуации я вижу поместив в наш файл 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

Итого

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

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

PHP blog script making blogging easy.

codeqasim/blog

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Simplest PHP based blog fully optimized for search engines 100% opensource code and ready to extend the features. logically inspired by wordpress, medium, gitbook & ghost cms.

❤️ Build with technologies : PHP MYSQL HTML CSS JS

  • 🌐 100% opensource code
  • 👑 Categories module
  • 📄 Newsletter & subscribers
  • ⏫ SEO optimized
  • ⚡ Google AMP Optmized via url/amp
  • 😎 Multi users accounts
  • 📁 Built-it pages views analytics
  • 💾 Post draft feature
  • 💿 Base64 article optimized images
  • 🔎 Auto Sitemap generation
  • 📄 Beautify URLs
  • 📱 Social links and shares
  • ⚠️ Page hits views counter

Starting your own niche based blog is very challenging specially when it comes to selecting any of your CMS or blog script. speed, performance, optimization, SEO and user-friendly are the options you need to be very handy. fancy cms and blog scripts are no more easy to handle configure or install on your shared or dedicated servers anymore. PHP Blog Script makes life much easier to just add your db credentials and install the entire platform within 2 minutes.

No plugins no libraries and fancy themes to customize and waste your time simple elegant and useful blog platform is ready for you to install for free and start blogging without wasting your time on search other blogging scripts.

Источник

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