Drupal Form API ve $ form_state ['depolama'] bir sayfa yenileme üzerinde yok edilir

2 Cevap php

Ben iki düğme göndermek görüntüleyen bir form var. İlk gönderme düğmesi bir değere $ form_state ['depolama'] ayarlar. İkinci düğmesine, sonra bu $ form_state ['depolama'] değeri okur gönderin. Değer ayarlanırsa, o zaman bir başarı mesajı görüntülenir. Değeri ayarlanmış değilse, o zaman bir fail mesajı görüntülenir.

İşte benim sorunu ürerler kodu:

function mymodule_test_admin() {
    return drupal_get_form('mymodule_test_form');
}

function mymodule_test_form(&$form_state) {
    $form['mymodule_test_form1'] = array(
        '#type' => 'fieldset',
        '#title' => t('test 1'),
        '#collapsible' => TRUE,
        '#collapsed' => FALSE,
        '#tree' => TRUE
    );

    $form['mymodule_test_form1']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('button 1'),
        '#submit' => array('mymodule_test_form1_submit')
    );

    $form['mymodule_test_form2'] = array(
        '#type' => 'fieldset',
        '#title' => t('test 2'),
        '#collapsible' => TRUE,
        '#collapsed' => FALSE,
        '#tree' => TRUE
    );

    $form['mymodule_test_form2']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('button 2'),
        '#submit' => array('mymodule_test_form2_submit')
    );

    return $form;
}

function mymodule_test_form1_submit($form, &$form_state) {
    $form_state['storage']['test_1'] = 'test 1';
    drupal_set_message(t('@message', array('@message' => $form_state['storage']['test_1'])));
}

function mymodule_test_form2_submit($form, &$form_state) {
    if (isset($form_state['storage']['test_1'])) {
        drupal_set_message(t('success'));
    }    else {
            drupal_set_message(t('fail!'));
        }
}

Eğer ilk gönderme düğmesi, $ form_state ['depolama'] tıkladığınızda düzgün ayarlanır. Eğer ikinci Gönder düğmesini tıkladığınızda, ileti "başarı" görüntülenir. Şimdiye kadar iyi. Şimdi bir sayfa yenileme yapmak. Mesajı "başarısız!" gösterilir.

Yani her şey sayfayı yenileyin kadar sağa kadar çalışır. Sayfa yenileme esasen sadece ikinci işlevi teslim çağırıyor. Teorik olarak, $ form_state ['depolama'] hala doldurulur edilmeli ve görüntülenen mesaj "başarı" olmalıdır. Ancak, $ form_state dökümü bir göz alarak sayfayı yenileyin sonra NULL doları form_state ['depolama'] gösterir. $ Form_state ['depolama'] sayfa yenileme temizlenir ediliyor eğer benim kod mantığı yanlış ya da ben söyleyemem.

Herhangi bir fikir?

Yardımlarınız için teşekkürler.

2 Cevap

Sen işleme form1_submit sonunda formu yeniden inşa etmek gerekir, bu bozulmadan önce gönderilen değerlerini koruyacaktır. Bu bazı ne multistep formları senaryo, ancak Drupal 5 yapıldığını yoldan biraz farklıdır.


function mymoduel_test_form1_submit($form, &$form_state) {
    $form_state['storage']['test_1'] = 'test 1';
    drupal_set_message(t('@message', array('@message' => $form_state['storage']['test_1'])));
    $form_state["rebuild"] = TRUE;
}

Hope this helps, Sarfaraz

Temizlenir, çok aşamalı formları depolamak için $ _SESSION ['mymodule_test_XXX'] kullanacak Depolama sonra teslim ...