Drupal → Как изменить сообщение, выводимое после создания материала

14.03.2014

Пример изменения сообщения, выводимого после создания материала типа 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
Похожие записи

Комментарии

Печально что такая простая вещь, как флеш мессаги, не кастомизируется, приходится в сессию лезть, искать, а если изменят текст, то все сломается.

А если не хотите лезть в код и писать модуль можно сделать следующее:
- Ставим модуль Disable Messages
- Ставим модуль Rules ( редкий сайт где я не ставлю этот модуль сразу после установки. Привык к нему что ли )
- В настройках модуля Disable Messages в поле Message to be disabled прописываем паттерн типа:
Материал .*? типа Новость был создан.
- Идём в Rules. Ставим действие - Показать сообщение на сайте. Условие - добавлен материал типа "Новость".

Как то так.

Гость
20.03.2014, 05:33

Можно же просто сделать drupal get messages , а потом drupal set message в сабмит функции

drupal get messages удалит все сообщения

Подход Freem работает на все 100%, большое спасибо.

Спасибо за пост. В моем случае почему-то если в массиве $_SESSION['messages']['status'] остается единственный элемент и его индекс отличен от '0', то сообщение не выводится. Если индекс 0, то все нормально; если элементов несколько (не важно с какими индексами), тоже все ок. Возможно это связано с темизацией сообщений, не проверял, но может кому-то пригодится.

Насчет того, почему этот подход может оказаться полезным - с помощью него можно показывать разные сообщения в зависимости от результата сохранения ноды (published, unpublished). Я это делаю так: с помощью hook_node_insert добавляю нужное сообщение ("страница опубликована" или "страница ожидает одобрения администратора"), а помощью hook_form_FORM_ID_alter() или hook_form_BASE_FORM_ID_alter() можно почистить лишнее, как описано у вас в статье.

Александр

Да, забыл написать, сбросить индексы массива можно так:

$_SESSION['messages']['status'] = array_values($_SESSION['messages']['status']);
Гость
02.08.2016, 12:54

Подскажите, пожалуйста, а как можно вообще убрать вывод этого сообщения?

Гость
02.08.2016, 12:57

Предыдущий вопрос снят:) Получилось сделать через unset. Спасибо за пост!

Добавить комментарий