💻 Разработчикам
Ru-CMS — модульная CMS на Laravel 12.x и PHP 8.4+ с архитектурой HMVC, темизацией и редактором TinyMCE 7. Эта страница — быстрый «onboarding» по структуре, модулям и расширению.
HMVC
Blade
Tailwind
TinyMCE 7
Prism
1. Стек и системные требования
- PHP 8.4+, расширения:
mbstring
,openssl
,pdo
,json
,fileinfo
. - СУБД: MySQL/MariaDB или PostgreSQL.
- Node.js для сборки фронтенда (Vite/Tailwind), Composer — для бэка.
- Веб-сервер nginx/Apache; очереди (redis) — по необходимости.
2. Быстрый старт / установка
Поддерживается установщик через /install (см. модуль Install).
# 1) Клонируем репозиторий
git clone https://github.com/Bulavackii/Ru-CMS.git
cd Ru-CMS
# 2) Backend
composer install
cp .env.example .env
php artisan key:generate
# 3) Frontend
npm install
npm run build # или npm run dev
# 4) Права и линк на публичные файлы
php artisan storage:link
# 5) Запускаем и проходим мастер установки
php artisan serve
# Открой http://127.0.0.1:8000/install
После мастера войдите в админ-панель, включите нужные модули и настройте тему.
3. Структура проекта (верхний уровень)
.
├─ app/
├─ config/
├─ modules/ ← автономные модули (HMVC)
│ ├─ News/
│ ├─ Categories/
│ ├─ Slideshow/
│ └─ ...
├─ public/
├─ resources/
│ ├─ views/ ← Blade-шаблоны
│ └─ css/js
├─ routes/
│ └─ web.php ← сборная витрина/главная
└─ vendor/
Каждый модуль в modules/
автономен: свои контроллеры, роуты, миграции, модели, вьюшки, провайдер, module.json
.
4. Создание модуля (шаблон)
modules/
└─ Blog/
├─ module.json
├─ Providers/BlogServiceProvider.php
├─ Routes/web.php
├─ Http/Controllers/Admin/PostController.php
├─ Http/Controllers/Frontend/PostController.php
├─ Models/Post.php
├─ Resources/views/admin/*.blade.php
└─ Resources/views/frontend/*.blade.php
module.json
{
"name": "Blog",
"version": "1.0.0",
"active": true,
"providers": ["Modules\\Blog\\Providers\\BlogServiceProvider"]
}
BlogServiceProvider.php (кратко)
<?php
namespace Modules\Blog\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;
class BlogServiceProvider extends ServiceProvider
{
public function boot(): void
{
$this->loadViewsFrom(__DIR__.'/../Resources/views', 'Blog');
Route::middleware('web')
->group(__DIR__.'/../Routes/web.php');
}
}
Routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use Modules\Blog\Http\Controllers\Frontend\PostController;
Route::get('/blog', [PostController::class, 'index'])->name('blog.index');
Модуль переносим между проектами без склейки с ядром.
5. Маршруты, шаблоны и блоки главной
- Главная собирает ленты по ключам в
$templateKeys
(routes/web.php
), шаблоны секций лежат вresources/views/frontend/templates/*
. - Карточки/пагинация унифицированы; переименование «Новости → Наши услуги» делается в шаблоне секции (
ourworks.blade.php
). - Каждая лента имеет свой
pageName
у пагинации для независимых страниц.
6. Темы и токены UI
- CSS-переменные темы прокидываются из
layouts.frontend
:--color-primary
,--color-text
,--color-bg
,--radius-md
и др. - Фон страницы —
--bg-image
из конфигурации активной темы. - Режим иконок:
fa
/bootstrap
/remix
/tabler
/lucide
; вывод через.
7. TinyMCE 7 в админ-редакторе
- Загрузка медиа — через модуль файлов; публичные пути —
storage:link
. - На фронте для превью чистим HTML:
Str::limit(strip_tags(...))
. - Видео/обложки детектятся регулярками:
<video>
,<source>
,<img>
.
8. Безопасность и качество
- Формы:
, серверная валидация
FormRequest
, honeypot на публичных. - Файлы: строгая валидация mime/размеров, хранение в
storage
. - Доступ к админке:
auth
+admin
. - Код-стайл: PSR-12, типы, раздельные импорты, пагинация/кэш где уместно.
9. Как поучаствовать
- Сделайте форк и отдельную ветку.
- Добавьте модуль/исправление + тест (где возможно).
- Откройте PR с описанием и скриншотами UI при визуальных изменениях.
Последнее обновление: 12.10.2025