Как создать собственную систему управления контентом (наподобие 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, которые мы делаем.