使用drupal_get_form传递参数()

问题描述:

这里是我的自定义模块使用钩子,使用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')); 
     } 
    }  
} 

如果你想通过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) { 
    // ... 
} 

我发现,在Drupal 6.20你应该添加一个虚拟参数回调函数的定义:

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

// ...

功能custom1_default_form($假,$ ARG1,ARG2 $){//看看是什么获取存储在$虚拟 // ... }

避免在可能的情况下使用arg()函数:

在可能的情况下避免使用此函数,因为结果代码难以读取 。在菜单回调函数中,尝试使用命名参数。 请参阅menu.inc中的说明以了解如何构造 接受参数的回调。当试图使用该功能从当前路径加载一个 元素时,例如加载节点页面上的节点, 改为使用menu_get_object()。