2012-05-16 2 views
0

Итак, я следовал этому руководству http://drupal.org/node/751826. Я принял следующий код:API-интерфейс Drupal

<?php 
function test_myform(&$form_state) { 
    // Access log settings: 
    $options = array('1' => t('Enabled'), '0' => t('Disabled')); 
    $form['access'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Access log settings'), 
    '#tree' => TRUE, 
); 
    $form['access']['log'] = array(
    '#type' => 'radios', 
    '#title' => t('Log'), 
    '#default_value' => variable_get('log', 0), 
    '#options' => $options, 
    '#description' => t('The log.'), 
); 
    $period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200, 4838400, 9676800), 'format_interval'); 
    $form['access']['timer'] = array(
    '#type' => 'select', 
    '#title' => t('Discard logs older than'), 
    '#default_value' => variable_get('timer', 259200), 
    '#options' => $period, 
    '#description' => t('The timer.'), 
); 
    // Description 
    $form['details'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Details'), 
    '#collapsible' => TRUE, 
    '#collapsed' => TRUE, 
); 
    $form['details']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Describe it'), 
    '#default_value' => variable_get('description', ''), 
    '#cols' => 60, 
    '#rows' => 5, 
    '#description' => t('Log description.'), 
); 
    $form['details']['admin'] = array(
    '#type' => 'checkbox', 
    '#title' => t('Only admin can view'), 
    '#default_value' => variable_get('admin', 0), 
); 
    $form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Name'), 
    '#size' => 30, 
    '#maxlength' => 64, 
    '#description' => t('Enter the name for this group of settings'), 
); 
    $form['hidden'] = array('#type' => 'value', '#value' => 'is_it_here'); 
    $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); 
    return $form; 
} 

function test_page() { 
    return drupal_get_form('test_myform'); 
} 
?> 

Я вставил этот код в свое текстовое поле. В конце концов, перед закрывающим тегом PHP, я назвал функцию test_page следующим

test_page(); 

Я получаю следующую ошибку после того, как я экономлю.

Warning: Parameter 1 to test_myform() expected to be a reference, value given in drupal_retrieve_form() (line 785 of /var/www/html/includes/form.inc). 
    Warning: Parameter 1 to test_myform() expected to be a reference, value given in drupal_retrieve_form() (line 785 of /var/www/html/includes/form.inc). 

Теперь я понятия не имею, почему. В основном то, что я пытаюсь сделать, это создать веб-форму и сохранить ее локально на сервере. Если у вас есть другие идеи, кроме использования API-интерфейсов Drupal, я могу предложить предложения.

Любая помощь была бы принята с благодарностью.

ответ

4

Попробуйте изменить аргументы в вашей test_myform функции() к следующему

function test_myform($form, &$form_state) { 
    ... 
} 

ли это сделать?


Добавление ответа на ваш комментарий:

Я не знаю, где и как вы вызываете вашу функцию, поэтому я не могу много. Почему бы вам просто не избавиться от этой функции test_page() и вызвать форму drupal из элемента меню.

Таким образом, в модуле, просто следующее меню крюк:

/** 
* Implementation of hook_menu 
*/ 
function YOUR_MODULE_menu() { 

$items['test/page'] = array(
    'type' => MENU_CALLBACK, 
    'title' => t('Your page title'), 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('test_myform'), 
    'access arguments' => array('view published content'), 
); 

return($items); 

} 

Чтобы проверить это, убедитесь, что вы 1) включить свой модуль, 2) промойте все кэши поэтому меню перестраивается и 3) перейдите к тому, что вы замените этим пунктом меню, в этом примере это будет www.yoursite.com/test/page или localhost/test/page. Я думаю, что это лучший способ вызвать вашу функцию формы - через меню.

Это работает?

+0

Сообщение об ошибке исчезло, но когда я сохраняю и перехожу на страницу, ничего не появляется. Как будто я даже не вызываю функцию .... –

+0

Посмотрите на некоторые дополнительные сведения. Не могу опубликовать все это в комментарии, поэтому я только что отредактировал свой оригинальный ответ. Я думаю, что так и будет. Если это сработает, продолжайте и примите ответ. –