Пример изменения сообщения, выводимого после создания материала типа page
:
/**
* Implements hook_form_BASE_FORM_ID_alter(): node_form.
*/
function modulename_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form['#bundle'] == 'page' && !$form['nid']['#value']) {
$form['actions']['submit']['#submit'][] = 'modulename_form_node_form_submit';
}
}
/**
* Custom page node_form submit callback.
*/
function modulename_form_node_form_submit($form, &$form_state) {
if (!empty($_SESSION['messages']['status'])) {
$node = $form_state['node'];
$old_message = t('@type %title has been created.', array('@type' => node_type_get_name($node), '%title' => $node->title));
$old_message_key = array_search($old_message, $_SESSION['messages']['status']);
if ($old_message_key !== FALSE) {
$_SESSION['messages']['status'][$old_message_key] = 'Текст нового сообщения';
}
}
}
Написанное актуально для
Drupal 7
Похожие записи
- Модуль Auto-Dialog — показываем контент и формы в jQuery диалоге
- Модуль References dialog — расширение возможностей виджета у полей типа entity reference
- Уведомление пользователя об удалении его материала с указанием причины
- Человечные заголовки у форм создания материалов
- Как сделать редирект на определённый адрес после создания/сохранения ноды
Комментарии
Печально что такая простая вещь, как флеш мессаги, не кастомизируется, приходится в сессию лезть, искать, а если изменят текст, то все сломается.
А если не хотите лезть в код и писать модуль можно сделать следующее:
- Ставим модуль Disable Messages
- Ставим модуль Rules ( редкий сайт где я не ставлю этот модуль сразу после установки. Привык к нему что ли )
- В настройках модуля Disable Messages в поле Message to be disabled прописываем паттерн типа:
Материал .*? типа Новость был создан.
- Идём в Rules. Ставим действие - Показать сообщение на сайте. Условие - добавлен материал типа "Новость".
Как то так.
Можно же просто сделать drupal get messages , а потом drupal set message в сабмит функции
drupal get messages удалит все сообщения
Модуль csm такое умеет
Подход Freem работает на все 100%, большое спасибо.
Спасибо за пост. В моем случае почему-то если в массиве $_SESSION['messages']['status'] остается единственный элемент и его индекс отличен от '0', то сообщение не выводится. Если индекс 0, то все нормально; если элементов несколько (не важно с какими индексами), тоже все ок. Возможно это связано с темизацией сообщений, не проверял, но может кому-то пригодится.
Насчет того, почему этот подход может оказаться полезным - с помощью него можно показывать разные сообщения в зависимости от результата сохранения ноды (published, unpublished). Я это делаю так: с помощью hook_node_insert добавляю нужное сообщение ("страница опубликована" или "страница ожидает одобрения администратора"), а помощью hook_form_FORM_ID_alter() или hook_form_BASE_FORM_ID_alter() можно почистить лишнее, как описано у вас в статье.
Александр
Да, забыл написать, сбросить индексы массива можно так:
Подскажите, пожалуйста, а как можно вообще убрать вывод этого сообщения?
Предыдущий вопрос снят:) Получилось сделать через unset. Спасибо за пост!
Добавить комментарий