Template View Dosyaları Referansı
Bu dokümantasyon, public/templates/basic/views/ dizinindeki tüm template dosyalarının detaylı analizini içerir. Her dosyanın ne işe yaradığı, özel özellikleri ve kullanım örnekleri ile birlikte açıklanmıştır.
Ana Layout ve Temel Templateler
layouts/theme.twig.php
Ana Layout Template'i - Tüm sayfa içeriklerini saran master template
Özellikler:
- HTML5 doküment yapısı ve responsive meta etiketler
- SEO optimizasyonu ve Open Graph entegrasyonu
- Webpack bundle entegrasyonu
- JavaScript konfigürasyon enjeksiyonu
- CSS özel özellikler için tema desteği
- Sidebar sepet offcanvas entegrasyonu
<main>
{{ render_header() }}
{{ content_for_layout | raw }} {# ÖNEMLİ: Backend'den gelen sayfa içeriği buraya yerleşir #}
{% set footer_url = theme_config('footer_url') %}
{% if footer_url %}
{{ render_page(footer_url) }}
{% endif %}
</main>
content_for_layout Özel Açıklama:
{{ content_for_layout | raw }} değişkeni, template sisteminin en kritik parçalarından biridir. Bu değişken:
- Backend'den gelen dinamik içeriği layout template'ine yerleştirir
- Her sayfa (index.twig.php, product.twig.php, login.twig.php vb.) kendi içeriğini üretir ve bu içerik
content_for_layoutdeğişkenine atanır. rawfiltresi HTML içeriğin escape edilmeden, olduğu gibi render edilmesini sağlar.- Layout template'i (theme.twig.php) bir çerçeve görevi görür, asıl içerik bu placeholder'a yerleştirilir.
- Örneğin:
/product/123URL'si çağrıldığında, backendproduct.twig.phptemplate'ini işler ve sonucucontent_for_layoutolarak layout'a gönderir.
Çalışma Akışı:
- Backend controller bir sayfa template'ini render eder (örn: product.twig.php)
- Render edilen içerik
content_for_layoutdeğişkenine atanır. - Layout template'i (theme.twig.php) yüklenir.
{{ content_for_layout | raw }}yerinde sayfa içeriği görüntülenir.- Böylece her sayfa aynı header, footer ve genel yapıyı kullanır.
open_graph.twig.php
Sosyal Medya Meta Etiketleri - Dinamik Open Graph etiketleri
Özellikler:
- Ürün spesifik Open Graph etiketleri
- Stok durumu entegrasyonu
- Marka ve kategori metadata'sı
- Genel website metadata'sına fallback
{% if request.page_type == 'product' and product is defined %}
<meta property="og:type" content="product">
<meta property="product:availability" content="{{ stock_status }}">
<meta property="product:brand" content="{{ product.brand }}">
{% endif %}
index.twig.php
Ana Sayfa Template'i - Modüler widget sistemi ile homepage
Özellikler:
- Webpack bundle yükleme
- Özel widget placeholder'ları
- Modüler widget include'ları (slider'lar, kategoriler, ürünler)
{{ webpack_bundle('index') }}
{{ ___('page__signin_box') }}
{% include 'widgets/brands_slider.twig.php' %}
{% include 'widgets/manset_slider.twig.php' %}
{% include 'widgets/category_grid.twig.php' %}
{% include 'widgets/last_products.twig.php' %}
ÖNEMLİ NOT - CMS Önceliği:
Eğer CMS'de "index" adında bir sayfa oluşturulmuşsa:
- CMS'deki "index" sayfası içeriği önceliklidir.
index.twig.phptemplate'i devre dışı kalır.- CMS içeriği doğrudan
content_for_layoutdeğişkeni aracılığıylatheme.twig.phplayout'una yerleştirilir - Widget'lar ve özel içerikler CMS editöründen yönetilir.
- Bu sayede kod değişikliği yapmadan ana sayfa içeriği güncellenebilir.
Template Öncelik Sırası:
- CMS'de tanımlı "index" sayfası varsa → CMS içeriği kullanılır.
- CMS'de "index" sayfası yoksa →
index.twig.phptemplate'i kullanılır.
Header Varyantları
header.twig.php
Standart Header - İki bölümlü layout ile temel header
Özellikler:
- Çok dil desteği ve bayrak gösterimi
- Kullanıcı kimlik doğrulama durumları (giriş yapmış/yapmamış)
- Dropdown menüler ile kategori navigasyonu
- Arama işlevselliği
- Alışveriş sepeti entegrasyonu
- Sticky header seçeneği
<div class="header-sec-one">
<!-- Logo, dil seçimi, kullanıcı işlemleri -->
<div class="language">
{% for locale_data in get_locales() %}
<a href="{{ locale_data.url }}">
<img src="{{ ('flags/' ~ locale_data.code ~ '.png') | image }}">
</a>
{% endfor %}
</div>
</div>
<div class="header-sec-two">
<!-- Navigasyon ve arama -->
<nav class="navbar">
{% for category in categories %}
<a href="{{ category.url }}">{{ category.name }}</a>
{% endfor %}
</nav>
</div>
header_ella.twig.php
Alternatif Header - Tam genişlik navigasyon ile
Özellikler:
- Dil seçim dropdown'u
- Yatay kategori navigasyonu
- Kullanıcı hesap dropdown'u
- Typewriter efekti ile arama
<div class="language">
<div class="dropdown">
<button class="dropdown-toggle">
<img src="{{ ('flags/' ~ locale ~ '.png') | image }}">
</button>
</div>
</div>
<nav class="row">
<!-- Logo, navigasyon, kullanıcı butonları -->
</nav>
header_fox.twig.php
Gelişmiş Header - Mega menü ve promosyon banner'ı ile
Özellikler:
- Üst promosyon carousel'ı
- Resim desteği ile mega menü
- Katlanabilir arama işlevselliği
- Hesap sidebar'ı
<div class="mega">
<div class="listBox">
<!-- Kategori listeleri -->
{% for category in categories %}
<div class="category-group">
<h5>{{ category.name }}</h5>
{% for subcategory in category.subcategories %}
<a href="{{ subcategory.url }}">{{ subcategory.name }}</a>
{% endfor %}
</div>
{% endfor %}
</div>
<div class="visualBox">
<!-- Kategori resimleri -->
<img src="{{ category.featured_image }}" alt="{{ category.name }}">
</div>
</div>
header_helen.twig.php
Üç Katmanlı Header - Dikey hiyerarşi ile
Özellikler:
- Üst promosyon banner'ı
- Orta bölümde logo ve arama
- Alt navigasyon çubuğu
<div class="top">
<!-- Promosyon carousel'ı -->
</div>
<div class="medium">
<!-- Logo ve arama -->
</div>
<div class="bottom">
<!-- Navigasyon -->
</div>
header_mobile.twig.php
Mobil Header - Offcanvas navigasyon ile optimize edilmiş
Özellikler:
- Offcanvas ile hamburger menü
- Katlanabilir arama
- Mobil dostu layout
- Akordeon kategori menüsü
<div class="offcanvas offcanvas-start" id="staticBackdrop">
<div class="accordion accordion-flush">
{% for category in categories %}
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" data-bs-target="#flush-collapse{{ loop.index }}">
{{ category.name }}
</button>
</h2>
<div id="flush-collapse{{ loop.index }}" class="accordion-collapse collapse">
{% for subcategory in category.subcategories %}
<a href="{{ subcategory.url }}">{{ subcategory.name }}</a>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>