Snippet
Snippet'lar, birden çok yerde kullanılan küçük Twig parçalarıdır. Örneğin bir ürün kartı (product-card) ürün listesi, öne çıkan ürünler ve ilgili ürünler section'larında tekrar kullanılabilir.
<a href="{{ product.url }}"
class="block group">
<img src="{{ product.image }}"
alt="{{ product.title }}"
class="w-full aspect-square object-cover rounded"
loading="lazy">
<h3 class="mt-3 text-sm font-medium text-body group-hover:text-primary">
{{ product.title }}
</h3>
<span class="block mt-1 font-semibold text-primary">
{{ product.price|money }}
</span>
</a>
Çağıran taraf:
{% for product in section.products %}
{{ snippet('product-card', { product: product }) }}
{% endfor %}
snippet() fonksiyonu
Snippet'ları snippet() global fonksiyonu ile çağırırsınız — Twig'in {% raw %}{% include %}{% endraw %} etiketini kullanmazsınız.
{# Parametresiz — snippet, çağıran şablonun değişkenlerini görür #}
{{ snippet('_cookie-law') }}
{{ snippet('social-login') }}
{# Loop içinde — snippet aynı kapsamdaki P değişkenine erişir #}
{% for key, P in PRODUCTS %}
{{ snippet('product-list.product-card.default') }}
{% endfor %}
{# Parametreli — ikinci argüman bir nesne (hash), ek değişken geçirir #}
{{ snippet('product-card', { product: P }) }}
{{ snippet('skeleton-loader', { type: 'comments' }) }}
{{ snippet('skeleton-loader', { type: 'installment' }) }}
P snippet'a açıkça geçirilmez, ancak snippet P değerine erişebilir. Bu kısa kullanım sağlar; taşınabilirlik gereken durumlarda kritik parametreleri açıkça geçirin.Snippet içinde parametreler isimlerine göre erişilir:
{% if type == 'comments' %}
<div class="animate-pulse h-24 bg-form"></div>
{% elseif type == 'installment' %}
<div class="animate-pulse h-12 bg-form"></div>
{% else %}
<div class="animate-pulse h-8 bg-form"></div>
{% endif %}
Klasör hiyerarşisi ve nokta notasyonu
Snippet'lar gruplandığında nokta notasyonu ile çağrılır. Her nokta bir klasör seviyesine karşılık gelir.
snippets/
├── product-card.twig
├── _cookie-law.twig
├── social-login.twig
└── product-detail/
├── variant-1/
│ ├── default.twig
│ └── select.twig
├── variant-2/
│ ├── default.twig
│ └── select.twig
└── related/
└── default.twig
Çağrı karşılıkları:
| Çağrı | Dosya |
|---|---|
snippet('product-card') | snippets/product-card.twig |
snippet('_cookie-law') | snippets/_cookie-law.twig |
snippet('product-detail.variant-1.select') | snippets/product-detail/variant-1/select.twig |
snippet('product-detail.related.default') | snippets/product-detail/related/default.twig |
product-detail altında 8–10 varyant snippet'i varsa, hepsini düz dizinde tutmak yerine alt klasörlere bölün. Hem aramada kolaylık olur, hem de IDE klasörlemesi çalışır.Alt çizgi (_) konvansiyonu
Alt çizgi ile başlayan snippet'lar dahili / private olarak işaretlenir — yani başka bir snippet veya section dışından doğrudan çağrılmaması beklenir:
{{ snippet('_influencer-bar') }}
{{ snippet('_web-notification') }}
{{ snippet('_cookie-law') }}
Bu teknik bir kısıt değil, adlandırma anlaşmasıdır. Amaç, snippet'ın doğrudan sayfadan değil bağlı olduğu üst bileşen üzerinden kullanılacağını belirtmektir.
Snippet'tan snippet çağırma
Snippet'lar birbirini çağırabilir. product-card, içinde price-badge snippet'ını çağırabilir:
<a href="{{ product.url }}">
<img src="{{ product.image }}" alt="{{ product.title }}">
<h3>{{ product.title }}</h3>
{{ snippet('price-badge', { price: product.price, compare: product.compare_at_price }) }}
</a>
a snippet'i b'yi, b de a'yı çağırıyorsa motor sonsuz döngüye girer. Snippet bağımlılığını tek yönlü tutun.Section mi, snippet mı?
| Soru | Section | Snippet |
|---|---|---|
| Panelden eklenebilir mi? | ✅ Evet | ❌ Hayır |
| Ayarları var mı? | ✅ Var | ❌ Yok (parametre alır) |
| Mağaza sahibi sırasını değiştirebilir mi? | ✅ Evet | ❌ Hayır |
| Bir sayfaya bağımsız eklenir mi? | ✅ Evet | ❌ Sadece içeride çağrılır |
| Genellikle ne kadar büyük? | Tam bir bölüm | Küçük bir parça |
Genel kural: Mağaza sahibinin panelden ekleyip kaldırması gereken yapı section olmalıdır. Birden fazla yerde tekrar kullanılan küçük Twig parçaları için snippet kullanın.
snippet_uri() fonksiyonuyla URI üretip JS tarafında çağırabilirsiniz — imza ve örnekler için bkz. Twig Fonksiyonları. Asorti tablosu ve ürün görsel slider'ı gibi kopyala-kullan örnekler için bkz. Pratik Çözümler.En iyi uygulamalar
Snippet kendine yetsin
Parametre varsayılanı verin
{{ size|default('md') }} — eksik parametrede hata vermesin.`_` ile özelini işaretle
_isim ile adlandırın.Adı sayfa diliyle ver
product-card, price-badge — sade ve anlaşılır. card2 veya helper-1 değil.