Panel Content Screen Hooks
The twenty-two placement points of the content, message, notification and language screens: forms, lists and toolbars.
Overview
The placement points of the site content, contact messages, notification templates and languages live here.
One thing runs through the content screens: the same screen serves several types. Pages, contracts, news, articles and references share one form; the message list serves five folders. Check the type if what you add should not appear on all of them.
Reference
After the page title
Appears after the title on the content management pages. The controller name tells you which page you are on.
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:admin.content.page_title.after', 10, function ($controller) {
// Kanca birden cok sayfada calisir.
if ($controller !== 'pages') return null;
return '<span class="badge bg-secondary">Acme</span>';
});Above the content form
Appears above the content edit 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:admin.content_edit.before_content', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Below the content form
Appears below the same form. The place to add a metadata field of your own.
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:admin.content_edit.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The content list toolbar
Appears in the toolbar of the content list. The links of the screen itself are in your hands too.
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:admin.content_list.toolbar', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the table on the content list
Appears immediately above the content 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:admin.content_list.before_table', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the content category form
Appears below the form of the blog and reference categories.
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:admin.content_category_edit.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the slide form
Appears below the home page slide 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:admin.slide_edit.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The message action area
Appears in the action area of a contact message.
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:admin.messages_detail.actions', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The message toolbar
Appears in the toolbar of the message itself.
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:admin.messages_detail.message.toolbar', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The message reply form toolbar
Appears in the toolbar of the reply 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:admin.messages_detail.reply_form.toolbar', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Below the message editor
Appears immediately below the reply editor.
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:admin.messages_detail.reply_editor.after', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The message list toolbar
Appears in the toolbar of the contact message 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:admin.messages_list.toolbar', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The notification template list toolbar
Appears in the toolbar of the notification template 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:admin.notification_list.toolbar', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the table on the template list
Appears immediately above the template 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:admin.notification_list.before_table', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The bottom of the template list
Appears at the very bottom of the template 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:admin.notification_list.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the template form
Appears above the notification template edit 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:admin.notification_edit.before_content', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Below the template form
Appears below the same form. The place to show a list of your own variables.
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:admin.notification_edit.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the notification settings form
Appears above the notification shell 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:admin.notification_settings.before_form', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});The language list toolbar
Appears in the toolbar of the language 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:admin.language_list.toolbar', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the table on the language list
Appears immediately above the language 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:admin.language_list.before_table', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Above the language form
Appears above the language add and edit 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:admin.language_edit.before_content', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Below the language form
Appears below the same 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:admin.language_edit.bottom', 10, function () {
return '<div class="alert alert-info">Acme</div>';
});Pitfalls
The content form serves five separate types, the message list five folders, and the page title point many controllers. A listener that outputs without checking the type shows a blog field to an administrator editing a contract.
The list at the notification template points is not flat: first come the groups, then the items of each group. A listener walking it as one level never sees the items at all.
Related Articles
Thanks for your feedback!
Our support team is here around the clock for anything you can't find above.