Redirecionar usuário após adicionar / editar nó

13

Desejo redirecionar os usuários para uma página personalizada, depois que eles criam ou editam um nó.

ousneo
fonte

Respostas:

6

Você pode usar hook_form_alterpara adicionar um manipulador de envio personalizado, onde é possível definir o caminho de redirecionamento.

Consulte a FAPI para obter mais detalhes sobre o redirecionamento de formulário.

googletorp
fonte
1
Obrigado pela sua resposta! Eu li sobre a FAPI, mas ainda tenho uma pergunta a seguir: Onde devo colocar a função hook_form_alter?
Ousneo
2
@ousneo No drupal 7, você pode colocá-lo no seu tema ou em um módulo personalizado que você criar.
googletorp
1
por favor, veja @Dmitry Vyal resposta
Capi Etheriel 11/12
1
Aqui está um módulo que faz um redirecionamento após salvar. drupal.org/project/node_save_redirect
polyclick
1
Embora aceita, essa resposta é breve demais para ser útil. Realmente importa como você adiciona seu manipulador de envio personalizado, e essa resposta é silenciosa. A melhor resposta IMHO é a do @leymannx (mas veja pelo comentário sobre o caso de uso de edição).
Free Radical
4

Você pode criar uma regra que redirecione o usuário para qualquer página ao criar ou editar um tipo de conteúdo específico. Quando você adiciona uma regra, selecione "Após criar novo conteúdo" e adicione também uma condição de "Conteúdo com tipo". A seção Você faz oferece a opção de redirecionar um usuário para qualquer página que você desejar.

Para redirecionar após editar um nó, basta criar uma nova regra e selecione "Após atualizar o conteúdo existente" como sua primeira opção.

kiamlaluno
fonte
Usei o Regras para redirecionar depois de criar um conteúdo específico, mas o usuário não recebe comentários agora. Quero mostrar ao usuário que "Seu conteúdo foi criado". Como posso melhorar isso?
precisa saber é o seguinte
1
Adicione outra ação após a ação de redirecionamento para "Mostrar uma mensagem configurável no site" e adicione sua mensagem personalizada a partir daí.
Eu adicionei outra regra, mas acho que sinto falta de algo no meu tema personalizado, porque a mensagem não é mostrada na minha página inicial. Estou usando um módulo 'Melhores mensagens' para mostrar esse tipo de mensagem em um pop-up! regra de configuração
wallace740
Minha experiência é que a sobreposição quebra as regras de redirecionamento, cuidado.
Capi Etheriel
No meu caso, o formulário de adição de nó foi incorporado dentro de um painel. hook_form_alter não pegou. Mas as regras funcionaram muito bem!
Druvision
2

Ao fazer isso, certifique-se de desconfigurar também um possível destino existente que normalmente é adicionado à URL quando você clica no botão editar para editar um nó existente.

Substitua articlepelo MYMODULE_form_article_node_form_alternome da máquina do seu tipo de conteúdo.

/**
 * 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
fonte
Isso funciona para redirecionamentos após a adição de um nó, mas não após a edição. Eu entendo que as chamadas para unseto destinationé suposto para lidar com o caso de edição uso, mas eles não têm nenhum efeito no meu site Drupal 7.
Free Radical
@FreeRadical - Você está certo. Atualizei a resposta para usar hook_form_BASE_FORM_ID_alter , que tem como objetivo adicionar e editar.
Leymannx
@FreeRadical - Informações adicionais: diferença entre criar novo e editar nó no formulário alterar .
Leymannx
1

A documentação não é muito clara sobre isso, mas você deve modificar $_GET['destination']variável, não $_REQUESTou $form_state['redirect'].

Dmitry Vyal
fonte
1
Modificar $ form_state ['redirect'] funciona bem no Drupal 7 ...
Felix Eve
1

no Drupal 7, você pode alterar o formulário de edição do nó para 'anexar' sua própria função de envio, na qual é possível alterar o form_state do formulário de confirmação de exclusão do nó para incluir o parâmetro 'destination' ... apenas fiz isso em um tema personalizado i ' desenvolvi como um subtema do tema administrativo dos 'sete' ...

Documentação para hook_form_FORM_ID_alter

Você pode adicionar esse gancho a um modelo / tema, não apenas a módulos.

Assim, no seu tema template.php, adicione este formulário alter hook:

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

e então, voila. não é mais redirecionado para a página inicial depois que um nó é excluído.

kris
fonte