คุณสมบัติ“ #” คืออะไร


22

ในขณะที่อ่านเอกสารเฟรมเวิร์กของ Ajaxฉันพบว่ามีการพูดถึง#ajaxคุณสมบัติ ฉันรู้จาก poking ผ่านรหัสว่ามีคุณสมบัติอื่น ๆ เหล่านี้มีสัญญาณแฮชต่อหน้าพวกเขา เครื่องหมายแฮชมีความหมายว่าอย่างไร คุณสมบัติเหล่านี้เกี่ยวกับอะไร?


หวังว่ามันจะโอเคสำหรับฉันที่จะเพิ่ม "เครื่องหมายปอนด์" ที่ไหนสักแห่งที่นี่ในหน้านี้ (เนื่องจากเป็นคำค้นหาที่ฉันใช้เพื่อลองคิดออกเมื่อ "แฮช" ไม่ได้รับผลลัพธ์ที่เป็นประโยชน์เกินไป)
Max Starkenburg

คำตอบ:


23

นี่คือจะทำอย่างไรกับการแสดงผลอาร์เรย์โดยทั่วไปก็ไม่ได้เป็นเพียงที่เฉพาะเจาะจงเพื่อ AJAX หรือรูปแบบ API (แม้ว่าการใช้งานรูปแบบ API ทำให้อาร์เรย์เฉพาะสำหรับการสร้างเนื้อหาของมัน)

กล่าวง่ายๆคือคีย์อาร์เรย์ในเรนเดอร์เรนเดอร์โดยไม่มี#ส่วนหน้าของชื่อถูกมองว่าเป็นลูกของเรนเดอร์เรนเดอร์และจะถูกเรนเดอร์ตัวเองในภายหลัง

ผู้ที่มี#ในด้านหน้าของพวกเขาถูกมองว่าเป็นข้อมูล meta / ตัวแปรอาร์เรย์ที่ทำให้การใช้งานเท่าที่จำเป็นและไม่ได้ว่าตัวเองกลายเป็น

เรนเดอร์เอกสาร doc (เชื่อมโยงกับด้านบน) ทำให้สิ่งนี้ดีและชัดถ้อยชัดคำ:

อาร์เรย์เรนเดอร์เป็นอาร์เรย์โครงสร้างแบบ Drupal แบบคลาสสิกที่ให้ข้อมูล (อาจซ้อนกัน) พร้อมกับคำแนะนำว่าควรแสดงผลอย่างไร (คุณสมบัติเช่น #type)

#คีย์เป็น 'คำแนะนำ' ที่ย่อหน้าข้างต้นมีการพูดคุยเกี่ยวกับการที่ไม่ใช่#คีย์ข้อมูลที่ซ้อนกัน

ฉันขอแนะนำให้อ่านหน้านั้นอย่างละเอียดมันเป็นการทำงานที่ดีในการยกเลิกการทำให้อาเรย์ของสิ่งเรนเดอร์ทั้งภาพทำงานได้ดีและให้ตัวอย่างโค้ด

นอกจากนี้ยังมีคำอธิบาย / ตัวอย่างโค้ดอีกเล็กน้อยเกี่ยวกับชุดรูปแบบหน้าเอกสารซึ่งอาจมีประโยชน์

อาร์เรย์เรนเดอร์ถูกนำมาใช้ทั่วสถานที่ใน Drupal (รูปแบบธีมมาร์กอัปทั่วไป ฯลฯ ) ดังนั้นการรู้เล็กน้อยเกี่ยวกับมันจะช่วยได้มากในการพัฒนา Drupal ในอนาคต


เอามาเอาชนะกันเถอะ
chrisjlee

4

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;
      }
    }
  }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.