hasComposition()

* renderRegion()
* draft and published-state handling
* document and placement scheduling
* disabled-placement filtering
* ordered region rendering
* safe fallback when composition tables or document views are missing
* compatibility with common alternative column names
This commit is contained in:
Mark Gregory
2026-07-27 09:43:42 +01:00
parent a211b10e29
commit c972808d0a
22 changed files with 455 additions and 754 deletions
+7 -9
View File
@@ -2,9 +2,9 @@
use Illuminate\Support\Facades\Route;
use Modules\Content\Http\Controllers\ContentDocumentController;
use Modules\Content\Http\Controllers\PageCompositionController;
use Modules\Content\Http\Controllers\PageComposerController;
Route::middleware(['web', 'auth', 'verified'])->prefix('admin/content')->name('content.')->group(function (): void {
Route::middleware(['web', 'auth'])->prefix('admin/content')->name('content.')->group(function (): void {
Route::get('/', [ContentDocumentController::class, 'index'])->name('index');
Route::get('/documents/create', [ContentDocumentController::class, 'create'])->name('documents.create');
Route::post('/documents', [ContentDocumentController::class, 'store'])->name('documents.store');
@@ -13,11 +13,9 @@ Route::middleware(['web', 'auth', 'verified'])->prefix('admin/content')->name('c
Route::post('/documents/{document}/duplicate', [ContentDocumentController::class, 'duplicate'])->name('documents.duplicate');
Route::delete('/documents/{document}', [ContentDocumentController::class, 'destroy'])->name('documents.destroy');
Route::get('/pages/{pageKey}', [PageCompositionController::class, 'edit'])->name('pages.edit');
Route::get('/pages/{pageKey}/preview', [PageCompositionController::class, 'preview'])->name('pages.preview');
Route::post('/pages/{pageKey}/placements', [PageCompositionController::class, 'store'])->name('placements.store');
Route::put('/placements/{placement}', [PageCompositionController::class, 'update'])->name('placements.update');
Route::delete('/placements/{placement}', [PageCompositionController::class, 'destroy'])->name('placements.destroy');
Route::post('/placements/{placement}/duplicate', [PageCompositionController::class, 'duplicate'])->name('placements.duplicate');
Route::post('/pages/{pageKey}/reorder', [PageCompositionController::class, 'reorder'])->name('placements.reorder');
Route::get('/pages/{pageKey}', [PageComposerController::class, 'edit'])->name('pages.edit');
Route::post('/pages/{pageKey}/placements', [PageComposerController::class, 'store'])->name('pages.placements.store');
Route::patch('/pages/{pageKey}/placements/{placement}', [PageComposerController::class, 'update'])->name('pages.placements.update');
Route::delete('/pages/{pageKey}/placements/{placement}', [PageComposerController::class, 'destroy'])->name('pages.placements.destroy');
Route::post('/pages/{pageKey}/reorder', [PageComposerController::class, 'reorder'])->name('pages.reorder');
});