Сделать массивы с массивами - PullRequest
0 голосов
/ 14 ноября 2011

Я хотел бы создать много массивов в моей папке 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 ]

2 голосов
/ 14 ноября 2011

«Правильный» способ сделать это - вот так (см. Стандарты кодирования Drupal ):

$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'
);

Надеюсь, что имеет смысл

1 голос
/ 14 ноября 2011

Попробуйте применить правило СУХОГО (не повторяйте себя). Вы можете сделать это, например. создав функцию, которая будет возвращать соответствующий элемент для ввода в больший массив, например:

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

См. эту кодовую панель для доказательства.

PS. Конечно, вы должны придумать более значимое и менее противоречивое имя для вспомогательной функции, но подход является одним из самых коротких.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...