Kapsamlı Rehber

Tema ile Site Oluşturma

VARPLAS Tema Örneği Üzerinden Adım Adım Analiz

14 Ocak 2026
v1.0

📝 Basit Anlatım (Herkes İçin)

Bir tema tasarımını (HTML/CSS) gerçek bir çalışan siteye dönüştürmek için birçok adım gerekiyor. Bu rehber, VARPLAS teması örneğinde tüm adımları detaylandırıyor.

Özet: Ne Yapılacak?

8+
Widget Şablonu
15+
Tema Dosyası
5+
Sayfa
20+
Setting Değeri

📚 İçindekiler

1️⃣ Tema Dosyaları

📝 Basit Anlatım

Her tenant (site) kendi temasını kullanabilir. Tema dosyaları resources/views/themes/[tema-adi]/ klasöründe bulunur. Bulamazsa simple temasına fallback yapar.


resources/views/themes/varplas/
├── layouts/
│   └── app.blade.php              # Ana layout (head, body, scripts)
│
├── partials/
│   ├── header.blade.php           # Üst menü, logo, iletişim bilgisi
│   ├── footer.blade.php           # Alt bilgi, sosyal medya, linkler
│   ├── mega-menu.blade.php        # Ürün kategorileri mega menü
│   └── mobile-menu.blade.php      # Mobil hamburger menü
│
├── pages/
│   ├── home.blade.php             # Ana sayfa (widget'ları çağırır)
│   ├── about.blade.php            # Hakkımızda sayfası
│   ├── contact.blade.php          # İletişim sayfası
│   ├── certificates.blade.php     # Sertifikalar sayfası
│   └── products/
│       ├── index.blade.php        # Ürün listesi
│       └── show.blade.php         # Ürün detay
│
├── components/
│   ├── product-card.blade.php     # Ürün kartı component
│   ├── feature-card.blade.php     # Özellik kartı
│   ├── timeline-item.blade.php    # Zaman çizelgesi item
│   └── certificate-card.blade.php # Sertifika kartı
│
└── assets/                        # Tema'ya özel CSS/JS (opsiyonel)
    ├── css/
    │   └── varplas.css
    └── js/
        └── varplas.js
                

📄 layouts/app.blade.php

Ana şablon, tüm sayfalar bunu extend eder:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
  @include('themes.varplas.partials.head')
</head>
<body>
  @include('themes.varplas.partials.header')
  @yield('content')
  @include('themes.varplas.partials.footer')
  {!! WidgetService::getStylesOutput() !!}
  {!! WidgetService::getScriptsOutput() !!}
</body>
</html>

📄 pages/home.blade.php

Ana sayfa widget'ları çağırır:

@extends('themes.varplas.layouts.app')

@section('content')
  @widget($heroWidgetId)
  @widget($productsWidgetId)
  @widget($whyUsWidgetId)
  @widget($aboutWidgetId)
  @widget($certificatesWidgetId)
  @widget($quoteFormWidgetId)
  @widget($contactWidgetId)
@endsection

⚠️ Tenant-Aware Tema Seçimi

Tenant'ın hangi temayı kullanacağı settings_values tablosunda active_theme = 'varplas' olarak belirlenir. Sistem otomatik olarak o tema klasörüne bakar.

2️⃣ Widget Şablonları (Central DB)

📝 Basit Anlatım

VARPLAS teması için 8 adet widget şablonu gerekiyor. Bunlar Central DB'deki widgets tablosuna eklenir. Tüm tenant'lar bu şablonları kullanabilir.

# Widget Adı Slug has_items Açıklama
1 Hero Slider varplas-hero-slider true 3 slayt, istatistikler, CTA butonları
2 Ürün Kataloğu varplas-product-catalog true Ürün kartları grid
3 Neden Biz varplas-why-us true 4 özellik kartı (ikon, başlık, açıklama)
4 Hakkımızda Timeline varplas-about-timeline true Şirket geçmişi zaman çizelgesi
5 Sertifikalar varplas-certificates true ISO, UN belgeleri grid
6 Teklif Formu varplas-quote-form false İletişim formu (ContactForm modülüne bağlı)
7 İletişim Bilgileri varplas-contact-info false Telefon, email, adres kartları
8 İstatistikler varplas-stats true Sayaç animasyonlu istatistikler

