Bagaimana Anda memesan tag meta yang ditambahkan oleh drupal_add_html_head ()?


12

Saya menambahkan dukungan Open Graph ke situs Drupal dan saya memiliki banyak panggilan drupal_add_html_head (), seperti:

  $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');

Secara total, saya punya 10 di antaranya. Mereka tampaknya tidak menghasilkan dalam urutan yang sama mereka dipanggil (semua dalam satu fungsi).

Apakah ada beberapa jenis pembobotan yang dapat saya gunakan untuk mengatur pesanan?

Jawaban:


15

Gunakan properti #weight. Karena drupal_get_html_head () menggunakan drupal_render () untuk merender tag meta, #weight digunakan ketika merendernya.

Saya menggunakan kode berikut untuk melakukan tes di situs lokal saya; ini adalah kode yang sama yang Anda gunakan, kecuali tidak memiliki referensi ke objek node.

  $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());

Output yang saya dapatkan adalah yang berikut.

<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" />

Seperti yang Anda lihat, tag terakhir yang ditambahkan adalah yang pertama kali muncul.

Saya kemudian jalankan kode berikut.

  $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());

Output yang saya dapatkan adalah yang berikut.

<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" />

Seperti yang Anda lihat, urutan tag meta telah diubah; tag meta yang ditambahkan dari kode muncul setelah tag meta default ditambahkan dari Drupal.

_drupal_default_html_head () (fungsi yang mengembalikan tag meta default) menggunakan #weight untuk tag meta "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,
  );

Keren terima kasih! Ini berhasil. Sepertinya saya melewatkan sesuatu yang sangat jelas di suatu tempat. Untuk pendidikan saya sendiri, di mana Anda menemukan ini didokumentasikan?
Justin

1
Setelah saya perhatikan tag meta di-render drupal_render(), saya telah mencoba untuk melihat apakah # weight digunakan, seperti yang digunakan untuk elemen form yang di-render melalui fungsi yang sama. Dokumentasi untuk drupal_render()mengatakan: "Elemen diurutkan secara internal menggunakan uasort ()."
kiamlaluno
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.