PrestaShop hook'larının nasıl çalıştığını anlamak
Hook'lar, bir eklentinin çekirdek koduna dokunmadan PrestaShop'a davranış eklemesini sağlayan temel mekanizmadır. Nasıl çalıştıklarını anlamak, bir ihtiyacın basitçe mi yoksa daha kapsamlı bir müdahaleyle mi karşılanabileceğini değerlendirme biçimini değiştirir.
Uygulamada işleyiş
PrestaShop kodunu normal şekilde çalıştırır ve akışın belirli noktalarında, ilgili hook'a kayıtlı tüm eklentileri çağırarak onlara içerik ekleme veya bir işlem yürütme fırsatı verir. displayHeader gibi bir görüntüleme hook'u, örneğin bir eklentinin her sayfanın üst kısmına CSS veya JavaScript eklemesine izin verir. actionValidateOrder gibi bir eylem hook'u ise bir siparişin onaylanmasının hemen ardından tetiklenir; bu da bir eklentinin bildirim göndermesine, harici bir stoğu senkronize etmesine veya bir webhook tetiklemesine olanak tanır.
Her hook, belirli bir ana ve belirli bir içerik veya eylem türüne karşılık gelir: bazıları şablonun bir bölümünde HTML görüntülemek için, bazıları ise hiçbir şey göstermeden bir eylem yürütmek için tasarlanmıştır. Görüntüleme amaçlı bir hook'u ağır bir eylem çalıştırmak için kullanmak, ya da bunun tersini yapmak, sık karşılaşılan bir hata kaynağıdır.
Kullanılabilir hook listesi, PrestaShop sürümüne göre değişir: eski bir sürümde var olan bazı hook'lar, büyük bir sürüm güncellemesinde kaybolabilir veya adı değişebilir; bu da eski bir eklentinin bir güncellemeden sonra neden çalışmayı bırakabildiğini açıklar.
Belirli bir ihtiyaca uygun hook'u belirlemek
-
İstenen anı tam olarak tarif edin
Her şeyden önce: bir sayfa yüklenirken mi, bir sipariş onaylandıktan sonra mı, bir ürün sepete eklenirken mi? Tam tetikleyiciyi netleştirmek, doğrudan ilgili hook ailesine yönlendirir.
-
Görüntüleme ile eylemi birbirinden ayırın
Bir görüntüleme ihtiyacı (bir blok, bir mesaj, bir widget eklemek) ile bir eylem ihtiyacı (e-posta göndermek, harici bir API çağırmak, bir veriyi değiştirmek) aynı hook türünü gerektirmez.
-
Hedeflenen hook'un resmi belgelerine bakın
Her hook farklı parametreler bekler ve sağlar (örneğin siparişle ilgili bir hook için sipariş nesnesi); eklentinin kodunu yazmadan önce bunların bilinmesi gerekir.
-
Gerçek tetiklenmeyi test edin
Teorik olarak uygun görünen bir hook, beklenenden hafifçe farklı bir anda tetiklenebilir; somut bir doğrulama (örneğin bir log kaydı veya debug modu üzerinden), tüm mantığı buna göre kurmadan önce gerçek davranışı doğrular.
public function install()
{
return parent::install()
&& $this->registerHook('displayHeader')
&& $this->registerHook('actionValidateOrder');
}
public function hookDisplayHeader($params)
{
return $this->context->smarty->fetch('module:mon-module/views/templates/hook/header.tpl');
}
Hook'larla ilgili bir sorunun işaretleri
- Bir eklenti tarafından eklenen bir bloğun bir sayfada iki kez veya yanlış yerde görünmesi
- Sipariş onayından sonra tetiklenmesi gereken bir eylemin hiç gerçekleşmemesi
- PrestaShop güncellemesinden önce sorunsuz çalışan bir eklentinin görüntülenmeyi bırakması
- Aynı görüntüleme alanında birbiriyle çakışıyor gibi görünen iki eklenti
Sıkça sorulan sorular
Aynı hook birden fazla eklenti tarafından aynı anda kullanılabilir mi?
İhtiyaca uygun hiçbir hook yoksa ne olur?
Bir eklentinin hangi hook'lara zaten kayıtlı olduğu nasıl anlaşılır?
İhtiyacınızı bir dakikada anlatın
Size bir anket daha değil, doğrudan bir tahmin sunabilmem için birkaç hedefli soru.