Сижу, не могу никак понять, как сделать форму, потом задать значения её полям и вывести на экран.
Копал и render, и ещё всякое, но че-то нифига не понято в передаваемых параметрах. То ли снова описывать все поля и передавать, то ли ещё что-то. Примеров не нашел. Помогите примером.
Вот код.
<?php
function uedu_groups_form_group_edit($form_state) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => 'Номер группы',
'#required' => TRUE,
'#size' => 20,
'#maxlength' => 10
);
return $form;
}
?>
Хочу, чтобы в title было вставлено значение, уже любое.. Помогите, а то сижу уже долго.. Знаю, что все дело в рендер-функциях и подобном, но так и не додумываю что и как надо передать.
P.S.: #default_value не годится.
Комментарии
Приветствую,
вам удалось решить проблему?
У меня схожий(е) вопрос(ы). Я с Drupal знаком всего нечего. Сделал модуль под Drupal 6, который при попадании пользователя на страницу /mymodule выводит форму. Для простоты можно считать, что это fieldset всего лишь c двумя текстовыми полями и кнопкой Submit.
Пользователь вводит текст в первом поле, нажимает submit, после чего введенные данные обрабатываются и выводятся на той же странице в текстовом поле2 (с сохранением исходных данных в поле1).
$items = array();
$items['mymodule'] = array(
'title' => t('mymodule'),
'page callback' => 'mymodule_page',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK
);
return $items;
}
function mymodule_page() {
$output = drupal_get_form('mymodule_input_form');
}
function mymodule_input_form(&$form_state) {
$form = array();
$form['mymodule'] = array(
'#type' => 'fieldset',
'#title' => t('Вот, собственно'),
);
$form['mymodule']['text_entered'] = array(
'#title' => t('Введите текст'),
'#type' => 'textarea',
'#name' => t('sourcetext'),
'#cols' => 60, '#rows' => 8,
'#weight' => 5,
);
$form['mymodule']['text_processed'] = array(
'#title' => t('Результат обработки'),
'#type' => 'textarea',
'#name' => t('desttext'),
'#cols' => 60, '#rows' => 8,
'#disabled' => TRUE,
'#weight' => 10,
);
$form['mymodule']['submit'] = array(
'#type' => 'submit',
'#value' => t('Перевести'),
'#weight' => 15,
);
return $form;
}
function mymodule_input_form_validate($form_id, &$form_state) {
$texto = $_POST['sourcetext'];
if (empty ($texto)) {
form_set_error ('mymodule',t('Следует ввести текст!'));
unset ($form_state['submitted']);
}
if (isset($form_id['mymodule']) && $form_state['submitted']) {
if (!empty ($texto)) {
drupal_set_message("Текст может быть отправлен на обработку");
}
}
}
function mymodule_input_form_submit($form_id, &$form_state) {
//обработка введенных данных:
$processed = ProcessData($texto);
}
Теперь, собственно, вопрос(ы):
Каким образом вставить полученное значение $processed в поле 'text_processed' формы?
Ну и исходный текст, соответственно, сохранить в 'text_entered'?
'text_processed' при первой загрузке формы объявлен как #disabled. Где снимать это ограничение?
в mymodule_form_input_form_alter()? Если так, то как запретить снятие #disabled до того момента,
пока не произойдет нажатие на Submit.
Расскажем нашим читателям об этом и многом другом в нашем журнале "А хрен его знает":
Начнём с того, что $_POST и $_GET всегда рекомендуется использовать в лучших традициях быдлокода (поясняю: эти переменные использовать не нужно).
А для запоминания параметров есть специальная API-функция
Кроме этого есть еще variable_del() и variable_get().
Использовать как-то так:
//...
$form['form_test'] = array(
'#type' => 'textfield',
'#title' => 'T.E.S.T.',
'#default_value' => variable_get('mymodule_form_test', 'Введите значение'),
);
//...
}
function mymodule_test_submit($form, $form_state) {
variable_set('mymodule_form_test', $form_state['values']['form_test']);
}
/// Показываем форму //
function mymodule_menu() {
$items = array();
$items['my/test/form'] = array(
'title' => 'TEST',
'page callback' => 'mymodule_show_me_the_form', // <- Эта функция выведет форму
'type' => MENU_CALLBACK,
);
return $items;
}
function mymodule_show_me_the_form() {
return drupal_get_form('mymodule_test_form', $form_state);
}
Ссылки по теме:
http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6
http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....
MCNet,
variable_set() не подходит, так как устанавливает значение переменной глобально.
В то время, как форма может быть использована несколькими пользователями одновременно.