Thuộc tính của # # là gì?


22

Trong khi đọc tài liệu khung Ajax, tôi đã đề cập đến #ajaxtài sản. Tôi biết từ việc chọc qua mã rằng có những thuộc tính khác có dấu băm trước mặt chúng. Dấu băm có ý nghĩa gì? Những tính chất này là gì?


Hy vọng rằng tôi ổn khi muốn thêm "dấu thăng" ở đâu đó trên trang này (vì đó là thuật ngữ tìm kiếm mà tôi đang sử dụng để thử tìm hiểu điều này, khi "băm" không mang lại cho tôi kết quả quá hữu ích).
Max Starkenburg

Câu trả lời:


23

Điều này là để làm với các mảng kết xuất nói chung, nó không chỉ dành riêng cho AJAX hoặc API biểu mẫu (mặc dù API biểu mẫu sử dụng các mảng kết xuất dành riêng để xây dựng nội dung của nó).

Nói một cách đơn giản, các khóa mảng trong một mảng kết xuất mà không có #phía trước tên được xem là con của mảng kết xuất và sau đó được kết xuất lại (theo cách đệ quy).

Những với một #trước mặt họ được coi là dữ liệu meta / biến cho các mảng render để sử dụng khi cần thiết, và không tự trả.

Các tài liệu mảng kết xuất (được liên kết đến ở trên) thực sự đặt điều này hay và ngắn gọn:

Mảng kết xuất là một mảng có cấu trúc Drupal cổ điển cung cấp dữ liệu (có thể được lồng vào nhau) cùng với các gợi ý về cách nó sẽ được hiển thị (thuộc tính, như #type).

Các #khóa là 'gợi ý' mà đoạn trên đang nói đến, các #khóa không phải là dữ liệu lồng nhau.

Tôi hoàn toàn khuyên bạn nên cho trang đó đọc, nó thực hiện tốt việc giải mã toàn bộ mảng kết xuất và cung cấp các ví dụ mã.

Ngoài ra còn có một ví dụ giải thích / mã nhỏ khác về các tài liệu trang theo chủ đề có thể hữu ích.

Mảng kết xuất được sử dụng ở mọi nơi trong Drupal (biểu mẫu, chủ đề, đánh dấu chung, v.v.) vì vậy biết một chút về chúng sẽ giúp ích rất nhiều cho sự phát triển của Drupal trong tương lai.


Vâng đặt đánh bại tôi với nó.
chrisjlee

4

API biểu mẫu sử dụng dấu # trước tất cả các thuộc tính, để phân biệt giữa các thuộc tính và các phần tử con. Trong đoạn mã sau, $form['choice_wrapper']['choice']là một phần tử con, trong khi $form['choice_wrapper']['#tree']là một thuộc tính.

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

Tất cả các thuộc tính này được liệt kê trong tài liệu tham khảo API mẫu . Có nhiều thuộc tính, nhưng tất cả chúng là về kết xuất, xác nhận và gửi.

Lý do để sử dụng tiền tố cho các thuộc tính là để có thể lọc nhanh các thuộc tính từ các phần tử con, rất hữu ích khi chúng cần được kết xuất, ví dụ với drupal numnder () , chứa mã sau đây.

  // 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]);
    }
  }

Nếu bạn nhìn vào Element_children () , bạn sẽ thấy mã để lọc ra các thuộc tính là thuộc tính sau.

  // 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;
      }
    }
  }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.