Bir düğüm eklendikten veya düzenlendikten sonra özel bir sayfaya yönlendirme


15

Kullanarak hook_form_alter, oluşturulan veya düzenlenen düğüm yerine bir düğüm oluşturduktan veya düzenledikten sonra kullanıcıyı özel bir sayfaya nasıl yeniden yönlendirebilirim?

İçin şu anki kod hook_form_alter()şudur:

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

"Bunun için bir modül var": Düğüm Hedefi ( drupal.org/project/node_destination ) ancak yalnızca D6 için kullanılabilir. Belki adapte edilebilir.
Benj

Yanıtlar:


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

Kod, formu göndermek için tıklatılan düğmeden bağımsız olarak yeniden yönlendirir. Bir formu yalnızca belirli bir gönderme düğmesi tıklatıldığında yeniden yönlendirmek istiyorsanız, aşağıdaki kodu kullanmalısınız.

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

 

  • Form kimliği tire işareti içermiyor. Form kimliği, formu oluşturan PHP işlevinin adıdır (form oluşturucu olarak da bilinir) ve bir PHP işlevi adında tire işareti içeremez.
  • Form kimliği hook_form_alter () , hook_form_BASE_FORM_ID_alter () ve hook_form_FORM_ID_alter () uygulamalarına geçirilir . hook_form_FORM_ID_alter()diğer iki kanca birden fazla form için çağrılırken, belirli bir form için çağrıldığı için buna gerçekten ihtiyacı yoktur.
  • İlk işlev hook_form_BASE_FORM_ID_alter () işlevinin uygulanmasıdır ; bu durumda, temel form kimliği, düğüm düzenleme formunun temel formu olan "düğüm_formu" dur.
  • $form['#node']Düzenlenen nesnenin düğüm nesnesi olan düğüm düzenleme formu içerir ; "özel", bir düğümü düzenledikten sonra kullanıcıları yönlendirmek istediğiniz içerik türünün kısa kimliğidir.
  • Değiştirilmesi $form_state['redirect']gelen hook_form_alter()herhangi bir etkisi yoktur; bir gönderme işleyicisinden ayarlanması gerekir.

Bunun için teşekkürler. O Not &içinde function custom_node_submit($form, &$form_state) {çok önemlidir. Aksi takdirde, durumu referans olarak geçmezsiniz ve manuel olarak yaptığınız düzenlemeler etkili olmaz.
Bram

9

Bu kod bir Drupal 7 sitesinde çalışır.

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

Hangi cevabı # 4 olarak adlandırıyorsunuz?
Елин Й.

bu neden benim için çalışmıyor? Aynı kodu kullanıyorum
yakut

Önbelleğinizi temizlediniz @ruby?
coderama

Mevcut düğümler için, önce sayfadaki düzenle düğmesini tıkladığınızda normalde URL'ye eklenen hedefin ayarını kaldırmanız daha iyi oluradmin/content : drupal.stackexchange.com/a/192271/15055 .
leymannx

4

Bu, $form_state['redirect']örneğin aşağıdaki satırlardan biri kullanılarak ayarlanarak yapılabilir .

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

Bu aynı argümanlardan geçiyorsunuz drupal_goto().


@Shoaib Nawaz geri bildiriminiz için teşekkür ederiz. $ Form_state ['redirect'] 'i hook_form_alter hook'a şanssızlıkla ekledim.
Citricguy

Hayatım boyunca herhangi bir yerde etkili olmak için $ form_state ['redirect'] elde edemiyorum.
Citricguy

Bu olacak değil , bir düğüm eklendiğinde veya düzenlendi sonra yönlendirmek çalışırsanız çalışır. Nedenini görmek için düğüm formuna bakın . TRUE olarak değerlendirilirseniz, atadığınız değerin $form_state['redirect']üzerine yazılır ($node->nid).
Serbest Radikal

2

Bunun sizin için bir seçenek olup olmadığından emin değilim, ancak bu bir içerik türü ise, güncelleme veya belirli bir içerik türünün oluşturulması sırasında tetiklenecek bir kural ayarlayarak Kurallar modülünü kullanarak bunu oldukça hızlı bir şekilde gerçekleştirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.