# PrestaShop’ta override mi eklenti mi: nasıl karar verilir

> PrestaShop, çekirdek yazılıma dokunmadan davranışını değiştirmek için iki yol sunar: override/ klasöründen mevcut bir sınıfı genişleten override ve sistemin sağladığı hook noktalarına bağlanan eklenti. Seçim bir tercih meselesi değildir; PrestaShop’un o noktada gerçekte neye izin verdiğine bağlıdır.

- Source canonique : [https://allaux.fr/tr/guides/override-ou-module-prestashop](https://allaux.fr/tr/guides/override-ou-module-prestashop)
- Langue : TR
- Dernière mise à jour : 2026-09-30

## Doğrudan yanıt

> İhtiyaç duyulan nokta için bir hook varsa her zaman eklentiyi tercih edin: bu, öngörülen ve zaman içinde en istikrarlı yöntemdir. Override’ı yalnızca hiçbir hook’un müdahaleye izin vermediği durumlar için saklayın; her büyük sürüm geçişinde yeniden kontrol edilmesi gerektiğini bilerek.

## Nasıl karar verilir

1. **Önce uygun bir hook arayın** — PrestaShop, görüntüleme ve sipariş işleme döngüsünün belirli noktalarında düzinelerce hook sunar. İhtiyaca uyan biri varsa, bir eklenti yeterlidir.
2. **Yerleşik davranışın değiştirilmesi gerekip gerekmediğini değerlendirin** — Bir hook, belirli bir noktaya davranış eklemeye izin verir, mevcut bir mantığın yerini almaya değil. İhtiyaç, çekirdekte zaten kodlanmış bir hesaplamayı veya kuralı değiştirmekse, hiçbir hook buna izin vermez ve override, yerleşik tek seçenek haline gelir.
3. **Bir override’ın güncellemeler üzerindeki etkisini ölçün** — Bir override, çekirdeğin hiçbir dosyasının yerini almaz: PrestaShop, override/ klasöründen orijinal sınıfı genişleten bir sınıf yükler — Product, ProductCore'u genişletir — ve yalnızca hedeflenen yöntemleri yeniden tanımlar. Her sürüm yükseltmesinde bu yöntemler, bu arada değişmiş olabilecek orijinal sınıfınkilerle yeniden karşılaştırılmalıdır.
4. **Oluşturulan her override’ı belgeleyin** — Belgelenmemiş bir override, aylar sonra bir güncelleme sırasında keşfedildiğinde, başlangıçta belgelenmesinin alacağı süreden çok daha fazla teşhis zamanına mal olur.

## İki yaklaşımı gerçekten ayıran nedir

Bir eklenti düzgün şekilde kurulur ve kaldırılır: registerHook() yöntemi aracılığıyla hook’lara (örneğin displayHeader veya actionValidateOrder) bağlanır ve abone olduğu her hook, aynı modelde adlandırılmış bir yönteme karşılık gelir, örneğin hookDisplayHeader(). Eklentiyi devre dışı bırakmak veya kaldırmak, davranışını çekirdekte iz bırakmadan düzgünce geri alır.

Bir override ise override/ klasöründe (örneğin override/classes veya override/controllers) yaşar : PrestaShop orada, çekirdeğin …Core sınıfını genişleten bir sınıf yükler — class Product extends ProductCore — ve yalnızca gereken yöntemleri yeniden tanımlar; geri kalanı çekirdekten gelmeye devam eder. Hiçbir yerleşik dosya değiştirilmez veya yerinden edilmez. Bu daha güçlüdür, çünkü hook sisteminin asla erişemeyeceği bir davranışı değiştirmeye izin verir, ama aynı zamanda daha kırılgandır: PrestaShop çekirdeği orijinal sınıfı sonraki bir sürümde değiştirirse, override uyumsuz hale gelebilir, hatta engelleyici bir hataya yol açabilir.

Uygulamada, piyasada dağıtılan eklentilerin çoğu yalnızca hook kullanır, çünkü bu tam olarak en uzun uyumluluğu garanti eden yöntemdir. Override’lar, başka türlü karşılanması gerçekten imkânsız olan ihtiyaçlara ayrılmış olarak kalır.

## Sık yapılan hatalar

- Mevcut bir hook yeterli olacakken bir override oluşturmak; bu, gelecekteki güncellemeleri gereksiz yere karmaşıklaştırır.
- Farklı eklentilerden gelen aynı yöntem üzerinde birden fazla override’ı üst üste bindirmeye güvenmek: PrestaShop buna izin vermez. Module::addOverride bir istisna fırlatır ve ikinci eklentinin kurulumu « Unable to install override: The method … in the class … is already overridden » türünden açık bir mesajla başarısız olur. Yerinde kalan, ilk kurulan override’dır.
- Bir override’ın, onu oluşturan eklentinin kaldırılmasından sonra da hayatta kaldığını unutmak; eğer eklenti kaldırma sırasında onu düzgünce geri almayı öngörmediyse.
- Orijinal sınıfın bir kopyasını saklamadan bir override’ı değiştirmek; bu, bir güncelleme sırasında karşılaştırmayı imkânsız hale getirir.

## Symfony servis ve olaylarının ara durumu

PrestaShop 1.7 ve üzerinde, bazı ileri düzey ihtiyaçlar için üçüncü bir yol vardır: yönetim panelinin artık bir bölümünün dayandığı Symfony'nin servis ve olay (event) sistemi. Bir eklenti, klasik bir PrestaShop hook'u yerine bir Symfony olayını dinleyebilir; bu, ruh bakımından override'dan çok eklentiye daha yakın kalır, ancak alttaki framework hakkında daha derin bir bilgi gerektirir.

Bu seçenek, yeni yönetim paneline özgü ihtiyaçlara ayrılmış olarak kalır; ön yüz tarafındaki veya klasik iş mantığı tarafındaki değişikliklerin büyük çoğunluğu için seçim gerçekten hook'a karşı override ile sınırlıdır.

## FAQ

### Özelleştirilmiş bir tema bir override olarak mı sayılır?

Hayır, tema özelleştirmesi şablon dosyaları (.tpl) ve bazen CSS veya JavaScript üzerinden yapılır; bu, çekirdeğin PHP sınıflarını ilgilendiren override’lardan ayrı bir mekanizmadır.

### Farklı sınıflar üzerinde risksiz şekilde birden fazla override olabilir mi?

Evet, her override farklı bir sınıfı hedeflediği sürece aralarında çakışma olmaz. Çakışma riski yalnızca iki override aynı sınıfı hedeflediğinde ortaya çıkar.

### Bir eklentinin override mi yoksa yalnızca hook mu kullandığı nasıl anlaşılır?

Eklenti klasörü, override oluşturuyorsa bir override/ alt klasörü içerir. Bu klasörün yokluğu, tamamen hook sistemine dayanan bir eklentiyi gösterir.
