Drupal 7: изменяем статусные сообщения » Ишмурaдов Алeксaндр

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

Drupal 7, после создания очередной ноды или комментария, выводит сообщение, что-то вроде «Forum topic %title has been created.» (пример для форумного топика). Вы, конечно же, хотите написать здесь что-то своё. А что, если текст зависит от того опубликована нода или отправлена на подтверждение администратору? Это как-раз мой случай, потому что я использую модуль Simple Regex Filter, чтобы отсеивать подозрительные сообщения на форумах.

Самое простое решение, позволяющее изменить все сообщения вида «@type %title has been created.», — установить модуль Strings Override, и вперёд. Для сложных случаев, когда нужна какая-то логика: устанавливается модуль Disable Messages, а затем используется экшн Rules «Set a message».

Однако в моем теме Disable Message ломает стили, да и не слишком гибкое это решение.

Поэтому вот ещё версия. Если комментарии на английском вам не понятны, пишите ниже, я постараюсь объяснить или помочь переделать код ваши нужды.

/** * We customize 'Forum topic ... has been created.' message when * it goes to the approval queue. This is done in two steps: * * 1. Add new status messages implementing hook_node_insert(). * This is done for both Published and Unpublished nodes. * For Published nodes we just duplicate the old message. * For Unpublished nodes we inform that the message is waiting for approval. * * 2. Remove old status message implementing hook_form_FORM_ID_alter(). * We override 'submit' action where we remove old messages in case it * matches the pattern '@type %title has been created.'. * We only remove a single match, so even if we duplicate a message * on the first step, one of them will still be displayed. * * We customize also the Drupal behavior when a Forum Topic was updated and * the new revision goes to the Approval Queue. Now it redirects a user to * the Forum Category and shows the similar status message to inform the user. * We use hook_node_update() for that. */ /** * Implements hook_node_insert() */ function MY_MODULE_node_insert($node) { /** * Add custom status messages when a node is inserted */ if ($node->type == 'forum') { if ($node->status == NODE_NOT_PUBLISHED) { drupal_set_message(t('Your forum topic has been queued for review by site administrators and will be published after approval.')); } elseif ($node->status == NODE_PUBLISHED) { $message = t('@type %title has been created.', array('@type' => node_type_get_name($node), '%title' => $node->title)); drupal_set_message($message, 'status', TRUE); } } } /** * Implements hook_node_update() */ function MY_MODULE_node_update($node) { /** * If a Forum Topic was updated and the new revision goes to the Approval Queue * we redirect a user to the Forum Category and show a message to keep him informed. */ if ($node->type == 'forum') { if ($node->status == NODE_NOT_PUBLISHED) { drupal_set_message(t('Your forum topic has been queued for review by site administrators and will be published after approval.')); drupal_goto('forum/' . $node->forum_tid); } } } /** * Implements hook_form_FORM_ID_alter(). * @see MY_MODULE_node_insert() */ function MY_MODULE_form_forum_node_form_alter(&$form, &$form_state, $form_id) { /** * Override 'submit' action for 'forum_node_form' form */ $form['actions']['submit']['#submit'][] = '_MY_MODULE_form_forum_node_form_submit'; } /** * @see MY_MODULE_form_forum_node_form_alter() */ function _MY_MODULE_form_forum_node_form_submit($form, &$form_state) { /** * Remove the old status message 'Forum topic ... has been created.' */ 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) { unset($_SESSION['messages']['status'][$old_message_key]); // Reset array indexes. Otherwise it doesn’t work with some theme templates. $_SESSION['messages']['status'] = array_values($_SESSION['messages']['status']); // Remove the empty status message wrapper if no other messages have been set. if (empty($_SESSION['messages']['status'])) { unset($_SESSION['messages']['status']); } } } }

Еще записи по теме

IRC (Internet Relay Chat)
    Как добавить файл в исключения антивируса Avast: пошаговая инструкция
    Avast (Аваст) — популярный антивирус благодаря функциональной бесплатной версии. Однако любые программы небезгрешны, и Avast порой совершает ошибки, удаляя или добавляя в свой чёрный список «чистые»,

    Рейтинг антивирусов для "Андроида", описание лучших
    Сегодня пользователи мобильных девайсов на основе Android-систем все чаще сталкиваются с необходимостью установки антивирусного и антишпионского программного обеспечения на свои устройства. И таких программных

    Выбор антивируса для Windows 10: учитываем результаты тестов
    После релиза Windows 10 у своевременно обновивших систему пользователей возник ряд вопросов по поводу безопасности компьютера. На форумах широко обсуждалась проблема, какой антивирус лучше для Windows

    Вирус не дает установить антивирус
    Хочу поделиться личным опытом. В офисе есть один ноутбук, работает вроде как без капризов с единственной странностью: не запускается антивирус. Вернее, запустится и тут же пропадет, не оседая в трее.

    Нужно ли устанавливать антивирус на Windows 10
    К сожалению, количество вирусных атак на компьютеры пользователей со временем не уменьшается, и поэтому антивирус является одной из самых необходимых программ, устанавливаемых в первую очередь. С появлением

    Microsoft Security Essentials
    Новый бесплатный антивирус от Microsoft предоставляет вам высокое качество защиты от вирусов и шпионских программ, в том числе троянов, интернет-червей и других вредоносных программ. Security Essentials

    Kaspersky Free 2018
    Kaspersky Free — бесплатный антивирус на 1 год, который защитит от 99% угроз уже после установки на операционную систему Windows. Скачать Касперский Фри антивирус бесплатно для ПК с официального

    Выбираем легкий антивирус для слабого компьютера или ноутбука
    Самый легкий антивирус для слабого компьютера – это актуальная тема на сегодняшний день, ведь далеко не все пользователи имеют мощные ПК, которые способы «тянуть» емкие приложения. Однако он нужен

    Как определить самый быстрый антивирус для компьютера
    С развитием информационных технологий, компьютер и ноутбук стал атрибутом повседневной жизни человека. Благодаря устройствам и интернету, пользователи могут получать полезную информацию, общаться с друзьями

    Лучшие антивирусы для Linux
    Немецкая лаборатория AV-Test определила лучшие антивирусы для Linux: 16 антивирусных решений были протестированы на противодействие вредоносным программам для Windows и Linux Перевод Comss.ru

rss