2010-10-08 10 views
7

Aquí está mi módulo personalizado de usar el gancho,el paso de argumentos utilizando drupal_get_form()

Asumir si quiero pasar argumento para custom1_default_form llamada a la función, ¿cómo debo pasar el argumento?

<?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')); 
     } 
    }  
} 

Respuesta

11

Si desea pasar un argumento a través de la URL, utilice 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' 
    // ... 
} 

Si lo que desea es pasar un argumento de la forma a través de la llamada drupal_get_form(), sólo tiene que añadir los argumentos adicionales parámetros a drupal_get_form():

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

// ... 

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

he encontrado que en Drupal 6.20 se debe añadir un argumento ficticio a la definición de la función de devolución de llamada:

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

// ...

función custom1_default_form ($ ficticia, $ arg1, arg2 $) {// vistazo a lo que se almacena en $ ficticia // ...}

1

evitar la el uso de arg() funciones cuando sea posible:

Evitar el uso de esta función cuando sea posible, como resultado de código es difícil a leer. En las funciones de devolución de llamada de menú, intente utilizar argumentos con nombre. Consulte la explicación en menu.inc para saber cómo construir callbacks que toman argumentos. Al intentar usar esta función para cargar un elemento de la ruta actual, p. cargando el nodo en una página de nodo, use menu_get_object() en su lugar.

Cuestiones relacionadas