Передача аргументов с использованием drupal_get_form () - PullRequest
7 голосов
/ 08 октября 2010

Вот мой пользовательский модуль, использующий крюк,

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

<code><?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) . '
'; // drupal_set_message (т ($ сообщение)); // drupal_set_message (т ($ form_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))) { // Пользователь не существует drupal_set_message (t ('УЖЕ СУЩЕСТВУЕТ .....')); } Еще { db_query ($ INSERT_QUERY) или die ('Ошибка выполнения'); если (db_affected_rows () == 1) { drupal_set_message (t ('VALUE INSERTED SUCCESSFULLY')); } Еще { drupal_set_message (t ('VALUE INSERTED FAILED')); } } }

Ответы [ 3 ]

11 голосов
/ 08 октября 2010

Если вы хотите передать аргумент через 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 голосов
/ 28 февраля 2011

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

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

// ...

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

1 голос
/ 12 февраля 2013

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

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

...