Как создать собственную систему управления контентом (наподобие WordPress)

Создание системы управления контентом с нуля стало для нас по-настоящему замечательным опытом.

WordPress давно стал стандартом де-факто, особенно среди систем управления контентом. Как сказано на его сайте...

WordPress работает на более чем 43% сайтов в интернете, и эта доля растёт с каждым днём. На WordPress создают всё: от простых сайтов и блогов до сложных порталов, корпоративных сайтов и даже приложений.

Но WordPress появился в то время, когда создавать приложения было непросто.

Сегодня разработка на PHP заметно ускорилась, о чём говорят последние обновления PHP, а вместе с ней изменились и подходы к разработке программного обеспечения.

Например, разработка с использованием структуры MVC, вдохновлённой Ruby on Rails, и некоторые принципы архитектуры ПО применяются во многих фреймворках.

Однако к WordPress это не относится: он по-прежнему использует собственную структуру.

Эта статья поможет вам понять, что получится, если применить современную архитектуру ПО при создании системы управления контентом наподобие WordPress.

Для этого мы воспользуемся Laravel — PHP-фреймворком, в котором реализованы некоторые практики программной инженерии.

Коротко обсудим, какие функции будут в нашей системе управления контентом. Исходя из возможностей WordPress, можно выделить такие ключевые функции:

  • Простая публикация. Если вы когда-нибудь создавали документ, то с созданием контента в WordPress справитесь без труда. Вы можете создавать записи и страницы, легко их оформлять, добавлять медиафайлы, а одним нажатием кнопки опубликовать контент в интернете.
  • Инструменты публикации. WordPress упрощает управление контентом. Создавайте черновики, планируйте публикации и просматривайте версии записей. Делайте контент публичным или приватным, защищайте записи и страницы паролем.
  • Управление пользователями. Не всем нужен одинаковый доступ к вашему сайту. Администраторы управляют сайтом, редакторы работают с контентом, авторы и участники пишут материалы, а подписчики имеют профиль, которым могут управлять. Так на сайте могут работать разные авторы, а остальные просто становятся частью вашего сообщества.
  • Управление медиафайлами. Говорят, одна картинка стоит тысячи слов, поэтому важно, чтобы изображения и медиафайлы можно было быстро и легко загружать в WordPress. Перетащите файлы в загрузчик, и они появятся на сайте. Добавляйте альтернативный текст и подписи, вставляйте изображения и галереи в материалы. Есть даже несколько инструментов для редактирования изображений, с которыми можно поэкспериментировать.
  • Встроенные комментарии. Ваш блог — это ваш дом, а комментарии дают друзьям и подписчикам возможность обсуждать ваш контент. Инструменты комментирования WordPress дают всё необходимое, чтобы превратить блог в площадку для дискуссий и модерировать эти обсуждения.
  • Оптимизация для поисковых систем. WordPress оптимизирован для поисковых систем сразу после установки. Для более тонкой SEO-настройки есть множество SEO-плагинов.

Итак, приступим!

Установка

composer create-project laravel/laravel wp-laravel

Попробуем открыть наше приложение

php artisan serve

Нам понадобится настроить базу данных. В этой статье нам поможет SQLite.

touch database/database.sqlite

Нужно обновить файл .env

DB_CONNECTION=sqlite
DB_DATABASE=database/database.sqlite
DB_FOREIGN_KEYS=true

справка

Выполним первую миграцию базы данных

php artisan migrate

Теперь мы можем увидеть изменения в базе данных вот так

php artisan db:show

Все миграции применены.

Теперь нам нужно нечто похожее на записи WordPress. Если вы когда-нибудь заглядывали в таблицы WordPress, то знаете, что там есть таблица wp_posts. Давайте создадим такую же

php artisan make:model Post

Эта команда создаст модель Post. Теперь создадим миграцию, чтобы применить изменения в базе данных.

php artisan make:migration "create posts table"

Теперь откроем миграцию и изменим код следующим образом:

$table->string('title');
$table->string('slug')->nullable();
$table->text('excerpt')->nullable();
$table->longText('content')->nullable();
$table->dateTime('published_at')->nullable();
$table->foreignIdFor(\App\Models\User::class)->constrained();

Читайте также: Как продумать ограничения тарифных планов подписки или посмотрите бесплатные плагины для WordPress, которые мы делаем.

Узнали из этой статьи что-то новое?

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

    Никакого спама. Отписаться можно в любой момент.