Здраствуйте. Я Новичок в drupal. Сделал пока 3 формы для ввода данных и все эти 3 формы отображаются когда захожу на ноду. Можно как-нибудь сделать чтобы отображалась только 1- ая форма, а 2 остальные скрывались изначально. Это нужно для выбора, т.е. пользователь заходит на страничку выбирает в первой форме радио баттон и потом в зависимости от выбора ему отображается либо форма 2, либо форма 3. В html можно было делать по id , например, уверен что и здесь можно это как - то сделать.
Вот код:
<?php
function search_cars_perm() {
return array (t('access search_cars'));
}
/**
* Реализация hook_menu().
*/
function search_cars_menu() {
$items = array();
$items['search_cars'] = array(
'title' => 'Search Cars Form',
'page callback' => 'search_cars_form',
'access arguments' => array('access search_cars'),
'description' => 'Search car form',
'type' => MENU_CALLBACK,
);
return $items;
}
//вывод форм1, форм2, форм3
function search_cars_form() {
$output .= drupal_get_form('search_cars_form_form1');
$output .= drupal_get_form('search_cars_form_form2');
$output .= drupal_get_form('search_cars_form_form3');
return $output;
}
/**
* Реализация формы ввода данных
*/
function search_cars_form_form1($form_state) {
// определяем первую форму
$options = array (
1 => 'Search 1 Car',
2 => 'Search Group Cars'
);
$form['search_cars_type'] = array(
'#prefix' => '<table border = "3" cellpadding = "0" cellspacing = "0" style = "width:auto"><tr><td style = "width:80%">',
'#type' => 'radios',
'#options' => $options,
'#description' => t('Choose kind of search'),
'#suffix' => '</td></tr></table>'
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['clear'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
'#validate' => array ('search_cars_form_clear'),
);
return $form;
}
function
search_cars_form_form2($form_state) {
// определяем вторую форму
$form['container'] = array(
'#prefix' => '<table border = "3" cellpadding = "0" cellspacing = "0" style = "width:auto"><tr><td style = "width:48%">',
'#type' => 'textfield',
'#title' => t('Number'),
'#size' => 10,
'#maxlength' => 11,
'#suffix' => '</td></tr></table>'
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['clear'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
'#validate' => array ('search_cars_form_clear'),
);
return $form;
}
function
search_cars_form_form3($form_state) {
// определяем 3-ю форму
$form['group_search'] = array(
'#type' => 'textarea',
'#prefix' => '<table border = "3" cellpadding = "0" cellspacing = "0" style = "width:auto"><tr><td style = "width:95%">',
'#title' => t('Insert 10-20 num of cars'),
'#cols' => 5,
'#rows' => 10,
'#suffix' => '</td></tr></table>'
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['clear'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
'#validate' => array ('search_cars_form_clear'),
);
return $form;
}
//тут значит обработка данных с формы..
function search_cars_form_form1_submit($form, &$form_state) {
drupal_set_message(t('Form 1 submitted'));
}
function
search_cars_form_form2_submit($form, &$form_state) {
drupal_set_message(t('Form 2 submitted'));
}
function
search_cars_form_form3_submit($form, &$form_state) {
drupal_set_message(t('Form 3 submitted'));
}
function
search_cars_form_clear($form, &$form_state) {
$form_state['rebuild'] = TRUE;
}
?>
Комментарии
нашёл способ с помощью jquery...
id формы 2 = search_cars_form_form2
id формы 3 = search_cars_form_form3
тогда можно написать что то типа:
<?php
drupal_add_js(
'$(document).ready(function(){
$("#search_cars_form_form2").hide();
$("#search_cars_form_form3").hide();
});',
'inline'
);
?>
Добавить в модуль search_cars.js фаил с таким кодом.
Есть ли решения проще?
Тестил пока не работает..
Значит, необходимо скрыть 2,3 форму.
Форма 2 :
function search_cars_form_form2($form_state) {
',
'
// определяем вторую форму
$form['container'] = array(
'#prefix' => '
'#type' => 'textfield',
'#title' => t('Number'),
'#size' => 10,
'#maxlength' => 11,
'#suffix' => '
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['clear'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
'#validate' => array ('search_cars_form_clear'),
);
return $form;
}
?>
Форма 3:
function search_cars_form_form3($form_state) {
// определяем 3-ю форму
$form['group_search'] = array(
'#type' => 'textarea',
'#prefix' => '
'#title' => t('Insert 10-20 num of cars'),
'#cols' => 5,
'#rows' => 10,
'#suffix' => '
'
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['clear'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
'#validate' => array ('search_cars_form_clear'),
);
return $form;
}
Добавил к модулю функцию hook_init() в которой идёт добавление jQuery:
function search_cars_init() {
drupal_add_js(drupal_get_path('module', 'search_cars') . '/search_cars.js');
}
?>
Создал в папке ../sites/all/modules/search_cars файл search_cars.js
Далее код search_cars.js:
'$(document).ready(function(){
$("#search_cars_form_form2").hide();
$("#search_cars_form_form3").hide();
});',
'inline'
);
не работает..
Убрал нафиг search_cars.js вывожу его код непосредственно в search_cars_init()
задал id форме2, форме3 в итоге скрылась форма но хреново =).Скрылось текстовое поле и текстовая область остались кнопки а также заголовки этих форм.
какашка.
изменения:
<?php
function search_cars_init() {
drupal_add_js(
'$(document).ready(function(){
var f_id2 = $("#search_cars_form_form2");
var f_id3 = $("#search_cars_form_form3");
f_id2.hide();
f_id3.hide();
});',
'inline'
);
}
?>
далее id шники прописал
'#id' => 'search_cars_form_form2', - это во 2ой форме
'#id' => 'search_cars_form_form3', - это в 3ей.
Хотелось бы всё-таки чтобы обе формы с кнопками полностью скрывались при заходе пользователя. Кто знает как welcome..