2010-10-08 4 views
7

Вот мой пользовательский модуль с помощью крюка,Передача аргументов с помощью drupal_get_form()

Допустим, если я хочу передать аргумент custom1_default_form вызов функции, как я должен передать аргумент?

<?php 

function custom1_block($op,$delta=0){ 
    if($op=='list'){ 
     $block = array(); 
     $block[0]['info']=t('hello world'); 
     return $block; 
    }else if($op=='view'){ 
     $block_content = '<p>THIS IS MY FIRST BLOCK</p>'; 
     $block['subject'] = 'HELLO WORLD'; 
     $block['content'] =drupal_get_form('custom1_default_form'); 
     return $block;  
    } 
} 

function custom1_default_form() { 
    $form = array(); 
    $form['nusoap_urls']['txt_name'] = 
    array('#type' => 'textfield', 
      '#title' => t('Please enter your name'), 
      '#default_value' => variable_get('webservice_user_url',''), 
      '#maxlength' => '40', 
      '#size' => '20', 
     // '#description' => t('<br />Root directory used to present the filebrowser user interface.') 

     ); 
    $form['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('Save Details'), 
    );   
     return $form;  
    } 

    function custom1_default_form_validate (&$form, &$form_state) { 

    if(($form_state['values']['txt_name']) == '') { 
     form_set_error('user_webservice', t('Enter a name')); 
    } 
    } 

    function custom1_default_form_submit ($form_id, $form_values) { 
// drupal_set_message(print_r($_POST)); 

// $message = 'You have submitted the ' . $form_id . ' form which contains the following data:<pre>' . print_r($form_state['values'],true) . '</pre>'; 

    //drupal_set_message(t($message)); 
    //drupal_set_message(t($form_values['values']['txt_name'])); 
// print_r($form_values['values']); 
    $GET_TXT_FIELD_VALUE = $form_values['values']['txt_name']; 
    $INSERT_QUERY = "INSERT INTO sample (test_name) VALUES ('$GET_TXT_FIELD_VALUE')"; 
    if (db_result(db_query("SELECT COUNT(*) FROM {sample} WHERE test_name = '%s';", $GET_TXT_FIELD_VALUE))) { 
     // User doesn't exist 
     drupal_set_message(t('ALREADY EXIST.....')); 
    }else{ 
     db_query($INSERT_QUERY)or die('Execution Failed'); 
     if(db_affected_rows()==1){ 
      drupal_set_message(t('VALUE INSERTED SUCCESSFULLY')); 
     }else{ 
      drupal_set_message(t('VALUE INSERTED FAILED')); 
     } 
    }  
} 

ответ

11

Если вы хотите передать аргумент через URL, используйте arg():

function custom1_default_form() { 
    // Assuming the URL is http://example.com/admin/content/types: 
    $arg1 = arg(1); // $arg1 = 'content' 
    $arg2 = arg(2); // $arg2 = 'types' 
    // ... 
} 

Если вы просто хотите, чтобы передать аргумент в форму через drupal_get_form() вызов, просто добавьте аргументы в качестве дополнительного параметры drupal_get_form():

$block['content'] = drupal_get_form('custom1_default_form', $arg1, $arg2); 

// ... 

function custom1_default_form($form_state, $arg1, $arg2) { 
    // ... 
} 
5

Я обнаружил, что в Drupal 6.20 следует добавить фиктивный аргумент определения функции обратного вызова:

$ block ['content'] = drupal_get_form ('custom1_default_form', $ arg1, $ arg2);

// ...

функция custom1_default_form ($ манекена, $ arg1, $ arg2) {// смотреть на то, что сохраняется в $ манекена // ...}

1

избежать используя функции arg(), если это возможно:

Избегайте использования этой функции, если это возможно, поскольку полученный код является трудным для чтения. В функциях обратного вызова меню попытайтесь использовать именованные аргументы. См. Объяснение в menu.inc для построения обратных вызовов, которые принимают аргументы. При попытке использовать эту функцию для загрузки элемента из текущего пути, например. загружая узел на узловой странице, вместо этого используйте menu_get_object() вместо .

Смежные вопросы