2011-11-21 74 views
0

我正在从Drupal示例文件创建一个向导,并且想要重构设置选项和无线电等项目时重复的代码段。drupal 7.如何重构表单数组

我已经尝试了一个简单的函数传递“普通”和“优先”,但无法找到一种方法使其工作。

有人可以给我一个这样做的最佳方法的想法吗?

无分裂代码如下:

function services_wizard_share_capital_classes($form, &$form_state) { 

$form['share_classes']['type_of_class'] = array(
'#type' => 'select', 
'#title' => t('What type of share will this class be?'), 
'#options' => array(
    1 => t('Ordinary'), 
    2 => t('Preferential'), 
), 
); 

$form['ordinary']['share_type'] = array(
'#type' => 'item', 
'#description' => t("You chose Ordinary Shares"), 
'#states' => array(
    'visible' => array(
    ':input[name="type_of_class"]' => array('value' => '1'), 
), 
), 
); 

$form['preferential']['share_type'] = array(
'#type' => 'item', 
'#description' => t("You chose Preferential Shares"), 
'#states' => array(
    'visible' => array(
    ':input[name="type_of_class"]' => array('value' => '2'), 
), 
), 
); 
return $form; 
} 

回答

1

我不知道这是最好的方式,但它肯定是重构你的代码方式:

function _services_wizard_share_capital_classes_add_el(&$form, $name, $description, $index) { 
    $form[$name]['share_type'] = array(
    '#type' => 'item', 
    '#description' => t($description), 
    '#states' => array(
     'visible' => array(
     ':input[name="type_of_class"]' => array('value' => "$index"), 
    ), 
    ) 
); 
} 

function services_wizard_share_capital_classes($form, &$form_state) { 
    // Other code 

    _services_wizard_share_capital_classes_add_el($form, 'ordinary', 'You chose Ordinary Shares', 1); 
    _services_wizard_share_capital_classes_add_el($form, 'preferential', 'You chose Preferential Shares', 2); 
    // etc... 
} 
+0

非常感谢,那就是诀窍。 –