hook_elements

gdavid képe

hali

6-os drupal alatt problémába futottam.

szeretnék egy saját form element-et készíteni, ami két select elementből áll.

 
 
function game_theme() {
	return array(
		'rid' => array(
			'argument' => array('form' => NULL)	
		),
	);
}
 
 
function my_elements() {
	$type['rid']=array(
			'#input' => TRUE,
			'#process' => array('rid_process'),
	);
	return $type;
}
 
function rid_process($element) {
	$element['p1']=array(
			'#type'=>'select',
			'#options'=> array(-1=>'------------'),
			'#default_value' => -1,
	);
	$element['p2']=array(
			'#type'=>'select',
			'#options'=> array(-1=>'------------'),
			'#default_value' => -1,
	);
	return $element;
}
function theme_rid($element) {
	return theme(
		'form_element',
		array(
			'#title' => $element['#title'],
			'#description' => $element['#description'],
			'#id' => $element['#id'],
			'#required' => $element['#required'],
			'#error' => $element['#error'],
		),
		'<div class="container-inline">'. $element['#children'] .'</div>'
	);
}
 
function my_map_function($form_state) {
	$form['rendszer']=array('#type'=>'rid','#title'=>t('Mapped Systems'),'#description'=>t('Previously mapped systems could be find here. You should choice one of them to watch.'));
	$form['rendszer']['p1']=array('#type'=>'select','#options'=>$opts1);
	$form['rendszer']['p2']=array('#type'=>'select','#options'=>$opts2);
	$form['rendszer']['op']=array('#type'=>'submit','#value'=>'OK');
	return $form;
}

namarmost ezt nem jelenik meg. Tudna vki ebben segiteni, hogy miert nem?

Sweetchuck képe

Drupal 6-ban még nem csináltam form element-et, de 5-ösben egy kicsit másképpen kellett.

Egy form element-nek az az egyik jó tulajdonsága, hogy a "végfelhasználónak" (űrlap készítő programozónak) nem kell foglalkoznia a belső működésével. Sőt! Nem is tudja, hogy az hogyan is működik valójában.
Tehát nem is tud arról, hogy az egy tömb aminek van 'p1' vagy 'p2' indexe.
Egyébként ha logikusan gondolkozol (én már többször is rájöttem arra, hogy utólag minden logikus) akkor rájössz, hogy a rid_process() mindent felülír amit a my_map_function() előzőleg létrehozott (hibásan).

Ha azt szeretnéd. hogy a végfelhasználó változtathasson a listák tartalmán akkor:

function form_builder_callback($form_state) {
  //itt csak a #-kal (vagy -tel) kezdődő indexeket buzeráld
  $form['rendszer'] = array(
    '#type' => 'rid',
    '#options_p1' => array('0' => 'és itt a lista');
    '#options_p2' => array('0' => 'ez meg egy másik');
  );
}
 
function my_rid_process($element) {
  $element['p1'] => array(
    '#type' => 'select',
    '#options' => $element['#options_p1'],
  );
 
  $element['p2'] => array(
    '#type' => 'select',
    '#options' => $element['#options_p2'],
  );
 
  return $element;
}

Szerintem a theme_rid()

  //nem értem, hogy miért csonkítod.
  return theme('form_element', $element, "<div class=\"container-inline\">". $element['#children'] .'</div>');
0
0