คุณจะสั่งซื้อเมตาแท็กที่เพิ่มโดย drupal_add_html_head () ได้อย่างไร


12

ฉันกำลังเพิ่มการสนับสนุน Open Graph ในไซต์ Drupal และฉันมีการโทรเป็นจำนวนมาก drupal_add_html_head () เช่น:

  $og_title = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:title', 
      'content' => $node->title,
    ),
  );
  drupal_add_html_head($og_title, 'zujava_og_title');

 $og_url = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:url', 
      'content' => url('node/' . $node->nid, array('absolute' => TRUE)),
    ),
  );
  drupal_add_html_head($og_url, 'zujava_og_url');

โดยรวมฉันมี 10 ข้อ ดูเหมือนว่าพวกเขาจะไม่ส่งออกในลำดับเดียวกันพวกเขาจะถูกเรียก (ทั้งหมดในฟังก์ชั่นเดียว)

มีการถ่วงน้ำหนักบางอย่างที่ฉันสามารถใช้เพื่อกำหนดลำดับหรือไม่

คำตอบ:


15

ใช้คุณสมบัติ #weight เนื่องจากdrupal_get_html_head ()ใช้drupal_render ()เพื่อแสดงเมตาแท็กจะใช้ #weight เมื่อแสดงผล

ฉันใช้รหัสต่อไปนี้เพื่อทำการทดสอบในไซต์ท้องถิ่นของฉัน เป็นรหัสเดียวกับที่คุณใช้ยกเว้นว่าไม่มีการอ้างอิงถึงวัตถุโหนด

  $og_title = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:title', 
      'content' => "This is the title",
    ),
  );
  drupal_add_html_head($og_title, 'zujava_og_title');

 $og_url = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:url', 
      'content' => url('node/1', array('absolute' => TRUE)),
    ),
  );
  drupal_add_html_head($og_url, 'zujava_og_url');

  dsm(drupal_get_html_head());

ผลลัพธ์ที่ฉันได้รับเป็นหนึ่งดังต่อไปนี้

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta property="og:url" content="http://tero.local/dr72/node/1" />
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />
<meta property="og:title" content="This is the title" />

ตามที่คุณเห็นแท็กที่เพิ่มล่าสุดคือแท็กแรกที่ปรากฏ

ฉันเรียกใช้รหัสต่อไปนี้

  $og_title = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:title', 
      'content' => "This is the title",
    ),
    '#weight' => 10,
  );
  drupal_add_html_head($og_title, 'zujava_og_title');

 $og_url = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:url', 
      'content' => url('node/1', array('absolute' => TRUE)),
    ),
    '#weight' => 200,
  );
  drupal_add_html_head($og_url, 'zujava_og_url');

  dsm(drupal_get_html_head());

ผลลัพธ์ที่ฉันได้รับเป็นหนึ่งดังต่อไปนี้

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />
<meta property="og:title" content="This is the title" />
<meta property="og:url" content="http://tero.local/dr72/node/1" />

อย่างที่คุณเห็นลำดับของเมตาแท็กนั้นเปลี่ยนไป เมตาแท็กที่เพิ่มจากรหัสปรากฏขึ้นหลังจากเมตาแท็กเริ่มต้นที่เพิ่มจาก Drupal

_drupal_default_html_head () (ฟังก์ชันที่ส่งกลับเมตาแท็กเริ่มต้น) ใช้ #weight สำหรับเมตาแท็ก "Content-Type"

  $elements['system_meta_content_type'] = array(
    '#type' => 'html_tag', 
    '#tag' => 'meta', 
    '#attributes' => array(
      'http-equiv' => 'Content-Type', 
      'content' => 'text/html; charset=utf-8',
    ),
    // Security: This always has to be output first. 
    '#weight' => -1000,
  );

เยี่ยมมากขอบคุณ! มันใช้งานได้ ดูเหมือนว่าฉันคิดถึงบางสิ่งที่ชัดเจนมาก เพื่อการศึกษาของฉันคุณพบเอกสารนี้ที่ไหน
Justin

1
เมื่อฉันสังเกตเห็นว่าเมตาแท็กแสดงผลด้วยdrupal_render()ฉันได้ลองดูว่ามีการใช้ #weight หรือไม่เนื่องจากใช้สำหรับองค์ประกอบของแบบฟอร์มที่แสดงผลผ่านฟังก์ชั่นเดียวกัน เอกสารสำหรับdrupal_render()พูดว่า: "องค์ประกอบเรียงลำดับภายในโดยใช้ uasort ()"
kiamlaluno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.