it-swarm-eu.dev

Přesměrování na vlastní stránku po přidání nebo úpravě uzlu

Jak mohu pomocí hook_form_alter Přesměrovat uživatele na vlastní stránku po vytvoření nebo úpravě uzlu místo uzlu, který byl vytvořen nebo upraven?

Aktuální kód pro hook_form_alter() je následující:

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');
  }
}
15
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';
}

Kód přesměruje formulář nezávisle na tlačítku, na který jste klikli a formulář odešlete. Pokud chcete přesměrovat formulář pouze po kliknutí na konkrétní tlačítko odeslání, měli byste použít následující kód.

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';
}

  • ID formuláře neobsahuje spojovníky. ID formuláře je název funkce PHP, která generuje formulář (a.k.a. tvůrce formuláře), a PHP funkce nemůže v názvu obsahovat spojovníky).
  • ID formuláře je předáno implementacím hook_form_alter () , hook_form_BASE_FORM_ID_alter () a hook_form_FORM_ID_alter () . hook_form_FORM_ID_alter() to opravdu nepotřebuje, protože se požaduje pro specifický formulář, zatímco další dva háčky jsou vyvolány pro více než jeden formulář.
  • První funkcí je implementace hook_form_BASE_FORM_ID_alter () ; v tomto případě je ID základní formy "node_form", což je základní forma pro editační formulář uzlu.
  • Formulář pro úpravu uzlu obsahuje $form['#node'], Což je objekt uzlu pro upravovaný objekt; „custom“ je krátké ID pro typ obsahu, který chcete přesměrovat uživatele, jakmile upraví uzel.
  • Změna $form_state['redirect'] Z hook_form_alter() nemá žádný efekt; musí být nastavena od obsluhy odevzdání.
16
kiamlaluno

Tento kód funguje na webu 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

To lze provést nastavením $form_state['redirect'], Například pomocí jednoho z následujících řádků.

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

Jsou to stejné argumenty, jaké byste předali drupal_goto() .

4
Shoaib Nawaz

Nejste si jisti, zda se jedná o možnost pro vás, ale pokud se jedná o typ obsahu, můžete toho dosáhnout velmi rychle pomocí modulu Pravidla nastavením pravidla, které se má spustit při aktualizaci nebo vytvoření určitého typu obsahu.

2
Aaron Ortega