tastyigniter/ti-ext-pages
TastyIgniter Pages extension lets you create and manage static pages and navigation menus from the admin UI. Includes a WYSIWYG editor for page content and reusable static menus for consistent frontend navigation.
Installation:
composer require tastyigniter/ti-ext-pages
php artisan vendor:publish --provider="TastyIgniter\Pages\PagesServiceProvider"
php artisan migrate
composer.json for compatibility).Access Admin Panel:
/admin).Create a Static Page:
/pages/[slug]).Build a Menu:
Display Menu in Frontend:
@include('ti-ext-pages::menu', ['menu' => 'primary'])
$menu = \TastyIgniter\Pages\Models\Menu::with('items')->where('name', 'primary')->first();
@include('ti-ext-pages::menu', ['menu' => 'footer-links'])
/pages/faq.resources/views/ti-ext-pages/pages.blade.php by default).php artisan vendor:publish --tag=ti-ext-pages-views
app.blade.php).header.blade.php:
@if($menu = \TastyIgniter\Pages\Models\Menu::where('name', 'header')->first())
@include('ti-ext-pages::menu', ['menu' => $menu])
@endif
Menu model):
// Example: Fetch menu for authenticated users
$userMenu = \TastyIgniter\Pages\Models\Menu::where('name', 'user-dashboard')->first();
optional() to avoid errors:
@includeWhen($menu = \TastyIgniter\Pages\Models\Menu::find(1), 'ti-ext-pages::menu', ['menu' => $menu])
Page model to add fields (e.g., published_at):
// app/Models/ExtendedPage.php
namespace App\Models;
use TastyIgniter\Pages\Models\Page as BasePage;
class ExtendedPage extends BasePage {
protected $casts = [
'published_at' => 'datetime',
];
}
// app/Providers/TiPagesServiceProvider.php
public function boot() {
\TastyIgniter\Pages\Http\Livewire\PagesForm::macro('addField', function($field) {
$this->fields[] = $field;
});
}
menu.blade.php) to modify output (e.g., add icons):
<!-- resources/views/vendor/ti-ext-pages/menu.blade.php -->
<ul class="nav">
@foreach($menu->items as $item)
<li class="nav-item">
<a href="{{ $item->url }}" class="nav-link">
{{ $item->title }}
@if($item->icon) <i class="{{ $item->icon }}"></i> @endif
</a>
</li>
@endforeach
</ul>
Menu model’s boot() method:
public static function boot() {
parent::boot();
static::addGlobalScope('cache', function (Builder $builder) {
return $builder->with(['items' => function($query) {
$query->orderBy('sort_order');
}]);
});
}
$menu = \Cache::remember("menu.{$menuId}", now()->addHours(1), function() use ($menuId) {
return \TastyIgniter\Pages\Models\Menu::find($menuId);
});
// Fetch page content dynamically
fetch(`/api/pages/${slug}`)
.then(response => response.text())
.then(html => document.getElementById('page-content').innerHTML = html);
/pages/{slug} by default. Override in routes/web.php:
Route::prefix('content')->group(function() {
Route::get('/{slug}', [\TastyIgniter\Pages\Http\Controllers\PagesController::class, 'show']);
});
// app/Http/Kernel.php
'ti-ext-pages' => \TastyIgniter\Pages\Http\Middleware\Authenticate::class,
Page model for multilingual support:
use Spatie\Translatable\HasTranslations;
class Page extends \TastyIgniter\Pages\Models\Page {
use HasTranslations;
public $translatable = ['title', 'content'];
}
Menu Sorting Bug (v4.0.11 and below):
sort_order or upgrade:
composer require tastyigniter/ti-ext-pages:^4.0.12
WYSIWYG Editor Missing:
php artisan vendor:publish --tag=ti-ext-pages-assets
npm run dev # or npm run build
Validation Errors on Menu Creation:
How can I help you explore Laravel packages today?