Скрыть элементы форм на страничке

Главные вкладки

Аватар пользователя naTureX naTureX 24 марта 2010 в 13:16

Здраствуйте. Я Новичок в 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 (
    
=> 'Search 1 Car',
    
=> '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;
 }

?>

Комментарии

Аватар пользователя naTureX naTureX 24 марта 2010 в 14:10

нашёл способ с помощью 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 фаил с таким кодом.
Есть ли решения проще?

Аватар пользователя naTureX naTureX 24 марта 2010 в 14:48

Тестил пока не работает..

Значит, необходимо скрыть 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:

drupal_add_js(
'$(document).ready(function(){
  $("#search_cars_form_form2").hide();
  $("#search_cars_form_form3").hide();
});'
,
'inline'
);

не работает..

Аватар пользователя naTureX naTureX 24 марта 2010 в 15:08

Убрал нафиг 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..