Ajaxフレームワークのドキュメントを読みながら、この#ajax
プロパティについて言及しました。これらのプロパティには、その前にハッシュ記号が付いたものが他にもあることが、コードをざっと見てみるとわかります。ハッシュ記号は何を意味しますか?これらのプロパティは何ですか?
Ajaxフレームワークのドキュメントを読みながら、この#ajax
プロパティについて言及しました。これらのプロパティには、その前にハッシュ記号が付いたものが他にもあることが、コードをざっと見てみるとわかります。ハッシュ記号は何を意味しますか?これらのプロパティは何ですか?
回答:
これは一般にレンダー配列と関係があり、 AJAXまたはフォームAPIに固有のものではありません(フォームAPIはコンテンツの構築にレンダー配列のみを使用します)。
簡単に言えば、#
名前の前にないレンダー配列の配列キーは、レンダー配列の子と見なされ、その後(再帰的に)レンダリングされます。
それらと#
彼らの前には、必要に応じて使用するレンダリングアレイ用のメタデータ/変数として見られている、と自体がレンダリングされません。
レンダー配列ドキュメント(上記にリンク)は、実際にこれを簡潔かつ簡潔に記述しています。
レンダー配列は、データ(おそらくネストされている)をレンダリングする方法に関するヒント(#typeなどのプロパティ)とともに提供する、古典的なDrupal構造化配列です。
#
キーは上の段落が話していることを「ヒント」であり、非#
キーは、ネストされたデータです。
そのページを読むことを徹底的にお勧めします。レンダー配列全体を分かりやすく説明し、コード例を提供します。
また、ページドキュメントのテーマ設定に関する別の小さな説明/コード例もあります。
レンダー配列は、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;
}
}
}