# Customer Domain Screen Hooks

https://dev.wisecp.com/es/client-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

uiclient.domain_detail.hero.after

`website/domains/detail` no parameters

Appears immediately below the hero block of the domain detail. It suits a warning specific to an extension.

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 PHP

```php
Hook::add('ui:client.domain_detail.hero.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The end of the hero actions

uiclient.domain_detail.hero_actions.end

`website/domains/detail` no parameters

Appears at the end of the action buttons in the hero block.

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 PHP

```php
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

uiclient.domain_detail.tabs.end

`website/domains/detail` no parameters

Appears at the end of the tab bar on the domain detail. The place to add the label of your own tab.

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 PHP

```php
Hook::add('ui:client.domain_detail.tabs.end', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The top of the overview tab

uiclient.domain_detail.overview.top

`website/domains/detail` no parameters

Appears at the very top of the overview tab.

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 PHP

```php
Hook::add('ui:client.domain_detail.overview.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the overview tab

uiclient.domain_detail.overview.bottom

`website/domains/detail` no parameters

Appears at the very bottom of the overview tab.

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 PHP

```php
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

uiclient.domain_detail.nameservers.top

`website/domains/detail` no parameters

Appears above the name server form. It suits a reminder that a wrong setting makes the domain unreachable.

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 PHP

```php
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

uiclient.domain_detail.nameservers.bottom

`website/domains/detail` no parameters

Appears below the name server 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 PHP

```php
Hook::add('ui:client.domain_detail.nameservers.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The top of the DNS tab

uiclient.domain_detail.dns.top

`website/domains/detail` no parameters

Appears above the DNS record table.

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 PHP

```php
Hook::add('ui:client.domain_detail.dns.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the DNS tab

uiclient.domain_detail.dns.bottom

`website/domains/detail` no parameters

Appears below the DNS record table.

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 PHP

```php
Hook::add('ui:client.domain_detail.dns.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The top of the contacts tab

uiclient.domain_detail.contacts.top

`website/domains/detail` no parameters

Appears above the domain contact details.

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 PHP

```php
Hook::add('ui:client.domain_detail.contacts.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the contacts tab

uiclient.domain_detail.contacts.bottom

`website/domains/detail` no parameters

Appears below the contact details.

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 PHP

```php
Hook::add('ui:client.domain_detail.contacts.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The top of the forwarding tab

uiclient.domain_detail.forwarding.top

`website/domains/detail` no parameters

Appears above the address and email forwarding 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 PHP

```php
Hook::add('ui:client.domain_detail.forwarding.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the forwarding tab

uiclient.domain_detail.forwarding.bottom

`website/domains/detail` no parameters

Appears below the forwarding 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 PHP

```php
Hook::add('ui:client.domain_detail.forwarding.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The top of the transfer tab

uiclient.domain_detail.transfer.top

`website/domains/detail` no parameters

Appears above the transfer 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 PHP

```php
Hook::add('ui:client.domain_detail.transfer.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the transfer tab

uiclient.domain_detail.transfer.bottom

`website/domains/detail` no parameters

Appears below the transfer 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 PHP

```php
Hook::add('ui:client.domain_detail.transfer.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The top of the billing tab

uiclient.domain_detail.billing.top

`website/domains/detail` no parameters

Appears above the billing section of the domain.

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 PHP

```php
Hook::add('ui:client.domain_detail.billing.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the billing tab

uiclient.domain_detail.billing.bottom

`website/domains/detail` no parameters

Appears below the billing 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 PHP

```php
Hook::add('ui:client.domain_detail.billing.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Above the invoice list

uiclient.domain_detail.billing_invoices.before

`website/domains/detail` no parameters

Appears immediately above the list of invoices for the domain.

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 PHP

```php
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

uiclient.domain_detail.activity.top

`website/domains/detail` no parameters

Appears above the domain history.

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 PHP

```php
Hook::add('ui:client.domain_detail.activity.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The bottom of the activity tab

uiclient.domain_detail.activity.bottom

`website/domains/detail` no parameters

Appears below the domain history.

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 PHP

```php
Hook::add('ui:client.domain_detail.activity.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### After the protection section

uiclient.domain_detail.protection.after

`website/domains/detail` no parameters

Appears after the privacy and transfer lock 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 PHP

```php
Hook::add('ui:client.domain_detail.protection.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The end of the modals

uiclient.domain_detail.modals.end

`website/domains/detail` no parameters

Appears at the end of the modals on the page. The right place to add one of your own, since it disturbs no layout.

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 PHP

```php
Hook::add('ui:client.domain_detail.modals.end', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### After the attention banner

uiclient.domains_list.attention.after

`website/domains` no parameters

Appears after the attention banner on the domain 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 PHP

```php
Hook::add('ui:client.domains_list.attention.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### After the summary tiles

uiclient.domains_list.tiles.after

`website/domains` no parameters

Appears after the summary tiles above the 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 PHP

```php
Hook::add('ui:client.domains_list.tiles.after', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The end of the header actions

uiclient.domains_list.header_actions.end

`website/domains` no parameters

Appears at the end of the action buttons in the list header.

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 PHP

```php
Hook::add('ui:client.domains_list.header_actions.end', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The end of the toolbar

uiclient.domains_list.toolbar.end

`website/domains` no parameters

Appears at the end of the list toolbar.

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 PHP

```php
Hook::add('ui:client.domains_list.toolbar.end', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### The end of the list modals

uiclient.domains_list.modals.end

`website/domains` no parameters

Appears at the end of the modals on the 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 PHP

```php
Hook::add('ui:client.domains_list.modals.end', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

## Pitfalls

> **Which domain is on screen is not passed**
> 
> 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.

> **Put a modal at the modal point**
> 
> 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](https://dev.wisecp.com/en/hooks-on-the-customer-site)
- [Customer Service and Message Hooks](https://dev.wisecp.com/en/client-service-and-message-hooks)
- Domain Hooks
