İnceleme Kriterleri
Markete gönderilen her tema, yayınlanmadan önce T-SOFT teknik birimi tarafından incelenir. Bu sayfa incelemede bakılan başlıkları ve gönderim öncesi kendi kendinize uygulayabileceğiniz kontrol listesini içerir.
Kod ayrımı
Twig şablonları yalnızca işaretleme içerir. Stil ve davranış ayrı dosyalara yazılır.
| Kural | Nereye yazılır |
|---|---|
.twig içinde <style> bloğu olmamalı | assets/css/theme.css |
.twig içinde <script> bloğu olmamalı | assets/js/theme.js |
Inline style="..." kullanılmamalı | Tailwind utility class'ları |
{# ❌ Stil ve davranış şablonun içinde #}
<style>.promo-badge { background: #fd6905; }</style>
<div class="promo-badge" onclick="openPromo()">{{ t.promo }}</div>
<script>function openPromo() { /* ... */ }</script>
{# ✅ İşaretleme şablonda, stil Tailwind'de, davranış theme.js'te #}
<div class="bg-primary text-white px-3 py-1 rounded" data-promo-trigger>
{{ t.promo }}
</div>
Twig'den JavaScript'e veri aktarımı data-* öznitelikleriyle yapılır; şablona script gömerek değil. Hazır bileşenleri bağlamak için data-toggle kataloğunu kullanın.
Bkz. Asset · JavaScript · Data-Toggle Bileşenleri
HTML ve stil
HTML kodlaması Tailwind ile yapılır. Sabit değerler yerine panelden yönetilen semantik class'lar kullanılır.
| Kural | Neden |
|---|---|
Sabit hex renk yazılmaz (bg-[#fd6905]) | Mağaza renk şemasını değiştirdiğinde tema bozulur |
Semantik class kullanılır (bg-primary, text-body) | Panel renkleriyle otomatik uyum sağlar |
Tekrarlayan uzun class dizileri @layer components'a çekilir | Aynı dizi 12 yerde tekrarlanmaz |
| Twig'de hesaplanan dinamik class üretilmez | Tailwind class'ı bulamaz, stil kaybolur |
Dinamik class üretimi incelemede sık görülen bir hatadır — olası tüm class'lar kaynakta açıkça yazılmalıdır. Ayrıntı için bkz. Tailwind.
Bkz. Tailwind · Temayı Özelleştir
Dil dosyaları
Ekranda görünen hiçbir metin şablona sabit yazılmaz. Tüm metinler locales/ altındaki sözlüklerden gelir.
{# ❌ Sabit metin — çeviri yapılamaz #}
<button class="btn-primary">Sepete Ekle</button>
{# ✅ Sözlükten gelir #}
<button class="btn-primary">{{ t.add_to_cart }}</button>
Dil dosyaları eksiksiz olmalıdır: temada çağrılan her anahtar, desteklenen her dil dosyasında tanımlı olmalıdır. Gönderim öncesi kullanılan anahtarları çıkarıp sözlüklerle karşılaştırın:
# Temadaki tüm t.<anahtar> çağrılarını çıkar
grep -rEho 't\.[a-z0-9_]+' section/ snippets/ | sort -u
# Şablonlarda kalan sabit Türkçe metinleri ara
grep -rn '>[^<{]*[çğıöşü]' section/ snippets/
Bkz. Locale ve Çeviriler
Responsive tasarım
Tema tüm kırılımlarda kullanılabilir olmalıdır. İncelemede sayfalar gerçek cihaz genişliklerinde açılır.
| Kontrol | Beklenen |
|---|---|
| Yatay kaydırma | Hiçbir kırılımda oluşmamalı |
| Sayfa tipleri | Anasayfa, kategori, ürün detay, sepet, üyelik ve arama ayrı ayrı kontrol edilmeli |
| Dokunma hedefleri | Mobilde buton ve bağlantılar rahat tıklanabilir olmalı |
| Menü ve drawer | Mobilde açılıp kapanmalı, arkadaki içerik kaymamalı |
| Tablolar ve uzun içerik | Taşma yerine kaydırma veya sarma ile çözülmeli |
Bkz. Tailwind
Alışveriş akışı
Alışveriş süreci baştan sona hatasız tamamlanmalıdır. İncelemede aşağıdaki adımlar gerçek bir mağazada denenir.
| Adım | Beklenen davranış |
|---|---|
| Ürün listeleme | Kartlar, fiyat ve indirim bilgisi doğru görünür |
| Ürün detay | Galeri, açıklama ve stok durumu doğru gelir |
| Varyant seçimi | Seçim fiyatı ve stok durumunu günceller |
| Sepete ekleme | Ürün sepete eklenir, bildirim veya drawer açılır |
| Sepet önizleme | Adet, tutar ve ürün sayısı anında güncellenir |
| Adet güncelleme / silme | Sepet toplamı doğru hesaplanır |
| Ödemeye geçiş | Sepet ekranından ödeme adımına sorunsuz geçilir |
| Üyelik ve giriş | Kayıt, giriş ve çıkış çalışır |
| Arama ve filtreleme | Sonuç döner, filtreler birlikte çalışır |
| Favori / karşılaştırma | Ekleme ve çıkarma anında yansır |
Hata durumları da kontrol edilir: stokta olmayan ürün, seçilmemiş varyant, boş sepet ve sonuç dönmeyen arama ekranları anlamlı bir mesaj göstermelidir.
Bkz. JS Bileşenleri · Data-Toggle Bileşenleri
Konsol temizliği
Tarayıcı konsolu temiz olmalıdır. Gezinme sırasında hata veya uyarı üretmeyen bir tema beklenir.
| Konsol çıktısı | Ne demek | Ne yapmalı |
|---|---|---|
Uncaught TypeError: ... of null | Var olmayan bir DOM elemanına erişiliyor | Erişimden önce eleman kontrolü yapın |
404 asset isteği | Silinmiş veya yolu yanlış dosya çağrılıyor | asset() ile doğru yolu verin, ölü referansı silin |
Uncaught ReferenceError | Tanımsız fonksiyon veya değişken çağrılıyor | Şablondan kaldırılan koda ait çağrıyı temizleyin |
| Mixed content uyarısı | http:// üzerinden kaynak yükleniyor | Tüm kaynakları https:// veya göreli yolla çağırın |
| CORS hatası | Dış servise izinsiz istek yapılıyor | İsteği kaldırın veya desteklenen bir uç nokta kullanın |
Geliştirme sırasında bıraktığınız console.log satırları gönderim öncesi temizlenmelidir.
// ✅ Eleman yoksa kod sessizce atlanır, konsola hata düşmez
const addToCartBtn = document.querySelector('[data-add-to-cart]');
if (addToCartBtn) {
addToCartBtn.addEventListener('click', handleAddToCart);
}
Bkz. JavaScript
Performans ve görseller
Performans incelemenin ayrı bir başlığıdır. Kurallar Performans sayfasında ayrıntılı anlatılır; incelemede beklenen özet şudur:
| Kriter | Beklenen |
|---|---|
| Lighthouse mobile skoru | 85+ |
| Görsel formatı | WebP tercih edilir, doğru ölçüde sunulur |
width / height | Her <img> etiketinde tanımlı (CLS için) |
loading="lazy" | Ekran altındaki görsellerde var, hero görselinde yok |
| Üçüncü parti script | Gerekmedikçe eklenmez, ağır kütüphane theme.js'e girmez |
Bkz. Performans
İsimlendirme ve düzen
Kod, üzerinde başkasının çalışacağı varsayımıyla yazılır. İsimler ne yaptıklarını anlatmalıdır.
| Alan | ❌ | ✅ |
|---|---|---|
| Section klasörü | section/bolum2/ | section/product-list/ |
| Snippet dosyası | snippets/s1.twig | snippets/product-card.twig |
| Locale anahtarı | text1, str_04 | add_to_cart, free_shipping_note |
| CSS component class | .box2 | .btn-primary, .product-card |
| Görsel dosyası | assets/images/1.png | assets/images/payment-logos.webp |
Dosya ve klasör adlarında kebab-case kullanılır. Kullanılmayan dosyalar, yoruma alınmış ölü kod blokları ve deneme amaçlı section'lar gönderim öncesi silinmelidir.
Bkz. Tema Yapısı · Snippet
Tema meta bilgileri
.theme manifestindeki bilgiler markette görünen bilgilerdir; doğru ve güncel olmalıdır.
| Alan | Beklenen |
|---|---|
| Ad | Markette görünecek gerçek tema adı — my-theme gibi taslak adlar kalmamalı |
| Yazar | Geliştirici veya ajans adı |
| Sürüm | SemVer formatında, gönderilen sürümle tutarlı |
| Changelog | Bu sürümde gerçekten değişenleri anlatmalı |
Bkz. Tema Yapısı
Gönderim öncesi kontrol listesi
| ☑ | Kriter |
|---|---|
| ☐ | Hiçbir .twig dosyasında <style> veya <script> bloğu yok |
| ☐ | Inline style="..." kullanılmadı, HTML Tailwind ile yazıldı |
| ☐ | Sabit hex renk yok, semantik class'lar kullanıldı |
| ☐ | Twig'de hesaplanan dinamik Tailwind class'ı yok |
| ☐ | Şablonlarda sabit metin kalmadı, tümü t.<anahtar> üzerinden |
| ☐ | Tüm dil dosyaları eksiksiz dolduruldu |
| ☐ | Tüm sayfa tipleri mobil, tablet ve masaüstünde kontrol edildi |
| ☐ | Hiçbir kırılımda yatay kaydırma oluşmuyor |
| ☐ | Sepete ekleme ve ödemeye geçiş uçtan uca hatasız tamamlanıyor |
| ☐ | Üyelik, arama, filtreleme ve favori işlemleri çalışıyor |
| ☐ | Konsolda hata ve uyarı yok, console.log kalıntısı temizlendi |
| ☐ | Ağ sekmesinde 404 dönen asset isteği yok |
| ☐ | Lighthouse mobile skoru 85+ |
| ☐ | Görseller optimize, width/height ve loading doğru ayarlandı |
| ☐ | Section, snippet, locale ve dosya isimleri anlamlı |
| ☐ | Kullanılmayan dosya ve ölü kod silindi |
| ☐ | .theme manifesti ve changelog güncel |