Customer Account Screen Hooks

1 views Markdown

The twenty-nine placement points of the dashboard, the account pages and invoices.

Overview

The placement points on the screens a signed-in customer sees live here: the dashboard, the account pages, the balance, subscriptions, the partner programme and invoices.

Two points fall outside that pattern: the invoice detail and the licence transfer result can open for somebody not signed in. Your output there must not depend on a session.

Reference

The top of the dashboard

uiclient.dashboard.top
website/account no parameters

Appears at the very top of the customer dashboard.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.dashboard.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the dashboard panels

uiclient.dashboard.panels.after
website/account no parameters

Appears after the panels on the dashboard.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.dashboard.panels.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The bottom of the dashboard

uiclient.dashboard.bottom
website/account no parameters

Appears at the very bottom of the dashboard.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.dashboard.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the account tabs

uiclient.account.tabs.after
website/account no parameters

Appears after the tab bar on the account page.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.account.tabs.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the account cards

uiclient.account.cards.after
website/account no parameters

Appears after the account summary cards.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.account.cards.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The bottom of the profile form

uiclient.account.profile.form.bottom
website/account no parameters

Appears below the profile form. If you add a field, you must wire up its saving too.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.account.profile.form.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the security section

uiclient.account.security.after
website/account no parameters

Appears after the account security section.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.account.security.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the settings

uiclient.account.settings.after
website/account no parameters

Appears after the account settings.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.account.settings.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the sub-account list

uiclient.sub_accounts.list.after
website/account no parameters

Appears after the sub-user list.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.sub_accounts.list.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the API keys

uiclient.api_credentials.after
website/account no parameters

Appears after the API key list.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.api_credentials.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The bottom of the balance overview

uiclient.balance_overview.bottom
website/account no parameters

Appears below the balance overview.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.balance_overview.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the balance history

uiclient.balance_history.top
website/account no parameters

Appears above the balance movement list.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.balance_history.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The bottom of the top-up form

uiclient.add_funds.bottom
website/account no parameters

Appears below the wallet top-up form.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.add_funds.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the subscriptions list

uiclient.subscriptions.top
website/account no parameters

Appears above the list of payment agreements.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.subscriptions.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the partner dashboard

uiclient.affiliate_dashboard.top
website/account no parameters

Appears at the top of the partner programme dashboard.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.affiliate_dashboard.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the partner statistics

uiclient.affiliate_stats.after
website/account no parameters

Appears after the partner statistics.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.affiliate_stats.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the reseller dashboard

uiclient.reseller_dashboard.top
website/account no parameters

Appears at the top of the reseller dashboard.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.reseller_dashboard.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The certificate action area

uiclient.ssl_dashboard.actions
website/account no parameters

Appears in the action area of the certificate dashboard.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.ssl_dashboard.actions', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the message panel

uiclient.sms_panel.top
website/account no parameters

Appears at the top of the bulk message panel.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.sms_panel.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the message form

uiclient.sms_send.top
website/account no parameters

Appears above the message sending form. It suits a reminder that the charge is counted per part.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.sms_send.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The bottom of the message form

uiclient.sms_send.bottom
website/account no parameters

Appears below the message sending form.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.sms_send.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the invoice page

uiclient.invoice_detail.top
website/invoices no parameters

Appears at the very top of the invoice detail. It runs on an invoice opened through a share link too, where the visitor may not be signed in.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.invoice_detail.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the invoice lines

uiclient.invoice_detail.items_after
website/invoices no parameters

Appears after the invoice lines.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.invoice_detail.items_after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

After the transaction list

uiclient.invoice_detail.transactions.after
website/invoices no parameters

Appears after the payment movements.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.invoice_detail.transactions.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The bottom of the invoice page

uiclient.invoice_detail.bottom
website/invoices no parameters

Appears at the very bottom of the invoice detail.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.invoice_detail.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the invoice list

uiclient.invoice_list.top
website/invoices no parameters

Appears above the invoice list.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.invoice_list.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The invoice list toolbar

uiclient.invoice_list.toolbar
website/invoices no parameters

Appears in the toolbar of the invoice list.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.invoice_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

The top of the bulk payment page

uiclient.bulk_pay.top
website/invoices no parameters

Appears above the screen for paying several invoices together.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.bulk_pay.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

Above the transfer result page

uiclient.license_transfer_result.before
website/account no parameters

Appears above the licence transfer result page. That page opens through a link in an email, so the visitor may not be signed in.

Parameters 0
It takes no parameters.
Return 1
string|nullThe HTML you return appears. With several listeners the outputs are appended one after another in priority order. Empty text, null and false are skipped, so return null when you have nothing to add. The output enters the page unescaped — clean anything coming from outside yourself.
Listener
Hook::add('ui:client.license_transfer_result.before', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});

Pitfalls

The invoice page can open without a sign-in

The invoice detail also opens through a share link, where the visitor has no session. Output depending on one comes out empty there, and showing customer details opens them to somebody you cannot identify.

Adding a field to the profile form does not save it

A field you put on the account form is only visible. For the value to be kept you must also hook into the profile update flow; otherwise the customer fills it in, saves, and it disappears.

Was this helpful?

Thanks for your feedback!

Still Need Help?

Our support team is here around the clock for anything you can't find above.