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(3mo ago)017[1 issues](https://github.com/AichaDigital/lara-content/issues)AGPL-3.0-or-laterPHPPHP ^8.3CI passing

Since Apr 22Pushed 2w 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 1w ago

READMEChangelogDependencies (15)Versions (8)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)[![Pipeline](https://camo.githubusercontent.com/07c3f96412d8c1cedf08db3048ce97b2b36944a8c1ada1f0c21d77932ec59e9d/68747470733a2f2f6769746c61622e636173747269732e636f6d2f61696368616469676974616c2f6c6172612d636f6e74656e742f6261646765732f6d61696e2f706970656c696e652e7376673f7374796c653d666c61742d737175617265)](https://gitlab.castris.com/aichadigital/lara-content/-/pipelines)[![Coverage](https://camo.githubusercontent.com/7681cddd620a8a66229b005c5be2bce1a38362f998fe9458de05a1c585fbe8f6/68747470733a2f2f6769746c61622e636173747269732e636f6d2f61696368616469676974616c2f6c6172612d636f6e74656e742f6261646765732f6d61696e2f636f7665726167652e7376673f7374796c653d666c61742d737175617265)](https://gitlab.castris.com/aichadigital/lara-content/-/pipelines)[![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)

> Development happens on [gitlab.castris.com](https://gitlab.castris.com/aichadigital/lara-content). The GitHub repository is a read-only distribution mirror: issues and pull requests opened there are not seen.

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

39

—

LowBetter than 84% of packages

Maintenance90

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90.3% 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

92d 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 (28 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (3 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

[guava/filament-knowledge-base

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

210164.0k3](/packages/guava-filament-knowledge-base)[finity-labs/fin-mail

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

316.8k2](/packages/finity-labs-fin-mail)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3915.5k](/packages/rawilk-profile-filament-plugin)[statikbe/laravel-filament-flexible-content-blocks

The Laravel Filament Flexible Content Blocks package helps you to easily create content in Filament for any model, with predefined or custom blocks, and foreach block an extendable Blade view component.

17927.9k6](/packages/statikbe-laravel-filament-flexible-content-blocks)[mradder/filament-logger

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

2324.4k1](/packages/mradder-filament-logger)

PHPackages © 2026

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