diff --git a/.cursor/rules/frontend-theme.mdc b/.cursor/rules/frontend-theme.mdc new file mode 100644 index 0000000..30b4ca9 --- /dev/null +++ b/.cursor/rules/frontend-theme.mdc @@ -0,0 +1,138 @@ +--- +description: Public HTML şablonlarını Laravel Blade yapısına dönüştürme kuralları +globs: resources/views/**/*.blade.php, public/html/**/*.html +--- +# Frontend Theme Implementation Rules + +Bu kurallar, `public/html` dizinindeki statik HTML şablonlarının Laravel Blade yapısına dönüştürülmesi sırasında geçerlidir. + +## 1. Kaynak ve Hedef Yapısı + +- **Kaynak (Source):** `public/html/` dizinindeki `.html` dosyaları referans alınır. +- **Hedef (Target):** `resources/views/front/` dizini altında Blade dosyaları oluşturulur. +- **Assets (Varlıklar):** Statik dosyalar `public/html/assets` altındadır. Blade içinde erişim `asset('html/assets/...')` şeklinde olmalıdır. + +## 2. Bileşen (Component) Yapısı + +Yeni UI bileşenleri oluştururken aşağıdaki isimlendirme ve klasör yapısını kullan: + +- **Layout:** `resources/views/layouts/front.blade.php` (Master layout) +- **Header:** `resources/views/components/front/header.blade.php` -> `` +- **Footer:** `resources/views/components/front/footer.blade.php` -> `` +- **Page Sections:** `resources/views/components/front/sections/` altında: + - Hero/Slider -> `` + - Features -> `` + - About -> `` + +## 3. Kod Dönüştürme Kuralları + +### A. CSS ve Sınıflar +- **ÖNEMLİ:** Şablondaki `!` önekli Tailwind sınıflarını (örn: `!bg-[#f0f0f8]`, `!absolute`) KESİNLİKLE KORU. Bunlar temanın çalışması için kritiktir. +- HTML'deki `class="..."` yapılarını birebir kopyala, Tailwind sınıflarını sadeleştirme veya değiştirme. + +### B. Asset Bağlantıları +HTML içindeki: +```html + + +``` +Blade içinde şu şekilde olmalı: +```blade + + +``` + +### C. Dinamik İçerik +- Metinleri `{{ __('theme.key') }}` şeklinde lokalizasyon fonksiyonu ile sar. +- Tekrarlayan elemanları (örn: slider itemları, hizmet kutuları) `@foreach` döngüsü içine al. + +## 4. Layout Şablonu (Örnek) + +`front.blade.php` layout dosyası şu yapıda olmalıdır: + +```blade + + + + + + @yield('title', config('app.name')) + + @stack('styles') + + + + + +
+ @yield('content') +
+ + + + + @stack('scripts') + + +``` + +## 5. CMS Entegrasyonu (Dinamik Şablon Seçimi) + +Kullanıcı, bir prompt ile belirli bir section, header veya footer şablonunun kullanılmasını istediğinde (örn: "Header V1 ve About Section 3 kullan"), aşağıdaki stratejiyi izle: + +1. **Veritabanı Araması:** İlgili şablonun veritabanında (genellikle `sections` veya `templates` tablosunda) var olduğunu varsay. +2. **Seeder/Migration Oluşturma:** Kullanıcının istediği yapıyı oluşturmak için bir Laravel Seeder veya Migration kodu üret. Bu kod: + - İlgili şablonu (title veya slug ile) bulmalı. + - Sayfa veya layout ile ilişkilendirmeli. + +**Örnek Senaryo:** "Ana sayfada 'Hero Slider V2' ve 'Services Grid' kullan." +**Üretilecek Kod (Örnek):** +```php +// DatabaseSeeder.php veya özel bir seeder içinde +$homePage = Page::firstOrCreate(['slug' => 'home'], ['title' => 'Ana Sayfa']); + +// Şablonları bul +$heroSection = Section::where('title', 'like', '%Hero Slider V2%')->first(); +$servicesSection = Section::where('title', 'like', '%Services Grid%')->first(); + +// İlişkilendir (Proje yapısına göre attach veya update) +if ($heroSection) { + // Örnek ilişkilendirme mantığı + $homePage->sections()->attach($heroSection->id, ['order' => 1]); +} +``` + +## 6. Otomatik Menü ve Sayfa Yapılandırması + +Kullanıcı "Şu yapıda bir menü tasarla" dediğinde (örn: "Ana Sayfa, Kurumsal > Hakkımızda, İletişim"): + +1. **Page Modeli:** İstenen sayfaların veritabanında var olup olmadığını kontrol eden ve yoksa oluşturan bir kod bloğu hazırla. +2. **Menu Modeli:** Sayfaları hiyerarşik olarak menü yapısına ekleyen bir kod bloğu hazırla. +3. **Çıktı:** Bu işlemleri gerçekleştirecek bir `php artisan tinker` komutu veya `MenuSeeder` sınıfı sun. + +**Örnek Prompt:** "Menü: Ana Sayfa, Kurumsal (Hakkımızda, Vizyon), İletişim" +**Beklenen Aksiyon:** +```php +// 1. Sayfaları Oluştur +$pages = [ + 'Ana Sayfa' => '/', + 'Kurumsal' => '#', + 'Hakkımızda' => '/kurumsal/hakkimizda', + 'Vizyon' => '/kurumsal/vizyon', + 'İletişim' => '/iletisim' +]; + +foreach ($pages as $title => $url) { + Page::firstOrCreate(['title' => $title], ['slug' => Str::slug($title)]); +} + +// 2. Menü Yapısını Kur +$mainMenu = Menu::firstOrCreate(['name' => 'Main Menu']); +// ... Menü elemanlarını ekleyen kod ... +``` + +## 7. Analiz Stratejisi +Bir sayfayı dönüştürürken: +1. Önce `public/html` altındaki ilgili `.html` dosyasını oku. +2. `header` ve `footer` kısımlarını ayır. +3. `main` içeriğindeki her bir `section` veya mantıksal bloğu ayrı bir Blade component olarak çıkar.