Kanca Listesi

Modül sistemi iki tür kanca sağlar: olay kancaları (PHP geri çağrıları) ve görüntüleme kancaları (Smarty şablon enjeksiyon noktaları). Katalog kaynağı: core/Module.php içindeki Module::HOOKS, getHookCatalog() ve getDisplayHookCatalog().

Olay kancaları belirli anlarda PHP kodu çalıştırır (ör. sipariş verildiğinde).
Görüntüleme kancaları mağaza / yönetim şablonlarına {$hooks.*} veya {$adminHooks.*} ile HTML basar.

Olay Kancaları

Dinleyicileri modülünüzün boot() yönteminde Module::registerHook() ile kaydedin. Yalnızca Module::HOOKS listesinde yer alan kancalar kabul edilir.

Kanca Adı Ne Zaman Tetiklenir Argümanlar
smarty.assign Module::bootstrap() sırasında — tüm etkin modüller yüklendikten sonra $smarty örneği
head.assets Ön yüz CSS/JS varlıkları Module::getHeadAssets() ile toplanırken css ve js anahtarlı &$assets dizisi
footer.html Eski alt bilgi HTML enjeksiyonu (bunun yerine görüntüleme kancalarını tercih edin) —
admin.menu Yönetim kenar çubuğu menüsü oluşturulurken (registerAdminMenuLink veya registerHook) &$items menü öğeleri dizisi
order.placed Yeni bir sipariş başarıyla oluşturulduktan sonra (ödeme / POS) Sipariş veri dizisi
order.updated Sipariş güncellendiğinde (yönetim / API / durum değişikliği) $order, önceki durum / bağlam ekleri
product.updated Ürün kaydedildiğinde (yönetim, Web API, hızlı stok, toplu araçlar) $idProduct, $product, $isNew
cart.changed Sepet içeriği değiştikten sonra (ekle / güncelle / kaldır) Cart::getSummary() sepet özet dizisi
form.captcha.validate Form gönderiminde CAPTCHA kontrolü (Captcha::validate()) $form adı, &$error dizesi
product.filter.sql Katalog ürün SQL'i çalışmadan önce — modüller SQL / parametreleri değiştirebilir &$sql, &$params, filtre bağlam dizisi
catalog.filter.context Ayrılmış katalog filtre bağlam kancası (HOOKS içinde kayıtlı) Bağlam yükü (çağıranlar tarafından tetiklendiğinde)

Görüntüleme Kancaları (Ön Yüz)

Yönetimde modül başına atanır ve module_display_hooks içinde saklanır. Çıktı Smarty'de {$hooks.hook_name} olarak kullanılabilir (noktalı adlar iç içe geçer, örn. {$hooks.head.top}).

Kanca Adı Konum Smarty Değişkeni
footer Mağaza alt bilgisi {$hooks.footer}
header Üst çubuk / üst bilgi {$hooks.header}
main_menu Ana kategori menüsü {$hooks.main_menu}
mobile_menu Mobil çekmece menüsü {$hooks.mobile_menu}
head.top <head> içinde (üst) {$hooks.head.top}
home Ana sayfa gövdesi {$hooks.home}
home_slider Ana sayfa üst slayt {$hooks.home_slider}
home_promo_slider Ana sayfa promosyon / kampanya slaydı {$hooks.home_promo_slider}
home_bottom Ana sayfa alt bölümü {$hooks.home_bottom}
catalog_filters Kategori / katalog filtreleri {$hooks.catalog_filters}
product Ürün listesi bağlamı (id_product gerekir) {$hooks.product}
product_detail Ürün detay sayfası {$hooks.product_detail}
product_tab Ürün sekme düğmesi {$hooks.product_tab}
product_tab_content Ürün sekme içerik paneli {$hooks.product_tab_content}
product_inf Ürün detay bilgi bloğu {$hooks.product_inf}
order_payment Ödeme adımı {$hooks.order_payment}
order_confirmation Sipariş onay sayfası {$hooks.order_confirmation}
auth_social Giriş / kayıt — sosyal düğmeler {$hooks.auth_social}
contact_form İletişim formu — CAPTCHA / ek alanlar {$hooks.contact_form}
auth_login Giriş formu — CAPTCHA {$hooks.auth_login}
auth_register Kayıt formu — CAPTCHA {$hooks.auth_register}

Görüntüleme Kancaları (Yönetim)

Yönetim kancaları {$adminHooks.*} kullanır (Module::renderAdminHooks() ile). admin_ ile başlayan kancalar için modülünüzde renderAdminDisplayHook() uygulayın.

