Перенаправить пользователя после добавления / редактирования узла

13

Я хочу перенаправить пользователей на пользовательскую страницу после того, как они создадут узел или отредактируют его.

ousneo
источник

Ответы:

6

Вы можете использовать hook_form_alterдля добавления собственного обработчика отправки, где вы можете установить путь перенаправления.

Смотрите FAPI для более подробной информации о перенаправлении формы.

googletorp
источник
1
Спасибо за Ваш ответ ! Я читал о FAPI, но все еще есть вопрос: куда мне поместить функцию hook_form_alter?
ousneo
2
@ousneo В Drupal 7 вы можете поместить его в свою тему или в пользовательский модуль, который вы создаете.
googletorp
1
смотрите ответ @Dmitry Vyal
Capi Etheriel
1
Вот модуль, который выполняет перенаправление после сохранения. drupal.org/project/node_save_redirect
polyclick
1
Хотя этот ответ принят, он слишком короткий, чтобы быть полезным. Это действительно имеет значение, как вы добавляете свой пользовательский обработчик отправки, и в этом ответе ничего не сказано. Наилучший ответ, IMHO, от @leymannx (но см. В комментариях информацию о сценарии редактирования).
Свободное Радикальное
4

Вы можете создать правило, которое перенаправляет пользователя на любую страницу при создании или редактировании определенного типа контента. При добавлении правила выберите «После создания нового контента» и добавьте условие «Контент имеет тип». В разделе «Do Do» вы сможете перенаправить пользователя на любую нужную вам страницу.

Для перенаправления после редактирования узла просто создайте новое правило и выберите «После обновления существующего контента» в качестве первого варианта.

киамлалуно
источник
Я использовал правила для перенаправления после создания определенного контента, но пользователь теперь не получает обратной связи. Я хочу показать пользователю, что «Ваш контент создан». Как я могу улучшить это?
wallace740
1
Добавьте еще одно действие после действия перенаправления в «Показать настраиваемое сообщение на сайте» и добавьте туда свое собственное сообщение.
Я добавил еще одно правило, но мне кажется, что я что-то упустил в своей пользовательской теме, потому что сообщение не отображается на моей главной странице. Я использую модуль «Лучшие сообщения», чтобы показывать подобные сообщения во всплывающем окне!
конфиг
Мой опыт показывает, что оверлей нарушает правила перенаправления, будьте осторожны.
Capi Etheriel
В моем случае эта форма добавления узла была встроена в панель. hook_form_alter не уловил это. Но правила работали отлично!
Druvision
2

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

Замените articleна имя компьютера MYMODULE_form_article_node_form_alterвашего типа контента.

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function MYMODULE_form_article_node_form_alter(&$form, &$form_state, $form_id) {

  $form['actions']['submit']['#submit'][] = '_MYMODULE_node_form_redirect';
}

/**
 * Submit callback.
 */
function _MYMODULE_node_form_redirect($form, &$form_state) {

  // Unset destination first.
  unset($_GET['destination']);
  unset($_REQUEST['edit']['destination']);

  $form_state['redirect'] = 'FOO/BAR';
}
leymannx
источник
Это работает для перенаправлений после добавления узла, но не после его редактирования. Я понимаю , что призывы к предполагается обрабатывать редактировать случай использования, но они не имеют никакого влияния на моем Drupal 7 сайте. unsetdestination
Свободное Радикальное
@ FreeRadical - Вы правы. Я обновил ответ, чтобы использовать вместо него hook_form_BASE_FORM_ID_alter , который нацелен на добавление и редактирование.
leymannx
1

Документация не очень понятна, но вы должны изменить $_GET['destination']переменную, а не $_REQUESTили $form_state['redirect'].

Дмитрий Вял
источник
1
Модификация $ form_state ['redirect'] отлично работает в Drupal 7 ...
Феликс Ева
1

в Drupal 7 вы можете изменить форму редактирования узла, чтобы «прикрепить» свою собственную функцию отправки, в которой вы можете изменить form_state формы подтверждения удаления узла, чтобы включить параметр «destination» ... только что это было сделано в пользовательской теме i ' развивалась как подтема «семерки» административной темы ...

Документация для hook_form_FORM_ID_alter

Вы можете добавить этот хук в шаблон / тему, а не только в модули.

поэтому в вашей теме template.phpдобавьте эту форму alter hook:

function yourtheme_node_delete_form_submit( &$form, &$form_state ) {
    $form_state[ 'redirect' ][ 1 ][ 'query' ][ 'destination' ] = "admin/content";
}

а затем, вуаля. больше не перенаправляется на домашнюю страницу после удаления узла.

крис
источник