“#” Özellikleri nelerdir?


22

Ajax çerçeve belgelerini okurken #ajaxmülkünden bahsettim . Kodları delerek, bu özelliklerin başkalarının da önünde karma işaretleri bulunduğunu biliyorum. Karma işareti ne anlama geliyor? Bu özelliklerin tümü neyle ilgilidir?


İnşallah bu sayfada bir yere "pound sign" eklemek istemek benim için sorun değil (bu "hash" çok yardımcı sonuçlar alamadığı zaman, bunu anlamaya çalışmak için kullandığım bir terimdir).
Max Starkenburg

Yanıtlar:


23

Bu, genel olarak render dizileriyle ilgilidir , yalnızca AJAX veya form API'sine özgü değildir (API formu, içeriğini oluşturmak için yalnızca dizileri oluşturur).

Basitçe söylemek gerekirse, bir render dizisindeki dizi anahtarları #, adın önünde olmayan bir dizi dizisinin alt öğeleri olarak görülür ve daha sonra kendileri (tekrarlı olarak) oluşturulur.

Bu sahip bir #önlerinde gerektiğinde kullanılmasına işlemek dizi için Meta veri / değişkenler olarak görülür ve kendileri işlenmez.

Render array docs (yukarıdan bağlanmış) aslında bunu iyi ve özlü bir şekilde ifade eder:

Bir oluşturma dizisi, nasıl oluşturulacağına ilişkin ipuçlarıyla birlikte (#type gibi özellikler) veri sağlayan (muhtemelen yuvalanmış) klasik bir Drupal yapılandırılmış dizidir.

#Tuşları 'ipuçları' yukarıdaki paragraf bahsediyor ki olmayan olan #tuşlar iç içe verilerdir.

Bu sayfaya bir okumanızı tavsiye ederim, tüm render dizisi olayını çözmek için iyi bir iş çıkardı ve kod örnekleri sağladı.

Ayrıca, Tema sayfasındaki belgelerde yararlı olabilecek başka bir küçük açıklama / kod örneği de vardır.

Rrup dizileri Drupal'daki her yerde (formlar, temalar, genel işaretler vb.) Kullanılır, bu yüzden onlar hakkında iyi bir şeyler bilmek gelecekteki Drupal gelişiminde çok yardımcı olacaktır.


Peki beni dövdü.
chrisjlee

4

Form API, özellikler ve alt öğeler arasında ayrım yapmak için tüm özelliklerin önünde bir # kullanır. Aşağıdaki kodda, $form['choice_wrapper']['choice']bir alt öğe, $form['choice_wrapper']['#tree']bir özellik ise.

  // 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',
  );

Bu özelliklerin tümü Form API başvurusunda listelenmiştir . Birçok özellik var, ancak hepsi oluşturma, doğrulama ve gönderme ile ilgili.

Özellikler için bir önek kullanmanın nedeni, alt kodlardan özellikleri hızlı bir şekilde filtreleyebilmektir; bu, oluşturulmaları gerektiğinde, örneğin aşağıdaki kodu içeren drupal_render () ile yararlıdır .

  // 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 () 'e bakarsanız, özellikleri filtrelemek için kullanılan kodun aşağıdakilerden olduğunu göreceksiniz.

  // 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;
      }
    }
  }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.