2011-11-14 32 views
0

我想在我的Drupal文件夹中创建大量数组。但我不知道如何做到这一点。基本上,它总是一样的结构。使数组与阵列

$form['actions']['saveasdraft']['#type'] = 'submit'; 
$form['actions']['saveasdraft']['#access'] = true; 
$form['actions']['saveasdraft']['#value'] = 'Save as Draft'; 
$form['actions']['saveasdraft']['#weight'] = 11; 
$form['actions']['saveasdraft']['#submit'][0] = 'node_fiche_form_submit'; 

$form['actions']['saveascurrent']['#type'] = 'submit'; 
$form['actions']['saveascurrent']['#access'] = true; 
$form['actions']['saveascurrent']['#value'] = 'Save as New version'; 
$form['actions']['saveascurrent']['#weight'] = 12; 
$form['actions']['saveascurrent']['#submit'][0] = 'node_fiche_form_submit'; 

... 

有没有更简单的方法来做到这一点?

回答

2

“正确”的方式做到这一点是这样的(见Drupal coding standards):

$form['action']['saveasdraft'] = array(
    '#type' => 'submit', 
    '#access' => TRUE, 
    '#value' => 'Save as Draft', 
    // etc... 
); 

$form['action']['saveascurrent'] = array(
    '#type' => 'submit', 
    '#access' => TRUE, 
    '#value' => 'Save as New version', 
    // etc... 
); 

就是这样Drupal的核心模块做到这一点(这是我见过的所有贡献的模块)。

编辑

如果你担心重复代码,你将能够做的最好的是设置一些默认值...应该省下几百行:)

$defaults = array('#type' => 'submit', '#access' => TRUE, /* etc... */); 

$form['action']['saveasdraft'] = $defaults + array(
    '#value' => 'Save as Draft' 
); 

$form['action']['saveascurrent'] = $defaults + array(
    '#value' => 'Save as New version' 
); 

希望有道理

+0

正确!我忘了。但是有没有办法用尽可能少的代码添加100多个数组? – Michiel

+0

我已经更新了答案,希望它有帮助:) – Clive

+0

是的,它确实:-)非常感谢!我可以投票多一次;-) – Michiel

1

尝试使用DRY规则(不要重复自己)。你可以做到这一点,例如。通过创建函数将返回正确的元素被输入到更大的阵列那样:

function form_element($value, $weight, $type = 'submit', $access = true, 
    $submit = 'node_fiche_form_submit') { 
    return array(
     '#type' => $type, 
     '#access' => $access, 
     '#value' => $value, 
     '#weight' => $weight, 
     '#submit' => array($submit), 
    ); 
}; 

,然后你可以使用它像:

$form['actions']['saveasdraft'] = form_element('Save as Draft', 11); 
$form['actions']['saveascurrent'] = form_element('Save as New version', 12); 
// ...and so on 

的证明见this codepad

PS。当然,你应该为辅助函数创造一些更有意义且不太矛盾的名称,但这种方法是最短的一种。

+0

伟大的提示!谢谢!为什么'#submit'=>数组($ submit)'数组? – Michiel

+1

@Michiel:'#submit'键总是作为一个数组传递。您实际上将它传递给您的原始代码,在元素末尾用'[0]'表示:'$ form ['actions'] ['saveascurrent'] ['#submit'] [0]' – Clive

+0

@Michiel:Clive是对的 - 这是因为你已经要求'$ form ['actions'] ['saveascurrent'] ['#submit'] [0] ='node_fiche_form_submit';''和'[0]'通常意味着'$ form ['actions'] ['saveascurrent'] ['#submit']'是一个至少包含一个元素的数组。 – Tadeck