Add CMS module

Static content pages (CmsPage) manageable from a new Filament resource and
readable via a public API endpoint. Wired into the admin panel with its own
CmsPlugin and "CMS" navigation group.
This commit is contained in:
Nyan Lin Paing
2026-08-30 14:51:57 +07:00
parent 231f5679ef
commit 76f75c5581
26 changed files with 600 additions and 1 deletions
@@ -0,0 +1,31 @@
<?php
namespace Modules\Cms\Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Modules\Cms\Models\CmsPage;
/**
* @extends Factory<CmsPage>
*/
class CmsPageFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'page' => fake()->unique()->slug(),
'title' => fake()->sentence(3),
'mm_title' => fake()->sentence(3),
'meta_tags' => fake()->words(3, true),
'meta_keywords' => fake()->words(3, true),
'content' => fake()->paragraphs(3, true),
'mm_content' => fake()->paragraphs(3, true),
'is_active' => true,
];
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('cms_pages', function (Blueprint $table) {
$table->id();
$table->string('page')->unique();
$table->string('title');
$table->string('mm_title');
$table->string('meta_tags')->nullable();
$table->string('meta_keywords')->nullable();
$table->longText('content')->nullable();
$table->longText('mm_content')->nullable();
$table->boolean('is_active')->default(true);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('cms_pages');
}
};