Hooks

Hooks

The Kirby Kart plugin triggers various hooks which you can use to act upon.

site/config/config.php
<?php

use Bnomei\Kart\CartLine;
use Kirby\Cms\User;

return [
    'hooks' => [
        'kart.log' => function ($ex): void {
            // generic logger/exception handler
        },
        'kart.cart.completed' => function (?User $user = null, ?OrderPage $order = null): void {
            // fulfillment hook of Cart::complete()
        },
        'kart.provider.*.checkout' => function (): void {
            // kart()->provider()
        },
        'kart.provider.*.cancelled' => function (): void {
            // kart()->provider()
        },
        'kart.provider.*.completed' => function (array $data = []): void {
            // kart()->provider()
        },
        'kart.stock.updated' => function (StockPage $stock, int $amount): void {
            // StockPage::updateStock()
        },
        'kart.user.created' => function (?User $user = null): void {
            // TIP: use default kirby hook to track delete, or kart.user.softDeleted
            // TIP: send a magic login email
            // $user?->sendMagicLink();
            // TIP: or a discord notification to yourself
        },
        'kart.user.softDeleted' => function (?User $user = null): void {
            // TIP: or a discord notification to yourself
        },
        'kart.user.signup' => function (?User $user = null): void {
            // NOTE: this will happen in ADDITION to kart.user.created when the signup form is used
        },
        'kart.cart.add' => function (ProductPage $product, int $count, ?CartLine $item = null, ?User $user = null): void {
            // kart()->cart()
        },
        'kart.cart.remove' => function (ProductPage $product, int $count, ?CartLine $item = null, ?User $user = null): void {
            // kart()->cart()
        },
        'kart.cart.clear' => function (?User $user = null): void {
            // kart()->cart()
        },
        'kart.wishlist.add' => function (ProductPage $product, int $count, ?CartLine $item = null, ?User $user = null): void {
            // kart()->wishlist()
        },
        'kart.wishlist.remove' => function (ProductPage $product, int $count, ?CartLine $item = null, ?User $user = null): void {
            // kart()->wishlist()
        },
        'kart.wishlist.clear' => function (?User $user = null): void {
            // kart()->wishlist()
        },
        'kart.ratelimit.hit' => function (string $ip, string $key, int $count, int $limit): void {
            // Ratelimit::check()
        },
        'kart.order.download' => function (OrderPage $order, int $size, string $token, int $timestamp, string $ip): void {
            // TIP: use to log downloads
            // NOTE: to count/limit downloads see templates/order.zip.php
        },
        'kart.license.activate' => function (array $data): void {
            // NOTE: Kart does not track the state, that's up to you. see config options.
        },
        'kart.license.deactivate' => function (array $data): void {
            // NOTE: Kart does not track the state, that's up to you. see config options.
        },
        'kart.license.validate' => function (array $data): void {
            // NOTE: Kart does not track the state, that's up to you. see config options.
        },
    ],
    // other options
];

Fatal Errors

You can use Kirby's fatal-option callback (see docs) to get notified about errors happening. Please note that you will need to provide a custom template as well.

site/config/config.php
return [
  'fatal' => function($kirby, $exception) {

    site()->discord(['content' => $exception->getMessage()]);
    // or send a mail/sms

    include $kirby->root('templates') . '/fatal.php';
  }
];
Kirby Kart is not affiliated with the developers of Kirby CMS. We are merely standing on the shoulder of giants.
© 2025 Bruno Meilick All rights reserved.