2010-10-08 18 views
7

Ecco il mio modulo personalizzato utilizzando il gancio,passaggio di argomenti utilizzando drupal_get_form()

Si supponga se voglio passare argomento custom1_default_form chiamata di funzione, come devo passare l'argomento?

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

risposta

11

Se si desidera passare un argomento tramite l'URL, utilizzare 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' 
    // ... 
} 

Se si desidera solo per passare un argomento al modulo tramite il call drupal_get_form(), basta aggiungere gli argomenti come ulteriore parametri per drupal_get_form():

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

// ... 

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

ho scoperto che in Drupal 6.20 si dovrebbe aggiungere un argomento fittizio alla definizione funzione di callback:

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

// ...

funzione custom1_default_form ($ fittizio, $ arg1, arg2 $) {// un'occhiata a ciò che viene memorizzato in $ manichino // ...}

1

evitare il utilizzo delle funzioni arg() quando possibile:

Evitare l'uso di questa funzione laddove possibile, poiché il codice risultante è difficile da leggere . Nelle funzioni di callback del menu, tentare di utilizzare gli argomenti con nome. Vedere la spiegazione in menu.inc per come costruire callback che gli argomenti prendono. Quando si tenta di utilizzare questa funzione per caricare un elemento dal percorso corrente, ad es. caricamento del nodo su una pagina del nodo, utilizzare invece menu_get_object().

Problemi correlati