it-swarm.it

Reindirizzare a una pagina personalizzata dopo aver aggiunto o modificato un nodo

Utilizzando hook_form_alter, Come posso reindirizzare un utente a una pagina personalizzata dopo aver creato o modificato un nodo anziché il nodo che è stato creato o modificato?

Il codice corrente per hook_form_alter() è il seguente:

function custom_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'custom-node-form') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
  }
}
14
Citricguy
function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->type == 'custom') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
    $form['#submit'][] = 'custom_node_submit';
  }
}

function custom_node_submit($form, &$form_state) {
  $form_state['redirect'] = 'choose/your/path';
}

Il codice reindirizza il modulo indipendentemente dal pulsante selezionato per inviare il modulo. Se si desidera reindirizzare un modulo solo quando si fa clic su un pulsante di invio specifico, è necessario utilizzare il seguente codice.

function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->type == 'custom') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
    $form['actions']['submit']['#submit'][] = 'custom_node_submit';
  }
}

function custom_node_submit($form, &$form_state) {
  $form_state['redirect'] = 'choose/your/path';
}

  • L'ID modulo non contiene trattini. L'ID del modulo è il nome della PHP che genera il modulo (a.k.a. il generatore di moduli) e una PHP non può contenere trattini nel suo nome.
  • L'ID modulo viene passato alle implementazioni di hook_form_alter () , hook_form_BASE_FORM_ID_alter () e hook_form_FORM_ID_alter () . hook_form_FORM_ID_alter() non ne ha davvero bisogno, in quanto viene chiamato per un modulo specifico, mentre gli altri due hook vengono richiamati per più di un modulo.
  • La prima funzione è l'implementazione di hook_form_BASE_FORM_ID_alter () ; in questo caso, l'ID del modulo di base è "forma_nodo" che è il modulo di base per il modulo di modifica del nodo.
  • Il modulo di modifica del nodo contiene $form['#node'], Che è l'oggetto nodo per l'oggetto che si sta modificando; "personalizzato" è l'ID breve per il tipo di contenuto che si desidera reindirizzare gli utenti dopo aver modificato un nodo.
  • La modifica di $form_state['redirect'] Da hook_form_alter() non ha alcun effetto; deve essere impostato da un gestore di invio.
16
kiamlaluno

Questo codice funziona su un Drupal 7.

/**
 * Implements hook_form_alter()
 */

function custom_form_alter(&$form, &$form_state, $form_id) {    
  if ($form_id == 'article_node_form') {
    $form['actions']['submit']['#submit'][] = 'mysubmit_node_submit';
  }     
}

function mysubmit_node_submit($form, &$form_state) {
  $form_state['redirect'] = '/homepage';
}
9
sea26.2

Questo può essere fatto impostando $form_state['redirect'], Ad esempio usando una delle seguenti righe.

$form_state['redirect'] = "some-internal-path";
$form_state['redirect'] = array($path, $options_array, $http_code);

Sono gli stessi argomenti che passeresti a drupal_goto() .

4
Shoaib Nawaz

Non sono sicuro che si tratti di un'opzione per te, ma se si tratta di un tipo di contenuto puoi raggiungerlo abbastanza rapidamente utilizzando il modulo Regole impostando una regola da attivare in caso di aggiornamento o creazione di un determinato tipo di contenuto.

2
Aaron Ortega