Customer Support Screen Hooks
The fourteen placement points of the ticket list, form and conversation.
Overview
The placement points on the customer support screens live here: the list, the new ticket form, the conversation and the reply box.
Two points run for every row: each message in the conversation and each ticket in the list. Heavy work in those slows the page noticeably.
Reference
Above the ticket list
Appears above the customer ticket 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.ticket_list.before', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The ticket list actions
Appears in the action area of 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.ticket_list.actions', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the ticket form
Appears above the new ticket form. It suits a notice that should be read before opening one.
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.ticket_create.form.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});After the form fields
Appears after the fields on the ticket form. If you add a field of your own here, you must handle the submitted value yourself.
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.ticket_create.fields.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the ticket form
Appears below the ticket 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.ticket_create.form.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the ticket form sidebar
Appears at the bottom of the column beside the ticket 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.ticket_create.sidebar.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the ticket sidebar
Appears at the top of the side column on the ticket detail.
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.ticket_detail.sidebar.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the ticket sidebar
Appears at the bottom of the side column.
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.ticket_detail.sidebar.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The ticket action area
Appears in the action area of the ticket detail.
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.ticket_detail.actions', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the conversation
Appears above the reply thread.
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.ticket_detail.thread.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the conversation
Appears below the reply thread.
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.ticket_detail.thread.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The top of the reply form
Appears above the customer reply box.
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.ticket_detail.reply_form.top', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the reply form
Appears below the reply box.
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.ticket_detail.reply_form.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});After a single message
Appears after every message in the conversation, separately. The message itself is not passed, so you cannot tell which one it is.
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.ticket_message.body.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Pitfalls
The message point in the conversation is called separately for every message in the thread. On a long ticket that means dozens of calls, and a listener querying inside it slows the page markedly.
A field you put on the ticket form is only visible. To handle the submitted value you must also listen on the matching hook; otherwise the customer fills it in and the value disappears.
Related Articles
- Customer Site Hooks
- Order Hooks
- Support Ticket Hooks
Thanks for your feedback!
Our support team is here around the clock for anything you can't find above.