📦 Örnek: Hero Slider Widget (Central DB)

{
  "id": 20,
  "name": "VARPLAS Hero Slider",
  "slug": "varplas-hero-slider",
  "type": "standard",
  "has_items": true,

  "settings_schema": [
    { "name": "section_title", "label": "Bölüm Başlığı", "type": "text" },
    { "name": "section_subtitle", "label": "Alt Başlık", "type": "text" },
    { "name": "primary_btn_text", "label": "Birincil Buton", "type": "text" },
    { "name": "primary_btn_url", "label": "Birincil Buton URL", "type": "url" },
    { "name": "secondary_btn_text", "label": "İkincil Buton", "type": "text" },
    { "name": "secondary_btn_url", "label": "İkincil Buton URL", "type": "url" },
    { "name": "autoplay", "label": "Otomatik Oynat", "type": "switch" },
    { "name": "interval", "label": "Geçiş Süresi (ms)", "type": "number" }
  ],

  "item_schema": [
    { "name": "title", "label": "Slayt Başlığı", "type": "text", "required": true },
    { "name": "image", "label": "Slayt Görseli", "type": "image", "required": true },
    { "name": "is_active", "label": "Durum", "type": "switch" }
  ],

  "content_html": "<section class=\"hero-slider\">...{{#each items}}...{{/each}}</section>",
  "content_css": ".hero-slider { ... }",
  "js_files": ["/js/swiper.min.js"],
  "css_files": ["/css/swiper.min.css"]
}

3️⃣ TenantWidget Kayıtları (Tenant DB)

📝 Basit Anlatım

Her tenant kendi widget örneklerini oluşturur. VARPLAS sitesi için Tenant DB'deki tenant_widgets ve widget_items tablolarına kayıtlar eklenir.

tenant_widgets.id widget_id display_title widget_items sayısı
1 20 (Hero) Ana Sayfa Hero Slider 3 slayt
2 21 (Ürünler) Ürün Kataloğu 3 ürün kartı
3 22 (Neden Biz) Neden VARPLAS 4 özellik
4 23 (Timeline) Şirket Tarihçesi 3 dönem
5 24 (Sertifika) Sertifikalarımız 4 belge
6 25 (Form) Teklif Formu -
7 26 (İletişim) İletişim Bilgileri -

💡 Toplam Kayıt Sayısı

tenant_widgets: 7 kayıt
widget_items: ~17 kayıt

5️⃣ Sayfalar (Page Modülü)

📝 Basit Anlatım

Sayfalar Page modülü ile yönetilir. Her sayfa pages tablosunda bir kayıt olarak tutulur. Sayfa içeriği widget'lardan veya doğrudan HTML'den oluşabilir.

Sayfa Slug Template Widget Kullanımı
Ana Sayfa / home ✓ 7 widget
Hakkımızda hakkimizda about ✓ Timeline + Content
Ürünler urunler products/index Module data
Ürün Detay urunler/{slug} products/show Module data
Lisanslar lisanslar certificates ✓ Sertifikalar widget
İletişim iletisim contact ✓ Form + Map
Teklif Al teklif-al quote ✓ Quote form widget

📊 pages tablosu kaydı örneği

{
  "id": 1,
  "title": { "tr": "Ana Sayfa", "en": "Home" },
  "slug": { "tr": "", "en": "" },
  "template": "home",
  "content": null,  // Widget'lar kullanılacak
  "widget_ids": [1, 2, 3, 4, 5, 6, 7],  // tenant_widgets ID'leri
  "seo_title": { "tr": "VARPLAS - Endüstriyel Depolama Çözümleri" },
  "seo_description": { "tr": "IBC Tank, Metal Varil, Plastik Varil..." },
  "is_active": true
}

6️⃣ Gerekli Modüller

✅ Mevcut Modüller (Kullanılacak)

  • Page - Sayfa yönetimi
  • WidgetManagement - Widget sistemi
  • MenuManagement - Menü sistemi
  • SettingsManagement - Site ayarları
  • SeoManagement - SEO ayarları
  • MediaManagement - Medya yönetimi
  • ContactForm - İletişim formları

