PHPackages                             aichadigital/lara-content - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. aichadigital/lara-content

ActiveLibrary[Admin Panels](/categories/admin)

aichadigital/lara-content
=========================

Content management package for Laravel with pages, posts, blocks and menus. Blade + Livewire, multilingual support.

v0.2.0(1mo ago)015[3 issues](https://github.com/AichaDigital/lara-content/issues)[1 PRs](https://github.com/AichaDigital/lara-content/pulls)AGPL-3.0-or-laterPHPPHP ^8.3CI passing

Since Apr 22Pushed 1mo agoCompare

[ Source](https://github.com/AichaDigital/lara-content)[ Packagist](https://packagist.org/packages/aichadigital/lara-content)[ Docs](https://github.com/AichaDigital/lara-content)[ GitHub Sponsors](https://github.com/:vendor_name)[ RSS](/packages/aichadigital-lara-content/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (15)Versions (6)Used By (0)

Lara Content
============

[](#lara-content)

> **ALPHA VERSION**: This package is in early development. The API may change without notice. Not recommended for production use yet.

[![Latest Version](https://camo.githubusercontent.com/3aad976abba29d9b115fe4e30bddee4e31781b1f6d50c8c7b53c8b166ba5d258/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f61696368616469676974616c2f6c6172612d636f6e74656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aichadigital/lara-content)[![Total Downloads](https://camo.githubusercontent.com/f08ece19756b5c42390c67f6d17d0792589333d5e100afb68824aa10148f2bf2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f61696368616469676974616c2f6c6172612d636f6e74656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aichadigital/lara-content)[![Tests](https://camo.githubusercontent.com/0f5f5ce93d5c16b13ae7865725d9b4ca0ee3b3d947d4b7d8fb8bbe1124e1ea5f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f41696368614469676974616c2f6c6172612d636f6e74656e742f74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/AichaDigital/lara-content/actions?query=workflow%3Arun-tests+branch%3Amain)[![Code Coverage](https://camo.githubusercontent.com/47705f645dd729e214be8b1957a9d5f76a7f7248f2834e1029827e9f1ededa34/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f41696368614469676974616c2f6c6172612d636f6e74656e743f7374796c653d666c61742d737175617265266c6f676f3d636f6465636f76)](https://codecov.io/gh/AichaDigital/lara-content)[![PHPStan level 6](https://camo.githubusercontent.com/4d6f780caf0316a9bb11367ed840c90cc62c491e59d7b9ff4ccd854950016679/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230362d677265656e2e7376673f7374796c653d666c61742d737175617265266c6f676f3d706870)](https://phpstan.org/)[![PHP Version](https://camo.githubusercontent.com/125e24a155bcb5f7914b502f15324e92e6ab297d5f2ba67fa4046a8d8affeb43/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f61696368616469676974616c2f6c6172612d636f6e74656e742e7376673f7374796c653d666c61742d737175617265266c6f676f3d706870)](https://packagist.org/packages/aichadigital/lara-content)[![Laravel Version](https://camo.githubusercontent.com/18f881b50e044a91960c1023095094599e65c156497c42fffd139e2e14059fc7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e7825323025374325323031332e782d7265642e7376673f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c)](https://laravel.com)[![License](https://camo.githubusercontent.com/225d55a4dccf3027256d670cfa43cba78d7a5049a7e347bc1179f3f89bcb9b9b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f61696368616469676974616c2f6c6172612d636f6e74656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aichadigital/lara-content)

Content management package for Laravel with pages, posts, blocks and menus. Supports Blade templates with optional Livewire components for interactivity. Includes multilingual support via Spatie Translatable.

Features
--------

[](#features)

- **Pages**: Flexible page system with customizable layouts and block zones
- **Posts**: Blog/news posts with author attribution and publishing workflow
- **Menus**: Hierarchical menu system with nested items
- **Blocks**: Modular content blocks (HTML, Recent Posts, Menu, Contact Form)
- **Layouts**: Pre-built page layouts (Single, Sidebar Left/Right, Two/Three Column)
- **Multilingual**: Full translation support via spatie/laravel-translatable
- **Extensible**: Register custom layouts and blocks via registries
- **Secure**: HTML sanitization with configurable allowed tags

Requirements
------------

[](#requirements)

- PHP 8.3+
- Laravel 12+
- Livewire 3+ (optional, for interactive blocks)
- **`users.id` UUID v7 char(36)** — `lara-content` is UUID-first (see [ADR-001](docs/ADR-001-uuid-first.md)). The consumer app's `users` table must use UUID v7 as primary key. Setup guide shared with the AichaDigital umbrella: [aichadigital/larabill `setup-uuid.md`](https://github.com/AichaDigital/larabill/blob/main/docs/setup-uuid.md).

Installation
------------

[](#installation)

Install via composer:

```
composer require aichadigital/lara-content
```

Publish and run migrations:

```
php artisan vendor:publish --tag="lara-content-migrations"
php artisan migrate
```

Publish the config file:

```
php artisan vendor:publish --tag="lara-content-config"
```

Optionally publish views for customization:

```
php artisan vendor:publish --tag="lara-content-views"
```

Configuration
-------------

[](#configuration)

Key configuration options in `config/content.php`:

```
return [
    // Author model for posts (must have UUID v7 char(36) primary key)
    'author_model' => env('CONTENT_AUTHOR_MODEL', 'App\\Models\\User'),

    // Cache settings
    'cache' => [
        'enabled' => env('CONTENT_CACHE_ENABLED', true),
        'default_ttl' => env('CONTENT_CACHE_TTL', 3600),
    ],

    // Security: allowed HTML tags and attributes
    'security' => [
        'allowed_tags' => ['p', 'br', 'strong', 'em', 'a', 'img', ...],
        'allowed_attributes' => [...],
    ],
];
```

Usage
-----

[](#usage)

### Pages

[](#pages)

Pages support flexible layouts with multiple content zones:

```
use AichaDigital\LaraContent\Models\Page;

// Create a page
$page = Page::create([
    'title' => 'About Us',
    'slug' => 'about-us',
    'layout' => 'sidebar-right',
    'status' => 'published',
]);

// Add blocks to zones
$page->blocks()->create([
    'zone' => 'main',
    'block_type' => 'html',
    'content' => ['html' => 'Welcome to our company...'],
    'order' => 1,
]);
```

### Posts

[](#posts)

Blog posts with author attribution:

```
use AichaDigital\LaraContent\Models\Post;

$post = Post::create([
    'title' => 'Getting Started',
    'slug' => 'getting-started',
    'content' => '# Introduction...',
    'author_id' => auth()->id(),
    'status' => 'published',
    'published_at' => now(),
]);
```

### Menus

[](#menus)

Hierarchical menus with nested items:

```
use AichaDigital\LaraContent\Models\Menu;

$menu = Menu::create([
    'name' => 'Main Navigation',
    'slug' => 'main-nav',
]);

$menu->items()->create([
    'title' => 'Home',
    'url' => '/',
    'order' => 1,
]);
```

### Blocks

[](#blocks)

Render blocks in your views:

```
@foreach($page->blocks as $block)
    {!! app(BlockRenderer::class)->render($block) !!}
@endforeach
```

Available Layouts
-----------------

[](#available-layouts)

SlugNameZones`single`Single Columnmain`sidebar-left`Sidebar Leftmain, sidebar`sidebar-right`Sidebar Rightmain, sidebar`two-column`Two Columnleft, right`three-column`Three Columnleft, center, rightAvailable Blocks
----------------

[](#available-blocks)

SlugNameInteractiveDescription`html`HTML BlockNoRaw HTML content`recent-posts`Recent PostsNoList of recent posts`menu`Menu BlockNoRender a menu`contact-form`Contact FormYesLivewire contact formExtending
---------

[](#extending)

### Custom Layouts

[](#custom-layouts)

Register custom layouts in your service provider:

```
use AichaDigital\LaraContent\Registries\LayoutRegistry;
use App\Content\Layouts\CustomLayout;

public function boot(): void
{
    app(LayoutRegistry::class)->register(new CustomLayout());
}
```

### Custom Blocks

[](#custom-blocks)

Register custom blocks:

```
use AichaDigital\LaraContent\Registries\BlockRegistry;
use App\Content\Blocks\CustomBlock;

public function boot(): void
{
    app(BlockRegistry::class)->register(new CustomBlock());
}
```

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for recent changes.

License
-------

[](#license)

AGPL-3.0-or-later. See [License File](LICENSE.md) for details.

---

Lara Content (Español)
======================

[](#lara-content-español)

> **VERSION ALPHA**: Este paquete está en desarrollo inicial. La API puede cambiar sin previo aviso. No recomendado para producción todavía.

Paquete de gestión de contenido para Laravel con páginas, posts, bloques y menús. Soporta plantillas Blade con componentes Livewire opcionales para interactividad. Incluye soporte multilingüe via Spatie Translatable.

Características
---------------

[](#características)

- **Páginas**: Sistema flexible de páginas con layouts personalizables y zonas de bloques
- **Posts**: Posts de blog/noticias con atribución de autor y flujo de publicación
- **Menús**: Sistema jerárquico de menús con elementos anidados
- **Bloques**: Bloques de contenido modulares (HTML, Posts Recientes, Menú, Formulario de Contacto)
- **Layouts**: Layouts predefinidos (Una Columna, Sidebar Izquierda/Derecha, Dos/Tres Columnas)
- **Multilingüe**: Soporte completo de traducciones via spatie/laravel-translatable
- **Extensible**: Registra layouts y bloques personalizados via registries
- **Seguro**: Sanitización HTML con tags permitidos configurables

Requisitos
----------

[](#requisitos)

- PHP 8.3+
- Laravel 12+
- Livewire 3+ (opcional, para bloques interactivos)
- **`users.id` UUID v7 char(36)** — `lara-content` es UUID-first (ver [ADR-001](docs/ADR-001-uuid-first.md)). La tabla `users` de la app consumidora debe usar UUID v7 como clave primaria. Guía de setup compartida con el paraguas AichaDigital: [aichadigital/larabill `setup-uuid.md`](https://github.com/AichaDigital/larabill/blob/main/docs/setup-uuid.md).

Instalación
-----------

[](#instalación)

Instalar via composer:

```
composer require aichadigital/lara-content
```

Publicar y ejecutar migraciones:

```
php artisan vendor:publish --tag="lara-content-migrations"
php artisan migrate
```

Publicar archivo de configuración:

```
php artisan vendor:publish --tag="lara-content-config"
```

Opcionalmente publicar vistas para personalización:

```
php artisan vendor:publish --tag="lara-content-views"
```

Uso
---

[](#uso)

### Páginas

[](#páginas)

```
use AichaDigital\LaraContent\Models\Page;

// Crear una página
$page = Page::create([
    'title' => 'Sobre Nosotros',
    'slug' => 'sobre-nosotros',
    'layout' => 'sidebar-right',
    'status' => 'published',
]);

// Añadir bloques a zonas
$page->blocks()->create([
    'zone' => 'main',
    'block_type' => 'html',
    'content' => ['html' => 'Bienvenido a nuestra empresa...'],
    'order' => 1,
]);
```

### Posts

[](#posts-1)

```
use AichaDigital\LaraContent\Models\Post;

$post = Post::create([
    'title' => 'Primeros Pasos',
    'slug' => 'primeros-pasos',
    'content' => '# Introducción...',
    'author_id' => auth()->id(),
    'status' => 'published',
    'published_at' => now(),
]);
```

### Menús

[](#menús)

```
use AichaDigital\LaraContent\Models\Menu;

$menu = Menu::create([
    'name' => 'Navegación Principal',
    'slug' => 'nav-principal',
]);

$menu->items()->create([
    'title' => 'Inicio',
    'url' => '/',
    'order' => 1,
]);
```

Layouts Disponibles
-------------------

[](#layouts-disponibles)

SlugNombreZonas`single`Una Columnamain`sidebar-left`Sidebar Izquierdamain, sidebar`sidebar-right`Sidebar Derechamain, sidebar`two-column`Dos Columnasleft, right`three-column`Tres Columnasleft, center, rightBloques Disponibles
-------------------

[](#bloques-disponibles)

SlugNombreInteractivoDescripción`html`Bloque HTMLNoContenido HTML`recent-posts`Posts RecientesNoLista de posts recientes`menu`Bloque MenúNoRenderiza un menú`contact-form`Formulario ContactoSíFormulario LivewireExtensión
---------

[](#extensión)

### Layouts Personalizados

[](#layouts-personalizados)

```
use AichaDigital\LaraContent\Registries\LayoutRegistry;
use App\Content\Layouts\MiLayout;

public function boot(): void
{
    app(LayoutRegistry::class)->register(new MiLayout());
}
```

### Bloques Personalizados

[](#bloques-personalizados)

```
use AichaDigital\LaraContent\Registries\BlockRegistry;
use App\Content\Blocks\MiBloque;

public function boot(): void
{
    app(BlockRegistry::class)->register(new MiBloque());
}
```

Tests
-----

[](#tests)

```
composer test
```

Licencia
--------

[](#licencia)

AGPL-3.0-or-later. Ver [archivo de licencia](LICENSE.md) para detalles.

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance91

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~17 days

Total

2

Last Release

47d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0a4694c48c325d3dfbc4c43d97c2617f9317d7a447971750c338f943a88bd164?d=identicon)[abkrim](/maintainers/abkrim)

---

Top Contributors

[![abkrim](https://avatars.githubusercontent.com/u/1238625?v=4)](https://github.com/abkrim "abkrim (5 commits)")

---

Tags

laravelcontentcmslivewirepagesblockspostsmenusAichaDigital

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/aichadigital-lara-content/health.svg)

```
[![Health](https://phpackages.com/badges/aichadigital-lara-content/health.svg)](https://phpackages.com/packages/aichadigital-lara-content)
```

###  Alternatives

[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.3M42](/packages/spatie-laravel-pdf)[guava/filament-knowledge-base

A filament plugin that adds a knowledge base and help to your filament panel(s).

210140.2k1](/packages/guava-filament-knowledge-base)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[lara-zeus/sky

Lara-zeus sky is simple CMS for your website. It includes posts, pages, tags, and categories.

21428.2k4](/packages/lara-zeus-sky)[finity-labs/fin-mail

A powerful email template manager and composer for Filament with dynamic token replacement, template versioning, and inline email sending.

272.7k1](/packages/finity-labs-fin-mail)[mradder/filament-logger

Audit logging, activity tracking, exports, alerts, and dashboards for Filament admin panels.

2310.5k](/packages/mradder-filament-logger)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
