💻 Разработчикам

Ru-CMS — модульная CMS на Laravel 12.x и PHP 8.4+ с архитектурой HMVC, темизацией и редактором TinyMCE 7. Эта страница — быстрый «onboarding» по структуре, модулям и расширению.

HMVC Blade Tailwind TinyMCE 7 Prism
Обновлено: 12.10.2025 Исходники: GitHub

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. Как поучаствовать

  1. Сделайте форк и отдельную ветку.
  2. Добавьте модуль/исправление + тест (где возможно).
  3. Откройте PR с описанием и скриншотами UI при визуальных изменениях.

Последнее обновление: 12.10.2025