web-gelistirme-sc.com

Hangi düğmenin tıklandığını nasıl bilebilirim?

"Gönder" ve "İptal" düğmelerini içeren bir form var. hook_submit() içinde hangi düğmenin tıklandığını nasıl bilebilirim?

12
user1359

$form_state->getTriggeringElement() kullanmalısınız.

En iyi yöntem, düğmeniz için bir #name Özniteliği tanımlamaktır, böylece bu değeri triggering_element İçinde bulabilirsiniz.

Örneğin:

$form['delete'] = array(
  '#type' => 'submit',
  '#value' => t('Delete'),
  '#name' => 'delete',
);

Bu örnekte: $form_state->getTriggeringElement()['#name']public function submitForm(&$form, $form_state) içinde çağrıldığında _ "işlev" döndürecektir

Bu özelliği tanımlamazsanız triggering_element Düğmenin #value (Kullanıcının okuyabileceği metin) tutar, ancak diğer modüller bu değeri değiştirebileceği veya yerelleştirme tarafından değiştirilebileceği için bu önerilmez ).

$form_state['clicked_button'] Da kullanabilirsiniz, ancak bu kullanımdan kaldırılmıştır .

Daha fazla bilgiyi drupal_build_form işlev belgeleri sayfasında okuyabilirsiniz.

23
sanzante

$form_state['clicked_button']['#value'] formda hangi düğmenin tıklandığını söyleyecektir.

7
iStryker

Bu değerleri $form_state Drupal 6 içinde yapıyorum ve Drupal7'de aynı olurdu

if($form_state['values']['ok'] == $form_state]['clicked_button']['#value']){
    //Process if OK is pressed
}else if($form_state['values']['cancel'] == $form_state]['clicked_button']['#value']) {
    //Process if Cancel is pressed
}
3
Shoaib Nawaz

Düğmelere #name özelliği, şöyle:

$form['delete'] = array(
    '#type' => 'submit',
    '#value' => t('Delete'),
    '#name' => 'delete',
);

ve sonra şunu kullanın:

$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
3
user13097

GÜNCELLEME 2016 Drupal 8

Hala tetiklenen olaya nasıl erişileceğini anlamaya çalışanlar için Drupal 8 çözümü.

$form_state->getTriggeringElement()

Bu, tetikleyici gönderme öğesinin dizisini döndürür. #name Adlı bir işaretleme eklerseniz, buna şu şekilde erişirsiniz.

$button_clicked = $form_state->getTriggeringElement()['#name']

Bu değişikliğin arkasındaki neden, FormStateInterface'nin artık readOnly genişleten sınıfların değişkenlere erişebileceği bir FormStateInterface dosyası olmasıdır. Bu nedenle, değişkene erişmek için getTriggeringElement() gibi erişimci yöntemlerini kullanmanız gerekir.

3
Neoaptt

Drupal 8.6.7

Düğme aşağıdaki gibi bir şey oluşturun.

$form['my_button'] = [
    '#type' => 'button',
    '#value' => t('Custom Button'),
    '#name' => t('customButton'),
    '#weight' => 0,
    '#attributes' => [
      'class' => ['populate-bib-button', 'btn', 'btn-primary'],
    ],
  ];

Gönderme fonksiyonunuzda aşağıdaki kod gibi düğme adı alın.

$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton

Karşılaştırma şöyle yapılabilir

if ($input['_triggering_element_name'] == 'customButton') {
  // Do something.
}

# Drupal8

0
Yogesh Kushwaha

Drupal 8.4.4 $form_state->getTriggeringElement()['#name']; size op değerini verir. Form anahtarının değerler dizisinde bu anahtarı aradığınızda, #value Düğmesi form öğesinin anahtarı - başka bir deyişle, son kullanıcıların sayfadaki düğmede gördüğü dize.

$form_state->getValues()['op']'in tüm formlar için evrensel olup olmadığını bilmiyorum, ancak modülümün biçiminde kodlamıyorum.

0
user1359