diff --git a/app/Services/MenuService.php b/app/Services/MenuService.php index c56ee10..f8a2e22 100644 --- a/app/Services/MenuService.php +++ b/app/Services/MenuService.php @@ -3,6 +3,8 @@ namespace App\Services; use App\Models\Page; +use App\Models\MenuTemplate; +use App\Models\Setting; use Illuminate\Support\Facades\Cache; class MenuService @@ -10,10 +12,9 @@ class MenuService /** * Render menu structure as HTML * - * @param array|null $menuTemplate Optional menu template data * @return string Rendered menu HTML */ - public static function render(?array $menuTemplate = null): string + public static function render(): string { // Get menu items from Pages $menuItems = Cache::remember('menu_items', 3600, function () { @@ -31,15 +32,21 @@ class MenuService ->get(); }); - // If menu template is provided, use it to wrap the menu - if ($menuTemplate && !empty($menuTemplate['html_content'])) { - $html = $menuTemplate['html_content']; + // Get menu template from Settings + $menuTemplateId = Setting::get('menu_template_id'); + + if ($menuTemplateId) { + $menuTemplate = MenuTemplate::where('is_active', true)->find($menuTemplateId); - // Replace {menu} placeholder with rendered menu structure - $renderedMenu = self::buildMenuStructure($menuItems); - $html = str_replace('{menu}', $renderedMenu, $html); - - return $html; + if ($menuTemplate && !empty($menuTemplate->html_content)) { + $html = $menuTemplate->html_content; + + // Replace {menu} placeholder with rendered menu structure + $renderedMenu = self::buildMenuStructure($menuItems); + $html = str_replace('{menu}', $renderedMenu, $html); + + return $html; + } } // Otherwise, return default menu structure diff --git a/docs/DYNAMIC_TEMPLATE_SYSTEM.md b/docs/DYNAMIC_TEMPLATE_SYSTEM.md index 2c292c0..dc15200 100644 --- a/docs/DYNAMIC_TEMPLATE_SYSTEM.md +++ b/docs/DYNAMIC_TEMPLATE_SYSTEM.md @@ -791,17 +791,103 @@ protected $casts = [ feature/dynamic-template-system ``` +## Menü Template Sistemi + +### Kurulum + +Menü template sistemi global bir ayardır. Admin panelden oluşturduğunuz menü template'ini Settings'e manuel olarak eklemeniz gerekir: + +#### 1. Admin Panelde Menü Template Oluştur +``` +Admin Panel → Menü Şablonları → Yeni Menü Şablonu +``` + +**Örnek Menü Template:** +```html + +``` + +#### 2. Settings'e Menü Template ID Ekle +Admin panelden yeni bir Setting oluşturun: +- **Key:** `menu_template_id` +- **Type:** `integer` +- **Value:** Menü template ID'niz (örn: 1, 2, 3) +- **Group:** `general` + +#### 3. Kullanım + +Menü otomatik olarak render edilir. Header template'inde `{menu}` placeholder'ı kullanabilirsiniz: + +**Header Template Örneği:** +```html + +``` + +**Çıktı:** +```html + +``` + +### Menü Rendering + +Menü otomatik olarak Pages tablosundan alınır: +- Sadece `status = 'published'` olanlar +- Sadece `show_in_menu = true` olanlar +- Hierarchical yapı korunur (parent_id ile) +- `sort_order` ile sıralanır + +### Cache + +Menü öğeleri 1 saat süreyle cache'lenir. Cache'i temizlemek için: + +```php +use App\Services\MenuService; + +MenuService::clearCache(); +``` + ## İmplement Adımları 1. ✅ Migrations oluştur (4 adet) -2. ✅ Model'ler oluştur (3 adet) -3. ✅ Filament Resources oluştur (3 adet) +2. ✅ Model'ler oluştur (4 adet) +3. ✅ Filament Resources oluştur (4 adet) 4. ✅ TemplateService helper oluştur 5. ✅ PageForm'u güncelle (template tabs ekle) 6. ✅ PageRenderer component oluştur -7. ✅ Lang dosyaları oluştur (6 adet) +7. ✅ Lang dosyaları oluştur (8 adet) 8. ✅ Frontend route ve controller güncelle -9. ✅ Test +9. ✅ Menü Service eklendi +10. ✅ Test ---