2014-01-15 24 views
0

我有一個表單,我使用Form API在自定義模塊中創建。這是一個相當基本的形式,只有4個領域。它基本上爲用戶提供了一個工作提醒系統。我們只以電子郵件地址爲基礎,並提供一些搜索參數。我們希望人們能夠快速匿名地設置搜索代理,這意味着他們不會創建Drupal用戶帳戶,因爲我們不希望他們必須處理密碼等。他們只會將他們的電子郵件地址,檢查關閉一些偏好,我們將保存數據。Drupal 7:根據另一個字段和數據庫查找顯示錶單上的字段

現在我需要處理的問題是允許用戶稍後編輯他們的偏好和/或取消訂閱。再次,這不是高安全性,它不需要。我想要做的是最初只會在表格中提供他們的電子郵件地址,並允許他們提交。然後,我會檢查數據庫,看看我們是否已經有了該電子郵件地址的條目,如果是,請顯示預先填好的表單以供他們編輯或取消訂閱,其他則只顯示空白表單。所以我只是想找出解決這個問題的最好方法。我想我只有一個表單,其中包含所有字段,包括電子郵件地址,但在成功調用數據庫之後,除了電子郵件地址之外,還可以顯示其他字段。我只是絆倒如何做到這一點。

編輯: 我想知道如果我可以使用Drupal的AJAX功能來實現這一目標嗎?我試過這個,但是我無法讓它工作。我使用包裝器ID和回調函數在我的提交按鈕上放置了一個Ajax屬性。我在窗體中創建了一個帶有空白標記的表單元素,並使用了一個前綴和後綴,用我在AJAX參數中使用的ID創建了一個包裝div。然後我想我的回調函數中,我可以做數據庫查找,然後返回我需要預填充或不需要的表單元素到創建的包裝div,但是當我這樣做時,表單通過AJAX提交,而我拿到旋轉輪,但不管我在回調中返回什麼,它都不會出現在我的輸出包裝div中。我是否以正確的方式去做這件事?我也確保我有$ form_state ['rebuild'] = TRUE;在我原來的形式。

這是我試過的,它沒有工作。

/** 
* Implements hook_form(). 
*/ 
function _vista_form($form, &$form_state) { 

    $form = array(); 

    $form_state['rebuild'] = TRUE; 

    $form['email'] = array(
    '#type' => 'textfield', 
    '#title' => 'Email', 
    '#required' => TRUE, 
); 

    $form['render_area'] = array(
    '#type' => 'markup', 
    '#markup' => '', 
    '#prefix' => '<div id="job-agent-form">', 
    '#suffix' => '</div>', 
); 

    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Submit'), 
    '#attributes' => array('class' => array('submit')), 
    '#ajax' => array(
     'callback' => '_display_form', 
     'wrapper' => 'job-agent-form', 
     'method' => 'replace', 
     'effect' => 'fade', 
    ), 


    return $form; 
} 

function _display_form($form, &$form_state) { 


    // there are other form elements that would go here also, I just added two for example 

    $type_options = array(
    'VISTA-HealthCare-Partners-Government' => 'Vista Healthcare Partners', 
    'International' => 'International Locum Tenens', 
    'Permanent' => 'Permanent Physician', 
    'US-Locum-Tenens' => 'US Locum Tenens', 
); 

    $form['job_type'] = array(
    '#type' => 'checkboxes', 
    '#multiple' => TRUE, 
    '#title' => 'Type of Job',  
    '#options' => $type_options,  
    '#empty_option' => 'Choose a placement type', 
    '#empty_value' => 'all', 
    //'#default_value' => $type_selected, 
); 

    $form['active'] = array(
    '#type' => 'checkbox',  
    '#title' => 'Subscribe/Unsubscribe',  
    '#default_value' => 1, 
); 

    return $form; 
} 
+0

爲什麼你不能使用現有的訂閱模塊? – RajeevK

+0

沒有一個人按照我們希望他們未經嚴格修改的方式工作。只是從頭開始創建我們需要的東西。 –

回答

0

我會去創造形式不是使用hook_form_alter()所有字段隱藏不需要的人用[「#access」] = FALSE。

相關問題