2011-11-14 53 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