Kanca Adı Konum Smarty Değişkeni
admin_login Yönetim giriş formu — CAPTCHA {$adminHooks.admin_login}
admin_product_button Ürün düzenleme — Kaydet yanında {$adminHooks.admin_product_button}
admin_order_detail Yönetim sipariş detayı {$adminHooks.admin_order_detail}
admin_header Yönetim içerik üstü (tüm sayfalar) {$adminHooks.admin_header}
admin_footer Yönetim alt bilgisi (tüm sayfalar) {$adminHooks.admin_footer}
admin_dashboard_top Kontrol paneli — üst {$adminHooks.admin_dashboard_top}
admin_dashboard_kpi Kontrol paneli — KPI kartlarının altı {$adminHooks.admin_dashboard_kpi}
admin_dashboard_main_left Kontrol paneli — sol sütun {$adminHooks.admin_dashboard_main_left}
admin_dashboard_main_right Kontrol paneli — sağ sütun {$adminHooks.admin_dashboard_main_right}
admin_dashboard_bottom Kontrol paneli — sayfa altı {$adminHooks.admin_dashboard_bottom}
Ertelenmiş kancalar (Module::refreshHook($smarty, $hookName, $context) veya yönetim render ile tembel yüklenen): product, product_tab, product_tab_content, product_inf, order_payment, order_confirmation, auth_social, admin_product_button, admin_order_detail, admin_header, admin_footer ve tüm admin_dashboard_* kancaları.

Modülünüzde Görüntüleme Kancalarını Bildirme

Modül sınıfınızda hangi görüntüleme kancalarının desteklendiğini ve kurulumda varsayılan olarak hangilerinin etkinleştirileceğini tanımlayın:

  • $displayHooks — kanca adı => açıklama (yönetimde gösterilir)
  • $defaultDisplayHooks — install() sırasında otomatik atanan kancalar
  • renderDisplayHook($hook, $context) — ön yüz HTML
  • renderAdminDisplayHook($hook, $context) — admin_* kancaları için yönetim HTML

Yönetim Üzerinden Kanca Atama

Kanca atamaları Module::setDisplayHooks($moduleName, $hookNames) ile kaydedilir. Yalnızca hem $displayHooks hem de global görüntüleme kancası kataloğunda listelenen kancalar kabul edilir.

PHP
<?php

// ── Event hooks in boot() ───────────────────────────────────────
public function boot(): void
{
    Module::registerHook('order.placed', function (array $order): void {
        Logger::info('Order placed: ' . ($order['id_order'] ?? ''));
    });

    Module::registerHook('order.updated', function (array $order, $oldStatus = null): void {
        // status / cargo / content edits
    });

    Module::registerHook('product.updated', function (int $idProduct, $product = null, $isNew = false): void {
        // sync external catalog, clear caches, etc.
    });

    Module::registerHook('cart.changed', function (array $cart): void {
        // abandoned-cart tracking, analytics
    });

    Module::registerHook('form.captcha.validate', function (string $form, string &$error): void {
        // set $error when CAPTCHA fails
    });

    Module::registerHook('smarty.assign', function ($smarty): void {
        if ($smarty) {
            $smarty->assign('myModuleEnabled', true);
        }
    });

    Module::registerHook('head.assets', function (array &$assets): void {
        $assets['css'][] = 'https://cdn.example.com/extra.css';
    });
}

// ── Display hooks: declare + render ────────────────────────────
public array $displayHooks = [
    'footer'         => 'Footer block',
    'product_detail' => 'Product detail section',
    'auth_login'     => 'Login CAPTCHA',
];

public array $defaultDisplayHooks = ['footer'];

public function renderDisplayHook(string $hook, array $context = []): ?string
{
    return match ($hook) {
        'footer' => $this->renderFrontTemplate('footer', [
            'message' => Settings::get('MY_MODULE_TEXT'),
        ]),
        'product_detail' => $this->renderFrontTemplate('product_detail', [
            'id_product' => $context['id_product'] ?? 0,
        ]),
        default => null,
    };
}
footer.tpl (Görüntüleme Kancası Örneği)
{* assets/templates/front/footer.tpl *}

<div class="my-module-footer">
    {if $message}
        <p>{$message|escape}</p>
    {/if}
</div>
Ürün sayfasında ertelenmiş kancayı yenileme
<?php

// Call from product detail controller after $smarty is ready:
Module::refreshHook($smarty, 'product_detail', [
    'id_product' => (int) $product['id_product'],
]);

// Smarty template:
// {$hooks.product_detail}
Yönetim görüntüleme kancası örneği
<?php

public array $displayHooks = [
    'admin_order_detail' => 'Extra block on order detail',
    'admin_dashboard_top' => 'Dashboard banner',
];

public function renderAdminDisplayHook(string $hook, array $context = []): ?string
{
    return match ($hook) {
        'admin_order_detail' => $this->renderAdminTemplate('order-detail', $context),
        'admin_dashboard_top' => $this->renderAdminTemplate('dashboard-top', $context),
        default => null,
    };
}
Modül sınıfında görüntüleme kancalarını kaydetme
<?php

// Minimum setup inside {name}.php:

public array $displayHooks = [
    'footer' => 'Shown in store footer',
];

public array $defaultDisplayHooks = ['footer'];

public function renderDisplayHook(string $hook, array $context = []): ?string
{
    if ($hook !== 'footer') {
        return null;
    }

    return $this->renderFrontTemplate('footer', $context);
}