#370846 follow-up by catch: Fix #weight sorting in drupal_render().
parent
826cf54d84
commit
b83aa19bb2
|
@ -3493,11 +3493,19 @@ function element_children(&$elements, $sort = FALSE) {
|
|||
}
|
||||
}
|
||||
}
|
||||
// Sort the element if necessary.
|
||||
// Sort the children if necessary.
|
||||
if ($sort && $sortable) {
|
||||
uasort($children, 'element_sort');
|
||||
// Put the sorted children back into $elements in the correct order, to
|
||||
// preserve sorting if the same element is passed through
|
||||
// element_children() twice.
|
||||
foreach ($children as $key => $child) {
|
||||
unset($elements[$key]);
|
||||
$elements[$key] = $child;
|
||||
}
|
||||
$elements['#sorted'] = TRUE;
|
||||
}
|
||||
$elements['#sorted'] = TRUE;
|
||||
|
||||
return array_keys($children);
|
||||
}
|
||||
|
||||
|
|
|
@ -542,7 +542,15 @@ class DrupalRenderUnitTestCase extends DrupalWebTestCase {
|
|||
// Confirm that the $elements array has '#sorted' set to TRUE.
|
||||
$this->assertTrue($elements['#sorted'], t("'#sorted' => TRUE was added to the array"));
|
||||
|
||||
// Now the same array structure, but with #sorted set to TRUE.
|
||||
// Pass $elements through element_children() and ensure it remains
|
||||
// sorted in the correct order. drupal_render() will return an empty string
|
||||
// if used on the same array in the same request.
|
||||
$children = element_children($elements);
|
||||
$this->assertTrue(array_shift($children) == 'first', t('Child found in the correct order.'));
|
||||
$this->assertTrue(array_shift($children) == 'second', t('Child found in the correct order.'));
|
||||
|
||||
|
||||
// The same array structure again, but with #sorted set to TRUE.
|
||||
$elements = array(
|
||||
'second' => array(
|
||||
'#weight' => 10,
|
||||
|
|
Loading…
Reference in New Issue