2010-10-08 6 views
7

Voici mon module personnalisé à l'aide de crochet,arguments Passing à l'aide drupal_get_form()

Supposons que si je veux passer argument custom1_default_form appel de fonction, comment dois-je passer l'argument?

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

Répondre

11

Si vous voulez passer un argument via l'URL, utilisez 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 vous voulez juste passer un argument à la forme par l'appel drupal_get_form(), ajoutez simplement les arguments supplémentaires paramètres à drupal_get_form():

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

// ... 

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

J'ai trouvé que dans Drupal 6.20, vous devez ajouter un argument factice à la définition de la fonction de rappel: 01 $ Block ['content'] = drupal_get_form ('custom1_default_form', $ arg1, $ arg2);

// ...

fonction custom1_default_form (mannequin $, arg1 $, arg2 $) {// regard sur ce qui est stocké dans dummy $ // ...}

1

éviter la utilisation des fonctions arg() lorsque cela est possible:

Évitez d'utiliser cette fonction lorsque cela est possible, car le code obtenu est difficile à lire . Dans les fonctions de rappel de menu, essayez d'utiliser des arguments nommés. Voir l'explication dans menu.inc pour savoir comment construire des rappels prenant en compte les arguments . Lorsque vous tentez d'utiliser cette fonction pour charger un élément à partir du chemin actuel, par ex. Si vous chargez le noeud sur une page de noeud, utilisez à la place de menu_get_object().