Die Formular-API verwendet ein # vor allen Eigenschaften, um zwischen Eigenschaften und untergeordneten Elementen zu unterscheiden. Im folgenden Code $form['choice_wrapper']['choice']
handelt es sich um ein untergeordnetes Element und $form['choice_wrapper']['#tree']
um eine Eigenschaft.
// Add a wrapper for the choices and more button.
$form['choice_wrapper'] = array(
'#tree' => FALSE,
'#weight' => -4,
'#prefix' => '<div class="clearfix" id="poll-choice-wrapper">',
'#suffix' => '</div>',
);
// Container for just the poll choices.
$form['choice_wrapper']['choice'] = array(
'#prefix' => '<div id="poll-choices">',
'#suffix' => '</div>',
'#theme' => 'poll_choices',
);
Alle diese Eigenschaften sind in der Formular-API-Referenz aufgeführt . Es gibt viele Eigenschaften, bei denen es jedoch ausschließlich um Rendering, Validierung und Übermittlung geht.
Der Grund für die Verwendung eines Präfixes für Eigenschaften ist das schnelle Herausfiltern der Eigenschaften aus den untergeordneten Elementen. Dies ist nützlich, wenn sie gerendert werden müssen, beispielsweise mit drupal_render () , das den folgenden Code enthält.
// Get the children of the element, sorted by weight.
$children = element_children($elements, TRUE);
// Initialize this element's #children, unless a #pre_render callback already
// preset #children.
if (!isset($elements['#children'])) {
$elements['#children'] = '';
}
// Call the element's #theme function if it is set. Then any children of the
// element have to be rendered there.
if (isset($elements['#theme'])) {
$elements['#children'] = theme($elements['#theme'], $elements);
}
// If #theme was not set and the element has children, render them now.
// This is the same process as drupal_render_children() but is inlined
// for speed.
if ($elements['#children'] == '') {
foreach ($children as $key) {
$elements['#children'] .= drupal_render($elements[$key]);
}
}
Wenn Sie sich element_children () ansehen , werden Sie feststellen, dass der Code zum Herausfiltern von Eigenschaften der folgende ist.
// Filter out properties from the element, leaving only children.
$children = array();
$sortable = FALSE;
foreach ($elements as $key => $value) {
if ($key === '' || $key[0] !== '#') {
$children[$key] = $value;
if (is_array($value) && isset($value['#weight'])) {
$sortable = TRUE;
}
}
}