Projeler ve ajans desteği için müsait · Hızlı yanıt, işi yapan kişiden

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.

Sorunumu anlatayım Mesaj gönderin

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

  1. İ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.

  2. 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.

  3. 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.

  4. 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.

modules/mon-module/mon-module.php (extrait)
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?
Evet, bu normal işleyiş biçimidir: aynı hook'a kayıtlı tüm eklentiler, yapılandırılmış konumlarına bağlı bir sırayla birbiri ardına çağrılır.
İhtiyaca uygun hiçbir hook yoksa ne olur?
Bu durumda tek yerli alternatif override'dır; bu yöntem, belirlenmiş bir noktaya bağlanmak yerine çekirdeğin bir sınıfını doğrudan değiştirir ve güncellemeler açısından beraberinde getirdiği sonuçlarla birlikte gelir.
Bir eklentinin hangi hook'lara zaten kayıtlı olduğu nasıl anlaşılır?
Yönetim paneli, Görünüm > Konumlar altında (1.6'da Modüller ve Servisler > Konumlar) her hook'a kayıtlı tüm eklentileri listeler; bu ekran aynı zamanda çalıştırma önceliklerinin yeniden sıralanmasına da olanak tanır. Gelişmiş Parametreler altında hiçbir hook yönetimi yoktur.

İhtiyacınızı bir dakikada anlatın

Size bir anket daha değil, doğrudan bir tahmin sunabilmem için birkaç hedefli soru.

version
besoin
etat
theme (facultatif)
Size dönebilmem için en az bir e-posta veya telefon numarası belirtin.

Size dönebilmem için en az bir e-posta veya telefon numarası belirtin.