Customer Domain Screen Hooks
The twenty-seven placement points of the domain detail and list.
Overview
The placement points on the customer domain screens live here: every tab of the detail page, the hero block, the modals and the list.
They are all parameter-less: the hook does not tell you which domain is on screen. If you need that context, resolve it from the address or from your own side.
Reference
Below the hero block
Appears immediately below the hero block of the domain detail. It suits a warning specific to an extension.
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.Hook::add('ui:client.domain_detail.hero.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The end of the hero actions
Appears at the end of the action buttons in the hero block.
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.Hook::add('ui:client.domain_detail.hero_actions.end', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The end of the tab bar
Appears at the end of the tab bar on the domain detail. The place to add the label of your own tab.
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.Hook::add('ui:client.domain_detail.tabs.end', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the overview tab
Appears at the very top of the overview tab.
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.Hook::add('ui:client.domain_detail.overview.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the overview tab
Appears at the very bottom of the overview tab.
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.Hook::add('ui:client.domain_detail.overview.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the name servers tab
Appears above the name server form. It suits a reminder that a wrong setting makes the domain unreachable.
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.Hook::add('ui:client.domain_detail.nameservers.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the name servers tab
Appears below the name server form.
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.Hook::add('ui:client.domain_detail.nameservers.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the DNS tab
Appears above the DNS record table.
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.Hook::add('ui:client.domain_detail.dns.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the DNS tab
Appears below the DNS record table.
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.Hook::add('ui:client.domain_detail.dns.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the contacts tab
Appears above the domain contact details.
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.Hook::add('ui:client.domain_detail.contacts.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the contacts tab
Appears below the contact details.
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.Hook::add('ui:client.domain_detail.contacts.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the forwarding tab
Appears above the address and email forwarding settings.
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.Hook::add('ui:client.domain_detail.forwarding.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the forwarding tab
Appears below the forwarding settings.
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.Hook::add('ui:client.domain_detail.forwarding.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the transfer tab
Appears above the transfer section.
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.Hook::add('ui:client.domain_detail.transfer.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the transfer tab
Appears below the transfer section.
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.Hook::add('ui:client.domain_detail.transfer.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the billing tab
Appears above the billing section of the domain.
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.Hook::add('ui:client.domain_detail.billing.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the billing tab
Appears below the billing section.
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.Hook::add('ui:client.domain_detail.billing.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the invoice list
Appears immediately above the list of invoices for the domain.
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.Hook::add('ui:client.domain_detail.billing_invoices.before', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the activity tab
Appears above the domain history.
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.Hook::add('ui:client.domain_detail.activity.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the activity tab
Appears below the domain history.
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.Hook::add('ui:client.domain_detail.activity.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});After the protection section
Appears after the privacy and transfer lock settings.
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.Hook::add('ui:client.domain_detail.protection.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The end of the modals
Appears at the end of the modals on the page. The right place to add one of your own, since it disturbs no layout.
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.Hook::add('ui:client.domain_detail.modals.end', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});After the attention banner
Appears after the attention banner on the domain list.
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.Hook::add('ui:client.domains_list.attention.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});After the summary tiles
Appears after the summary tiles above the list.
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.Hook::add('ui:client.domains_list.tiles.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The end of the header actions
Appears at the end of the action buttons in the list header.
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.Hook::add('ui:client.domains_list.header_actions.end', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The end of the toolbar
Appears at the end of the list toolbar.
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.Hook::add('ui:client.domains_list.toolbar.end', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The end of the list modals
Appears at the end of the modals on the list.
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.Hook::add('ui:client.domains_list.modals.end', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Pitfalls
None of these points hand you the domain. To show something that depends on it, resolve the id from the address. Relying on a "last viewed" value from the session shows the wrong domain’s details to a customer with two tabs open.
A listener placing its own modal in the middle of a tab pane disturbs the layout, and the modal disappears when the tab changes. There is a modal point for this: there it sits outside the page flow.
Related Articles
- Customer Site Hooks
- Customer Service and Message Hooks
- Domain Hooks
Thanks for your feedback!
Our support team is here around the clock for anything you can't find above.