Читаючи рамкову документацію Ajax, я натрапив на #ajax
власність. Мені відомо, що за допомогою коду мимоволі про те, що перед ними є інші ці властивості з хеш-знаками. Що означає хеш-знак? Про що ці властивості?
Читаючи рамкову документацію Ajax, я натрапив на #ajax
власність. Мені відомо, що за допомогою коду мимоволі про те, що перед ними є інші ці властивості з хеш-знаками. Що означає хеш-знак? Про що ці властивості?
Відповіді:
Це пов'язано з масивами візуалізації взагалі, це не тільки специфічно для AJAX або API форми (хоча API форми використовує масиви візуалізації виключно для створення його вмісту).
Простіше кажучи, клавіші масиву в масиві візуалізації без імені #
перед іменем розглядаються як діти масиву візуалізації, а згодом надаються самі (рекурсивно).
Ті , з#
перед ними розглядаються як мета - дані / змінні для візуалізації масиву використання по мірі необхідності, і самі не надані.
Документи масиву візуалізації (пов'язані вище) насправді ставлять це добре і стисло:
Масив візуалізації - це класичний структурований масив Drupal, який надає дані (ймовірно, вкладені) разом із підказками щодо того, як він повинен бути наданий (властивості, як # type).
Ці #
ключі є «підказкою» , що вище пункт говорить про те , що не- #
ключі вкладених дані.
Я настійно рекомендую прочитати цю сторінку прочитаною, це непогано виконує демістифікацію всього масиву візуалізації та надає приклади коду.
Також є ще один невеликий приклад пояснення / коду на сторінці Theming який може бути корисним.
Масиви візуалізації використовуються повсюдно в Drupal (форми, теми, загальна розмітка тощо), тому знаючи про них трохи, допоможе багато в майбутньому Drupal розвитку.
API форми використовує # перед усіма властивостями, щоб розрізняти властивості та дочірні елементи. У наведеному нижче коді $form['choice_wrapper']['choice']
є дочірнім елементом, а $form['choice_wrapper']['#tree']
є властивістю.
// 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',
);
Усі ці властивості перелічені у посиланні на API форми . Властивостей багато, але всі вони стосуються надання, перевірки та подання.
Причиною використання префікса властивостей є можливість швидкого відфільтрування властивостей з дочірніх елементів, що корисно, коли вони потребують надання, наприклад, з drupal_render () , який містить наступний код.
// 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]);
}
}
Якщо ви подивитеся на element_children () , ви помітите код для фільтрації властивостей наступний.
// 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;
}
}
}