🆕 Oluşturulacak/Düzenlenecek

  • Services/Products Modülü - Ürün/Hizmet yönetimi

VARPLAS için Shop modülü veya yeni bir Products modülü gerekebilir. Ürün kategorileri, ürün detayları, özellikler gibi alanlar için.

7️⃣ Settings Değerleri (settings_values tablosu)

📝 Basit Anlatım

Site genelinde kullanılan ayarlar settings_values tablosunda saklanır. setting('key') helper'ı ile çağrılır.

🏢 Temel Site Bilgileri

site_name "VARPLAS"
site_slogan "Endüstriyel Depolama Çözümleri"
site_logo "/storage/logo.png"
site_favicon "/storage/favicon.ico"
active_theme "varplas"

📞 İletişim Bilgileri

site_phone "+90 262 658 28 18"
site_email "info@varplas.com"
site_address "Kocaeli, Türkiye"
site_whatsapp "+90 532 XXX XX XX"
google_maps_embed "<iframe...>"

🌐 Sosyal Medya

social_facebook "https://facebook.com/varplas"
social_instagram "https://instagram.com/varplas"
social_linkedin "https://linkedin.com/company/varplas"
social_twitter "https://twitter.com/varplas"

🎨 Renk & Tasarım

primary_color "#10b981"
secondary_color "#0ea5e9"
font_heading "Outfit"
font_body "Inter"

📊 Toplam Settings Sayısı

VARPLAS teması için yaklaşık 20-25 adet setting değeri gerekiyor. Bunlar settings_values tablosuna eklenir.

8️⃣ SEO Ayarları (seo_settings tablosu)

🔍 Genel SEO

default_title: "VARPLAS - Endüstriyel Depolama"
title_separator: " | "
meta_description: "IBC Tank, Metal Varil..."
meta_keywords: "ibc tank, varil, depolama"
robots: "index, follow"
canonical_url: "https://varplas.com"

📱 Social Meta (OG)

og_title: "VARPLAS"
og_description: "Endüstriyel depolama..."
og_image: "/storage/og-image.jpg"
twitter_card: "summary_large_image"
google_analytics: "G-XXXXXXXX"
google_tag_manager: "GTM-XXXXXX"

9️⃣ Uygulama Checklist

📝 Claude'un Yapması Gerekenler (Sırasıyla)

1

Tenant Oluştur

  • • Yeni tenant kaydı (tenants tablosu)
  • • Domain kaydı (domains tablosu)
  • • Tenant database oluştur
  • • Migration'ları çalıştır
2

Tema Dosyalarını Oluştur

  • • resources/views/themes/varplas/ klasör yapısı
  • • layouts/app.blade.php
  • • partials/ (header, footer, mega-menu)
  • • pages/ (home, about, contact, products)
  • • components/ (kartlar, timeline)
3

Widget Şablonlarını Oluştur (Central)

  • • 8 widget şablonu → widgets tablosu
  • • Her widget için settings_schema tanımla
  • • has_items=true olanlar için item_schema tanımla
  • • content_html, content_css, js_files/css_files
4

TenantWidget Instance'ları Oluştur

  • • 7 tenant_widgets kaydı
  • • Her widget için settings JSON doldur
  • • has_items=true olanlar için widget_items ekle
5

Settings Değerlerini Gir

  • • ~20-25 setting değeri → settings_values
  • • site_name, site_logo, iletişim bilgileri
  • • Sosyal medya linkleri
  • • active_theme = 'varplas'
6

Menüleri Oluştur

  • • Header menü (mega menu dahil)
  • • Footer hızlı erişim menüsü
  • • Footer ürünler menüsü
7

Sayfaları Oluştur

  • • 6-7 sayfa → pages tablosu
  • • Her sayfa için widget_ids belirle
  • • SEO meta bilgilerini doldur
8

Test & Cache Temizle

  • • npm run prod (CSS build)
  • • php artisan cache:clear
  • • php artisan view:clear
  • • Site testi

📋 Toplam İş Listesi Özeti

15+
Tema Dosyası
8
Widget Şablonu (Central)
7
TenantWidget Instance
~17
Widget Items
3
Menü
6-7
Sayfa
20-25
Settings Değeri
10+
SEO Ayarı