2013-03-11 83 views
1

我已經創建了一個自定義模塊,當填寫並提交表單時,我需要收集信息並運行一個函數。Drupal 7表單提交的表單API運行函數

它有兩個文本區域和一個按鈕。

這是我這顯示在頁面上罰款:

文件:myFunction.admin.inc

function myFunction_form($form) 
{ 

    $form['pages'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Data'), 
    '#collapsible' => FALSE, 
    '#collapsed' => FALSE, 
); 

    $form['pages']['title'] = array(
    '#type'   => 'textarea', 
    '#title'   => t('Title'), 
    '#rows'   => 5, 
    '#resizable' => FALSE, 
); 

    $form['pages']['body'] = array(
    '#type'   => 'text_format', 
    '#title'   => t('Body'), 
    '#rows'   => 5, 
    '#resizable' => FALSE, 
    '#format' => 'full_html', 
); 

    $form['submit'] = array('#type' => 'submit', '#value' => t('Run Function')); 

    myFunction($form); 
    return $form; 

} 

function myFunction() 
{ 
//This is where I use the data collected from my form and do what I need to do. 
} 

所以我失蹤形式的東西這一點(請告訴我,如果我走錯了方式關於這一點)是我需要驗證表格填寫並返回錯誤消息,如果沒有。

如果填寫了表格,然後正確地將字段數據傳遞給我的函數,我只是通過在return $form;之前添加function myFunction(),但這似乎是錯誤的方式。我不希望myFunction()運行,如果有和表單的錯誤。

有人可以幫我一下我的自定義模塊的最後一部分。

請不要指出這個模塊不會將任何事件添加到數據庫中。

再次,請告訴我,如果我對此做錯誤的方式。

回答

0

是的,你有可能走錯了路。 您必須添加自定義的驗證,並提交像

<?php 

$form['#submit'][] = my_submit_callback 
$form['#validate'][] = my_validator_callback 


function my_submit_callback($form, &$form_state) { 
    // form_state array contains the submitted values 
} 
function my_validator_callback($form, &$form_state) { 
    // form_state array contains the submitted values 
    if ($form_state['values']['body'] == '') { 
    form_set_error(...) 
} 
} 

功能和ofcourse從您的form_builder功能刪除myFunction的()調用

0

方法是這樣:

$form['#validate'][] = 'myCustomValidateFunction'; 
$form['#submit'][] = 'myCustomSubmitFunction'; 

function myCustomValidateFunction($form, &$form_state) { 
    \\if validation was not passed use form_set_error() 
} 

function myCustomSubmitFunction($form, &$form_state) { 
    //submit logic, $form_state includes the values 
} 
1

你應該遵循表單API使用的標準命名結構。如果你的功能是:

myFunction_form(),

然後

myFunction_form_validate()提交給執行任何驗證時會被調用。如果一切都通過,那麼將調用myFunction_form_submit(),然後

。您應該在提交中放置提交邏輯(或者調用您的自定義函數)。

這是設置$ form ['#submit'] []和$ form ['#validate'] []的首選行爲。

查看Examples Module瞭解其工作原理的簡單示例。