From ef1e8e8d5c03f430e340dabef634bcf0529ef766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Mon, 3 Nov 2025 15:54:03 -0300 Subject: [PATCH] Implement dynamic menu template rendering: Updated MenuService to retrieve and render menu templates from Settings, integrating menu structure with dynamic HTML content. Enhanced documentation to include setup instructions for the menu template system, detailing creation, usage, and caching mechanisms. --- app/Services/MenuService.php | 27 ++++++---- docs/DYNAMIC_TEMPLATE_SYSTEM.md | 94 +++++++++++++++++++++++++++++++-- 2 files changed, 107 insertions(+), 14 deletions(-) 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 ---