Отключить сообщение о создании контента Drupal? - PullRequest
4 голосов
/ 28 мая 2010

Всякий раз, когда создается элемент контента, сообщение отображается так:

[Content Type] [Name] has been created.

Есть ли способ отключить это сообщение для определенных пользователей? Или для всех пользователей тоже будет хорошо.

Ответы [ 9 ]

4 голосов
/ 18 октября 2011

Я думаю, что лучшей практикой будет использование hook_nodeapi() и drupal_get_messages('status'). $op для hook_nodeapi() будет insert. Пример:

mymodule_nodeapi(&$node, $op) {
  if ($node->type == 'content_type_to_check_for' && $op == 'insert') {
    drupal_get_messages('status');
  }
}
3 голосов
/ 11 января 2013

Лучший способ для пользователя Отключить модуль сообщений . Этот модуль может быть отключен многими видами сообщений:

  • Отфильтровывать сообщения, точно совпадающие с полнотекстовой строкой.
  • Отфильтровывать сообщения, которые соответствуют регулярному выражению.
  • Разрешения на специальное скрытие всех сообщений данного типа от любой роли.
  • Отключить всю фильтрацию для определенных пользователей.
  • Отключить всю фильтрацию для определенных путей.
  • Применение фильтрации только для определенных путей.
  • Отладка системы для получения сообщений в HTML без их показа конечным пользователям.
3 голосов
/ 05 ноября 2012

Я написал эту функцию, довольно удобный imo. Приветствия

/** 
* method to assure only wanted messages are shown, filtered by optional type 
*/

function my_module_filter_messages() {

// before emptying the messages cache to get rid of i.e. status messages (uncommented so not kept), first save the types you want to keep in arrays
// this way you can exactly determine which will be displayed. Use free types such as "admin" or "custom" for own messages
// could be made smarter with params for node types or message types or with a variable_get (to turn on/off all messages of some sort (i.e. admin))

// $statuses = drupal_get_messages('status'); // suppressed by commenting
$errors = drupal_get_messages('error');
$warnings = drupal_get_messages('warning');
$customs = drupal_get_messages('custom');
$admins = drupal_get_messages('admin');
unset($_SESSION['messages']);

// dpm($admin);
global $user;

foreach ($statuses['status'] as $status) {
    drupal_set_message( $status, 'status'); // standard type
}
foreach ($errors['error'] as $error) {
    drupal_set_message( $error, 'error'); // standard type
}
foreach ($warnings['warning'] as $warning) {
    drupal_set_message( $warning, 'warning'); // standard type
}
foreach ($customs['custom'] as $custom) {
    drupal_set_message( $custom, 'custom'); // selfcreated type, note you might want to css this like the others
}
// only for admin's eyes, handy for testing
if($user->uid==1){
    foreach ($admins['admin'] as $admin) {
        drupal_set_message( $admin, 'admin'); // selfcreated type, note you might want to css this like the others
    }
}

}
3 голосов
/ 03 апреля 2012

Вот способ, которым я обнаружил, чтобы скрыть такие сообщения для определенных типов контента (тип узла - «запрос»):

// specific node type form alteration hook (implements [hook_form_FORM_ID_alter][1]())
function MYCUSTOMMODULE_form_request_node_form_alter(&$form, &$form_state) {
  // ... 
  // custom validation function
  $form['#validate'][] = '_custom_request_node_form_validate';
  // ...
}
function _custom_request_node_form_validate($form, &$form_state) {
  //...
  // here we can set a submit handler that is executed before 
  // node_form_submit which sets the messages we are trying to hide
  $form_state['submit_handlers'][] = '_custom_request_node_disable_msg';
  //...
}
function _custom_request_node_disable_msg($form, &$form_state) {
  //...
  // clear status messages
  drupal_get_messages('status');
}
3 голосов
/ 28 мая 2010

Это node_form_submit, который создает эти сообщения. Вы можете довольно легко использовать hook_form_alter в форме узла и использовать вместо этого собственную версию node_form_submit. Все, что вам нужно сделать, это скопировать функцию и добавить проверку user_access('whatever') до создания этого сообщения.

В качестве альтернативы, вы можете в функции preprocess_page проверить, какие сообщения обслуживаются, и удалить ненужные, но это будет немного сложнее. Должно быть возможно с некоторым регулярным выражением. С другой стороны, этот метод будет более дружественным к обновлению, поскольку вы можете продолжать использовать функцию node_form_submit и получать будущие изменения, если таковые будут.

2 голосов
/ 04 ноября 2011

Вы можете использовать модуль stringoverrides в drupal! :)

2 голосов
/ 31 мая 2010

Гуглторп прав (о функции отправки). Но, к сожалению, вы не можете отделить сообщение от функции отправки узла, и дублирование функциональности (без сообщения) будет означать, что ваш сайт может сломаться, когда будет выпущен релиз безопасности. Вы должны будете поддерживать свою собственную версию этой функции. Это, вероятно, не имеет большого значения, но это хорошая идея следовать передовой практике.

Вам нужно написать собственный хук отправки до или после вызова node_form_submit.

С помощью ловушки отправки после сохранения узла вы можете удалить сообщение из $_SESSION['messages'], если с массивом сообщений было достаточно легко работать. Я полагаю, это было бы достаточно просто. См drupal_set_message

OR

Вы можете написать некоторый класс в CSS в своем теге body и установить отображение none, когда сообщения о состоянии возвращаются на странице, которую отправляет форма узла. Но это может поместить вашу бизнес-логику в слой вашей темы, чего следует избегать.

2 голосов
/ 30 мая 2010

Если вы хотите использовать модуль «Правила», вы можете использовать новый созданный мной модуль, который называется «Сообщение о лучших правилах» . Используя это, вы можете настроить правило, которое будет удалять все сообщения после создания узла ...

Надеюсь, это будет добавлено в основной модуль правил в ближайшем будущем.

1 голос
/ 24 апреля 2011

Вы можете попробовать использовать следующий модуль для отключения определенных сообщений в Drupal - http://drupal.org/project/disable_messages

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...