xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

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

Комментарии RSS

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

А если не хотите лезть в код и писать модуль можно сделать следующее:
- Ставим модуль 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() можно почистить лишнее, как описано у вас в статье.

Александр

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

$_SESSION['messages']['status'] = array_values($_SESSION['messages']['status']);

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании