Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ti Ext Pages Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps to First Use

  1. Installation:

    composer require tastyigniter/ti-ext-pages
    php artisan vendor:publish --provider="TastyIgniter\Pages\PagesServiceProvider"
    php artisan migrate
    
    • Ensure your project uses TastyIgniter v3.0.4+ (check composer.json for compatibility).
  2. Access Admin Panel:

    • Log in to the TastyIgniter admin dashboard (typically /admin).
    • Navigate to Pages and Menus sections under the extension’s sidebar menu.
  3. Create a Static Page:

    • Click "Add New" under Pages.
    • Fill in the Title, Slug, and Content (WYSIWYG editor available).
    • Save and preview via the generated URL (e.g., /pages/[slug]).
  4. Build a Menu:

    • Go to Menus > "Add New".
    • Define Menu Name (e.g., "Primary Navigation").
    • Add Menu Items (select Page, URL, or Custom Link type).
    • Set Sort Order and Parent Items for hierarchy.
    • Save and assign the menu to a Layout or Template in the frontend.
  5. Display Menu in Frontend:

    • Use the Blade directive in your template:
      @include('ti-ext-pages::menu', ['menu' => 'primary'])
      
    • Or fetch dynamically:
      $menu = \TastyIgniter\Pages\Models\Menu::with('items')->where('name', 'primary')->first();
      

First Use Case: FAQ Page with Navigation

  • Goal: Create an FAQ page and link it to a footer menu.
  • Steps:
    1. Create a Page titled "FAQ" with structured content (use WYSIWYG for headings/lists).
    2. Create a Menu (e.g., "Footer Links") and add the FAQ page as an item.
    3. Assign the menu to your footer template via Blade:
      @include('ti-ext-pages::menu', ['menu' => 'footer-links'])
      
    4. Verify the FAQ appears in the footer and is accessible via /pages/faq.

Implementation Patterns

Core Workflows

1. Content Management Workflow

  • Admin:
    • Pages: CRUD operations via the WYSIWYG interface. Supports rich text, images (upload via TastyIgniter’s media manager), and SEO fields (title, meta description).
    • Menus: Drag-and-drop sorting (fixed in v4.0.12) with nested items for hierarchical navigation.
  • Frontend:
    • Pages render as Blade templates (resources/views/ti-ext-pages/pages.blade.php by default).
    • Customize via template overrides (publish the view and modify):
      php artisan vendor:publish --tag=ti-ext-pages-views
      

2. Menu Integration Patterns

  • Static Menus:
    • Assign menus to specific layouts or global templates (e.g., app.blade.php).
    • Example: Header menu in header.blade.php:
      @if($menu = \TastyIgniter\Pages\Models\Menu::where('name', 'header')->first())
          @include('ti-ext-pages::menu', ['menu' => $menu])
      @endif
      
  • Dynamic Menus:
    • Fetch menus by route or user role (extend the Menu model):
      // Example: Fetch menu for authenticated users
      $userMenu = \TastyIgniter\Pages\Models\Menu::where('name', 'user-dashboard')->first();
      
  • Fallback Logic:
    • Use Laravel’s optional() to avoid errors:
      @includeWhen($menu = \TastyIgniter\Pages\Models\Menu::find(1), 'ti-ext-pages::menu', ['menu' => $menu])
      

3. Extending Functionality

  • Custom Page Types:
    • Extend the 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',
          ];
      }
      
    • Update the admin form via service provider:
      // app/Providers/TiPagesServiceProvider.php
      public function boot() {
          \TastyIgniter\Pages\Http\Livewire\PagesForm::macro('addField', function($field) {
              $this->fields[] = $field;
          });
      }
      
  • Custom Menu Renderers:
    • Override the default Blade view (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>
      

4. Performance Optimization

  • Caching Menus:
    • Cache menus in the 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');
              }]);
          });
      }
      
    • Use Laravel’s cache for frequently accessed menus:
      $menu = \Cache::remember("menu.{$menuId}", now()->addHours(1), function() use ($menuId) {
          return \TastyIgniter\Pages\Models\Menu::find($menuId);
      });
      
  • Lazy-Loading Pages:
    • Load page content only when needed (e.g., via AJAX):
      // Fetch page content dynamically
      fetch(`/api/pages/${slug}`)
          .then(response => response.text())
          .then(html => document.getElementById('page-content').innerHTML = html);
      

Integration Tips

Laravel-Specific Adjustments

  1. Route Conflicts:
    • The extension uses /pages/{slug} by default. Override in routes/web.php:
      Route::prefix('content')->group(function() {
          Route::get('/{slug}', [\TastyIgniter\Pages\Http\Controllers\PagesController::class, 'show']);
      });
      
  2. Authentication:
    • Restrict admin access via middleware:
      // app/Http/Kernel.php
      'ti-ext-pages' => \TastyIgniter\Pages\Http\Middleware\Authenticate::class,
      
  3. Localization:
    • Extend the Page model for multilingual support:
      use Spatie\Translatable\HasTranslations;
      
      class Page extends \TastyIgniter\Pages\Models\Page {
          use HasTranslations;
          public $translatable = ['title', 'content'];
      }
      

TastyIgniter-Specific Features

  1. Layout Integration:
    • Assign menus to TastyIgniter layouts via the admin panel (no code needed).
  2. Media Manager:
    • Use TastyIgniter’s built-in media uploader for page images (accessible via the WYSIWYG toolbar).
  3. SEO Meta Tags:
    • Leverage TastyIgniter’s SEO extension to auto-generate meta tags from page fields.

Gotchas and Tips

Pitfalls and Debugging

  1. Menu Sorting Bug (v4.0.11 and below):

    • Issue: Menu items may not sort alphabetically due to a fixed bug in v4.0.12.
    • Workaround: Manually set sort_order or upgrade:
      composer require tastyigniter/ti-ext-pages:^4.0.12
      
  2. WYSIWYG Editor Missing:

    • Cause: Editor may not load if TastyIgniter’s assets aren’t published.
    • Fix: Run:
      php artisan vendor:publish --tag=ti-ext-pages-assets
      npm run dev  # or npm run build
      
  3. Validation Errors on Menu Creation:

    • Issue: URL-type menu items may fail validation
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours