Читая документацию по фреймворку 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',
);
Все эти свойства перечислены в справочнике Form 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;
}
}
}